# Copyright (c) 2020-2023 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/pigweed.gni")

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

pw_source_set("pw-test-macros") {
  output_dir = "${root_out_dir}/lib"
  public_deps = [
    "$dir_pw_log:impl",
    "$dir_pw_unit_test",
  ]
  sources = [ "ExtraPwTestMacros.h" ]
}

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

  test_sources = [
    "TestBitMask.cpp",
    "TestBufferReader.cpp",
    "TestBufferWriter.cpp",
    "TestBytesCircularBuffer.cpp",
    "TestBytesToHex.cpp",
    "TestCHIPCounter.cpp",
    "TestCHIPMem.cpp",
    "TestCHIPMemString.cpp",
    "TestDefer.cpp",
    "TestErrorStr.cpp",
    "TestFixedBufferAllocator.cpp",
    "TestFold.cpp",
    "TestIniEscaping.cpp",
    "TestIntrusiveList.cpp",
    "TestJsonToTlv.cpp",
    "TestJsonToTlvToJson.cpp",
    "TestPersistedCounter.cpp",
    "TestPool.cpp",
    "TestPrivateHeap.cpp",
    "TestSafeInt.cpp",
    "TestSafeString.cpp",
    "TestScoped.cpp",
    "TestScopedBuffer.cpp",
    "TestSorting.cpp",
    "TestSpan.cpp",
    "TestStateMachine.cpp",
    "TestStaticSupportSmartPtr.cpp",
    "TestStringBuilder.cpp",
    "TestStringSplitter.cpp",
    "TestTestPersistentStorageDelegate.cpp",
    "TestThreadOperationalDataset.cpp",
    "TestTimeUtils.cpp",
    "TestTlvJson.cpp",
    "TestTlvToJson.cpp",
    "TestUtf8.cpp",
    "TestVariant.cpp",
    "TestZclString.cpp",
  ]
  if (current_os != "mbed") {
    test_sources += [ "TestCHIPArgParser.cpp" ]
  }

  sources = []

  cflags = [
    "-Wconversion",

    # TODO(#21255): work-around for SimpleStateMachine constructor issue.
    "-Wno-uninitialized",

    # TestStringSplitter intentionally validates string overflows.
    "-Wno-stringop-truncation",
  ]

  public_deps = [
    "${chip_root}/src/credentials",
    "${chip_root}/src/lib/core",
    "${chip_root}/src/lib/core:string-builder-adapters",
    "${chip_root}/src/lib/support:static-support",
    "${chip_root}/src/lib/support:testing",
    "${chip_root}/src/lib/support/jsontlv",
    "${chip_root}/src/platform",
  ]
}
