# Copyright 2016 The V8 project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("../../gni/v8.gni")

if (is_fuchsia) {
  import("//build/config/fuchsia/rules.gni")

  cr_fuchsia_package("v8_unittests_pkg") {
    testonly = true
    binary = ":unittests"
    package_name_override = "v8_unittests"
  }

  fuchsia_package_runner("v8_unittests_fuchsia") {
    testonly = true
    package = ":v8_unittests_pkg"
    package_name_override = "v8_unittests"
  }
}

v8_executable("v8_cppgc_shared_unittests") {
  testonly = true

  configs = [
    "../..:external_config",
    "../..:internal_config_base",
  ]

  sources = [ "heap/base/run-all-unittests.cc" ]

  deps = [
    ":v8_cppgc_shared_unittests_sources",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

v8_source_set("v8_cppgc_shared_unittests_sources") {
  testonly = true

  sources = [ "heap/base/worklist-unittest.cc" ]

  configs = [
    "../..:external_config",
    "../..:internal_config_base",
  ]

  deps = [
    "../..:v8_cppgc_shared_for_testing",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

# Stand-alone target for C++ GC unittests. This is used to ensure that it
# builds without V8 as well. They are also included in the regular unittests
# target for simplicity.
v8_executable("cppgc_unittests") {
  testonly = true

  configs = [
    "../..:external_config",
    "../..:internal_config_base",
  ]

  sources = [ "heap/cppgc/run-all-unittests.cc" ]

  deps = [
    ":cppgc_unittests_sources",
    ":v8_cppgc_shared_unittests_sources",
    "../..:cppgc_for_testing",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

v8_source_set("cppgc_unittests_sources") {
  testonly = true

  sources = [
    "heap/cppgc/compactor-unittest.cc",
    "heap/cppgc/concurrent-marking-unittest.cc",
    "heap/cppgc/concurrent-sweeper-unittest.cc",
    "heap/cppgc/cross-thread-persistent-unittest.cc",
    "heap/cppgc/custom-spaces-unittest.cc",
    "heap/cppgc/ephemeron-pair-unittest.cc",
    "heap/cppgc/finalizer-trait-unittest.cc",
    "heap/cppgc/free-list-unittest.cc",
    "heap/cppgc/garbage-collected-unittest.cc",
    "heap/cppgc/gc-info-unittest.cc",
    "heap/cppgc/gc-invoker-unittest.cc",
    "heap/cppgc/heap-growing-unittest.cc",
    "heap/cppgc/heap-object-header-unittest.cc",
    "heap/cppgc/heap-page-unittest.cc",
    "heap/cppgc/heap-unittest.cc",
    "heap/cppgc/incremental-marking-schedule-unittest.cc",
    "heap/cppgc/logging-unittest.cc",
    "heap/cppgc/marker-unittest.cc",
    "heap/cppgc/marking-verifier-unittest.cc",
    "heap/cppgc/marking-visitor-unittest.cc",
    "heap/cppgc/member-unittest.cc",
    "heap/cppgc/minor-gc-unittest.cc",
    "heap/cppgc/name-trait-unittest.cc",
    "heap/cppgc/object-start-bitmap-unittest.cc",
    "heap/cppgc/page-memory-unittest.cc",
    "heap/cppgc/persistent-family-unittest.cc",
    "heap/cppgc/prefinalizer-unittest.cc",
    "heap/cppgc/source-location-unittest.cc",
    "heap/cppgc/stack-unittest.cc",
    "heap/cppgc/stats-collector-unittest.cc",
    "heap/cppgc/sweeper-unittest.cc",
    "heap/cppgc/test-platform.cc",
    "heap/cppgc/test-platform.h",
    "heap/cppgc/tests.cc",
    "heap/cppgc/tests.h",
    "heap/cppgc/visitor-unittest.cc",
    "heap/cppgc/weak-container-unittest.cc",
    "heap/cppgc/write-barrier-unittest.cc",
  ]

  configs = [
    "../..:external_config",
    "../..:internal_config_base",
    "../..:cppgc_base_config",
  ]

  deps = [
    "//testing/gmock",
    "//testing/gtest",
  ]
}

v8_executable("unittests") {
  testonly = true

  # TODO(machenbach): Translate from gyp.
  #['OS=="aix"', {
  #  'ldflags': [ '-Wl,-bbigtoc' ],
  #}],

  deps = [
    ":cppgc_unittests_sources",
    ":unittests_sources",
    ":v8_cppgc_shared_unittests_sources",
    "../..:v8_for_testing",
    "../..:v8_libbase",
    "../..:v8_libplatform",
    "//build/win:default_exe_manifest",
    "//testing/gmock",
    "//testing/gtest",
  ]

  data_deps = [ "../../tools:v8_testrunner" ]

  data = [
    "testcfg.py",
    "unittests.status",
  ]

  configs = [
    "../..:external_config",
    "../..:internal_config_base",
  ]
}

v8_source_set("unittests_sources") {
  testonly = true

  sources = [
    "../../test/common/assembler-tester.h",
    "../../test/common/wasm/wasm-macro-gen.h",
    "../../testing/gmock-support.h",
    "../../testing/gtest-support.h",
    "api/access-check-unittest.cc",
    "api/exception-unittest.cc",
    "api/interceptor-unittest.cc",
    "api/isolate-unittest.cc",
    "api/remote-object-unittest.cc",
    "api/resource-constraints-unittest.cc",
    "api/v8-object-unittest.cc",
    "asmjs/asm-scanner-unittest.cc",
    "asmjs/asm-types-unittest.cc",
    "base/address-region-unittest.cc",
    "base/atomic-utils-unittest.cc",
    "base/bits-unittest.cc",
    "base/cpu-unittest.cc",
    "base/division-by-constant-unittest.cc",
    "base/flags-unittest.cc",
    "base/functional-unittest.cc",
    "base/ieee754-unittest.cc",
    "base/iterator-unittest.cc",
    "base/logging-unittest.cc",
    "base/macros-unittest.cc",
    "base/ostreams-unittest.cc",
    "base/platform/condition-variable-unittest.cc",
    "base/platform/mutex-unittest.cc",
    "base/platform/platform-unittest.cc",
    "base/platform/semaphore-unittest.cc",
    "base/platform/time-unittest.cc",
    "base/region-allocator-unittest.cc",
    "base/sys-info-unittest.cc",
    "base/template-utils-unittest.cc",
    "base/threaded-list-unittest.cc",
    "base/utils/random-number-generator-unittest.cc",
    "base/vlq-base64-unittest.cc",
    "codegen/code-stub-assembler-unittest.cc",
    "codegen/code-stub-assembler-unittest.h",
    "codegen/register-configuration-unittest.cc",
    "codegen/source-position-table-unittest.cc",
    "compiler-dispatcher/compiler-dispatcher-unittest.cc",
    "compiler-dispatcher/optimizing-compile-dispatcher-unittest.cc",
    "compiler/backend/instruction-selector-unittest.cc",
    "compiler/backend/instruction-selector-unittest.h",
    "compiler/backend/instruction-sequence-unittest.cc",
    "compiler/backend/instruction-sequence-unittest.h",
    "compiler/backend/instruction-unittest.cc",
    "compiler/branch-elimination-unittest.cc",
    "compiler/bytecode-analysis-unittest.cc",
    "compiler/checkpoint-elimination-unittest.cc",
    "compiler/common-operator-reducer-unittest.cc",
    "compiler/common-operator-unittest.cc",
    "compiler/compiler-test-utils.h",
    "compiler/constant-folding-reducer-unittest.cc",
    "compiler/control-equivalence-unittest.cc",
    "compiler/control-flow-optimizer-unittest.cc",
    "compiler/dead-code-elimination-unittest.cc",
    "compiler/decompression-optimizer-unittest.cc",
    "compiler/diamond-unittest.cc",
    "compiler/effect-control-linearizer-unittest.cc",
    "compiler/graph-reducer-unittest.cc",
    "compiler/graph-reducer-unittest.h",
    "compiler/graph-trimmer-unittest.cc",
    "compiler/graph-unittest.cc",
    "compiler/graph-unittest.h",
    "compiler/int64-lowering-unittest.cc",
    "compiler/js-call-reducer-unittest.cc",
    "compiler/js-create-lowering-unittest.cc",
    "compiler/js-intrinsic-lowering-unittest.cc",
    "compiler/js-native-context-specialization-unittest.cc",
    "compiler/js-operator-unittest.cc",
    "compiler/js-typed-lowering-unittest.cc",
    "compiler/linkage-tail-call-unittest.cc",
    "compiler/load-elimination-unittest.cc",
    "compiler/loop-peeling-unittest.cc",
    "compiler/machine-operator-reducer-unittest.cc",
    "compiler/machine-operator-unittest.cc",
    "compiler/node-cache-unittest.cc",
    "compiler/node-matchers-unittest.cc",
    "compiler/node-properties-unittest.cc",
    "compiler/node-test-utils.cc",
    "compiler/node-test-utils.h",
    "compiler/node-unittest.cc",
    "compiler/opcodes-unittest.cc",
    "compiler/persistent-unittest.cc",
    "compiler/redundancy-elimination-unittest.cc",
    "compiler/regalloc/live-range-unittest.cc",
    "compiler/regalloc/mid-tier-register-allocator-unittest.cc",
    "compiler/regalloc/move-optimizer-unittest.cc",
    "compiler/regalloc/register-allocator-unittest.cc",
    "compiler/schedule-unittest.cc",
    "compiler/scheduler-rpo-unittest.cc",
    "compiler/scheduler-unittest.cc",
    "compiler/simplified-lowering-unittest.cc",
    "compiler/simplified-operator-reducer-unittest.cc",
    "compiler/simplified-operator-unittest.cc",
    "compiler/state-values-utils-unittest.cc",
    "compiler/typed-optimization-unittest.cc",
    "compiler/typer-unittest.cc",
    "compiler/value-numbering-reducer-unittest.cc",
    "compiler/zone-stats-unittest.cc",
    "date/date-cache-unittest.cc",
    "diagnostics/eh-frame-iterator-unittest.cc",
    "diagnostics/eh-frame-writer-unittest.cc",
    "execution/microtask-queue-unittest.cc",
    "heap/allocation-observer-unittest.cc",
    "heap/barrier-unittest.cc",
    "heap/bitmap-test-utils.h",
    "heap/bitmap-unittest.cc",
    "heap/code-object-registry-unittest.cc",
    "heap/embedder-tracing-unittest.cc",
    "heap/gc-idle-time-handler-unittest.cc",
    "heap/gc-tracer-unittest.cc",
    "heap/heap-controller-unittest.cc",
    "heap/heap-unittest.cc",
    "heap/heap-utils.h",
    "heap/index-generator-unittest.cc",
    "heap/item-parallel-job-unittest.cc",
    "heap/list-unittest.cc",
    "heap/local-factory-unittest.cc",
    "heap/local-heap-unittest.cc",
    "heap/marking-unittest.cc",
    "heap/marking-worklist-unittest.cc",
    "heap/memory-reducer-unittest.cc",
    "heap/object-stats-unittest.cc",
    "heap/persistent-handles-unittest.cc",
    "heap/safepoint-unittest.cc",
    "heap/slot-set-unittest.cc",
    "heap/spaces-unittest.cc",
    "heap/traced-reference-unittest.cc",
    "heap/unified-heap-snapshot-unittest.cc",
    "heap/unified-heap-unittest.cc",
    "heap/unified-heap-utils.cc",
    "heap/unified-heap-utils.h",
    "heap/unmapper-unittest.cc",
    "heap/worklist-unittest.cc",
    "interpreter/bytecode-array-builder-unittest.cc",
    "interpreter/bytecode-array-iterator-unittest.cc",
    "interpreter/bytecode-array-random-iterator-unittest.cc",
    "interpreter/bytecode-array-writer-unittest.cc",
    "interpreter/bytecode-decoder-unittest.cc",
    "interpreter/bytecode-node-unittest.cc",
    "interpreter/bytecode-operands-unittest.cc",
    "interpreter/bytecode-register-allocator-unittest.cc",
    "interpreter/bytecode-register-optimizer-unittest.cc",
    "interpreter/bytecode-source-info-unittest.cc",
    "interpreter/bytecode-utils.h",
    "interpreter/bytecodes-unittest.cc",
    "interpreter/constant-array-builder-unittest.cc",
    "interpreter/interpreter-assembler-unittest.cc",
    "interpreter/interpreter-assembler-unittest.h",
    "libplatform/default-job-unittest.cc",
    "libplatform/default-platform-unittest.cc",
    "libplatform/default-worker-threads-task-runner-unittest.cc",
    "libplatform/task-queue-unittest.cc",
    "libplatform/worker-thread-unittest.cc",
    "logging/counters-unittest.cc",
    "numbers/bigint-unittest.cc",
    "numbers/conversions-unittest.cc",
    "objects/backing-store-unittest.cc",
    "objects/object-unittest.cc",
    "objects/osr-optimized-code-cache-unittest.cc",
    "objects/value-serializer-unittest.cc",
    "objects/weakarraylist-unittest.cc",
    "parser/ast-value-unittest.cc",
    "parser/preparser-unittest.cc",
    "profiler/strings-storage-unittest.cc",
    "regress/regress-crbug-1041240-unittest.cc",
    "regress/regress-crbug-1056054-unittest.cc",
    "regress/regress-crbug-938251-unittest.cc",
    "run-all-unittests.cc",
    "strings/char-predicates-unittest.cc",
    "strings/unicode-unittest.cc",
    "tasks/background-compile-task-unittest.cc",
    "tasks/cancelable-tasks-unittest.cc",
    "test-helpers.cc",
    "test-helpers.h",
    "test-utils.cc",
    "test-utils.h",
    "torque/earley-parser-unittest.cc",
    "torque/ls-json-unittest.cc",
    "torque/ls-message-unittest.cc",
    "torque/ls-server-data-unittest.cc",
    "torque/torque-unittest.cc",
    "torque/torque-utils-unittest.cc",
    "utils/allocation-unittest.cc",
    "utils/detachable-vector-unittest.cc",
    "utils/locked-queue-unittest.cc",
    "utils/utils-unittest.cc",
    "utils/vector-unittest.cc",
    "wasm/control-transfer-unittest.cc",
    "wasm/decoder-unittest.cc",
    "wasm/function-body-decoder-unittest.cc",
    "wasm/leb-helper-unittest.cc",
    "wasm/loop-assignment-analysis-unittest.cc",
    "wasm/module-decoder-memory64-unittest.cc",
    "wasm/module-decoder-unittest.cc",
    "wasm/simd-shuffle-unittest.cc",
    "wasm/streaming-decoder-unittest.cc",
    "wasm/subtyping-unittest.cc",
    "wasm/wasm-code-manager-unittest.cc",
    "wasm/wasm-compiler-unittest.cc",
    "wasm/wasm-macro-gen-unittest.cc",
    "wasm/wasm-module-builder-unittest.cc",
    "wasm/wasm-module-sourcemap-unittest.cc",
    "zone/zone-allocator-unittest.cc",
    "zone/zone-chunk-list-unittest.cc",
    "zone/zone-unittest.cc",
  ]

  if (v8_enable_wasm_gdb_remote_debugging) {
    sources += [ "wasm/wasm-gdbserver-unittest.cc" ]
  }

  if (v8_enable_conservative_stack_scanning) {
    sources += [ "heap/object-start-bitmap-unittest.cc" ]
  }

  if (v8_current_cpu == "arm") {
    sources += [
      "assembler/turbo-assembler-arm-unittest.cc",
      "compiler/arm/instruction-selector-arm-unittest.cc",
    ]
  } else if (v8_current_cpu == "arm64") {
    sources += [
      "assembler/turbo-assembler-arm64-unittest.cc",
      "compiler/arm64/instruction-selector-arm64-unittest.cc",
    ]
  } else if (v8_current_cpu == "x86") {
    sources += [
      "assembler/turbo-assembler-ia32-unittest.cc",
      "compiler/ia32/instruction-selector-ia32-unittest.cc",
    ]
  } else if (v8_current_cpu == "mips" || v8_current_cpu == "mipsel") {
    sources += [
      "assembler/turbo-assembler-mips-unittest.cc",
      "compiler/mips/instruction-selector-mips-unittest.cc",
    ]
  } else if (v8_current_cpu == "mips64" || v8_current_cpu == "mips64el") {
    sources += [
      "assembler/turbo-assembler-mips64-unittest.cc",
      "compiler/mips64/instruction-selector-mips64-unittest.cc",
    ]
  } else if (v8_current_cpu == "x64") {
    sources += [
      "assembler/turbo-assembler-x64-unittest.cc",
      "compiler/x64/instruction-selector-x64-unittest.cc",
      "wasm/trap-handler-x64-unittest.cc",
    ]
  } else if (v8_current_cpu == "ppc" || v8_current_cpu == "ppc64") {
    sources += [
      "assembler/turbo-assembler-ppc-unittest.cc",
      "compiler/ppc/instruction-selector-ppc-unittest.cc",
    ]
  } else if (v8_current_cpu == "s390" || v8_current_cpu == "s390x") {
    sources += [
      "assembler/turbo-assembler-s390-unittest.cc",
      "compiler/s390/instruction-selector-s390-unittest.cc",
    ]
  }

  if (is_posix) {
    sources += [ "wasm/trap-handler-posix-unittest.cc" ]
  }

  if (is_win) {
    sources += [ "wasm/trap-handler-win-unittest.cc" ]
  }

  configs = [
    "../..:cppgc_base_config",
    "../..:external_config",
    "../..:internal_config_base",
  ]

  deps = [
    "..:common_test_headers",
    "../..:v8_for_testing",
    "../..:v8_libbase",
    "../..:v8_libplatform",
    "../..:v8_wrappers",
    "../..:wasm_test_common",
    "../../third_party/inspector_protocol:crdtp_test",
    "//build/win:default_exe_manifest",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (is_win) {
    # This warning is benignly triggered by the U16 and U32 macros in
    # bytecode-utils.h.
    # C4309: 'static_cast': truncation of constant value
    cflags = [ "/wd4309" ]
  }
}
