# Copyright (c) 2020 Project CHIP Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//build_overrides/build.gni")
import("//build_overrides/chip.gni")
import("//build_overrides/nlio.gni")
import("//build_overrides/nlunit_test.gni")

import("${chip_root}/build/chip/chip_test_suite.gni")

static_library("helpers") {
  output_name = "libMessagingTestHelpers"
  output_dir = "${root_out_dir}/lib"

  sources = [
    "MessagingContext.cpp",
    "MessagingContext.h",
  ]

  cflags = [ "-Wconversion" ]

  deps = [
    "${chip_root}/src/credentials/tests:cert_test_vectors",
    "${chip_root}/src/messaging",
    "${chip_root}/src/protocols",
    "${chip_root}/src/transport",
    "${chip_root}/src/transport/tests:helpers",
    "${nlio_root}:nlio",
  ]
}

chip_test_suite("tests") {
  output_name = "libMessagingLayerTests"

  test_sources = []

  if (chip_device_platform != "efr32") {
    # TODO(#10447): ReliableMessage Test has HF, and ExchangeMgr hangs on EFR32.
    # And TestAbortExchangesForFabric does not link on EFR32 for some reason.
    test_sources += [
      "TestAbortExchangesForFabric.cpp",
      "TestExchangeMgr.cpp",
      "TestReliableMessageProtocol.cpp",
    ]

    if (chip_device_platform != "esp32" && chip_device_platform != "mbed" &&
        chip_device_platform != "nrfconnect") {
      test_sources += [ "TestExchangeHolder.cpp" ]
    }

    if (chip_device_platform == "linux") {
      test_sources += [ "TestMessagingLayer.cpp" ]
    }
  }

  cflags = [ "-Wconversion" ]

  public_deps = [
    ":helpers",
    "${chip_root}/src/inet/tests:helpers",
    "${chip_root}/src/lib/core",
    "${chip_root}/src/lib/support",
    "${chip_root}/src/lib/support:testing",
    "${chip_root}/src/messaging",
    "${chip_root}/src/protocols",
    "${chip_root}/src/transport",
    "${chip_root}/src/transport/raw/tests:helpers",
    "${nlio_root}:nlio",
    "${nlunit_test_root}:nlunit-test",
  ]
}
