# 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/nlunit_test.gni")
import("//build_overrides/pigweed.gni")

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

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/support:static-support",
    "${chip_root}/src/lib/support:testing",
    "${chip_root}/src/lib/support/jsontlv",
    "${chip_root}/src/platform",
  ]
}
