# 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/isolate.gni")
import("../gni/v8.gni")

group("gn_all") {
  testonly = true

  deps = [
    ":default_tests",
    "inspector:inspector-test",
    "mkgrokdump:mkgrokdump",
  ]

  if (host_os != "mac" || !is_android) {
    # These items don't compile for Android on Mac.
    deps += [
      "cctest:cctest",
      "cctest:generate-bytecode-expectations",
      "unittests:unittests",
    ]
  }

  if (v8_test_isolation_mode != "noop") {
    deps += [
      ":benchmarks_run",
      ":bot_default_run",
      ":default_run",
      ":mozilla_run",
      "test262:test262_run",
    ]
  }
}

###############################################################################
# Test groups
#

group("default_tests") {
  testonly = true

  if (v8_test_isolation_mode != "noop") {
    deps = [
      ":cctest_run",
      ":fuzzer_run",
      ":inspector-test_run",
      ":intl_run",
      ":message_run",
      ":mjsunit_run",
      ":mkgrokdump_run",
      ":preparser_run",
      ":unittests_run",
      ":wasm_spec_tests_run",
    ]
  }
}

v8_isolate_run("bot_default") {
  deps = [
    ":default_tests",
    ":webkit_run",
  ]

  isolate = "bot_default.isolate"
}

v8_isolate_run("default") {
  deps = [
    ":default_tests",
  ]

  isolate = "default.isolate"
}

v8_isolate_run("optimize_for_size") {
  deps = [
    ":cctest_run",
    ":inspector-test_run",
    ":intl_run",
    ":mjsunit_run",
    ":webkit_run",
  ]

  isolate = "optimize_for_size.isolate"
}

v8_isolate_run("perf") {
  deps = [
    ":cctest_exe_run",
    "..:d8_run",
  ]

  isolate = "perf.isolate"
}

###############################################################################
# Subtests
#

v8_isolate_run("benchmarks") {
  deps = [
    "..:d8_run",
  ]

  isolate = "benchmarks/benchmarks.isolate"
}

v8_isolate_run("cctest") {
  deps = [
    ":cctest_exe_run",
  ]

  isolate = "cctest/cctest.isolate"
}

v8_isolate_run("cctest_exe") {
  deps = [
    "cctest:cctest",
  ]

  isolate = "cctest/cctest_exe.isolate"
}

v8_isolate_run("fuzzer") {
  deps = [
    "..:v8_simple_json_fuzzer",
    "..:v8_simple_parser_fuzzer",
    "..:v8_simple_regexp_fuzzer",
    "..:v8_simple_wasm_fuzzer",
  ]

  isolate = "fuzzer/fuzzer.isolate"
}

v8_isolate_run("inspector-test") {
  deps = [
    "inspector:inspector-test",
  ]

  isolate = "inspector/inspector.isolate"
}

v8_isolate_run("intl") {
  deps = [
    "..:d8_run",
  ]

  isolate = "intl/intl.isolate"
}

v8_isolate_run("message") {
  deps = [
    "..:d8_run",
  ]

  isolate = "message/message.isolate"
}

v8_isolate_run("mjsunit") {
  deps = [
    "..:d8_run",
  ]

  isolate = "mjsunit/mjsunit.isolate"
}

v8_isolate_run("mkgrokdump") {
  deps = [
    "mkgrokdump:mkgrokdump",
  ]

  isolate = "mkgrokdump/mkgrokdump.isolate"
}

v8_isolate_run("mozilla") {
  deps = [
    "..:d8_run",
  ]

  isolate = "mozilla/mozilla.isolate"
}

v8_isolate_run("preparser") {
  deps = [
    "..:d8_run",
  ]

  isolate = "preparser/preparser.isolate"
}

v8_isolate_run("unittests") {
  deps = [
    "unittests:unittests",
  ]

  isolate = "unittests/unittests.isolate"
}

v8_isolate_run("wasm_spec_tests") {
  deps = [
    "..:d8_run",
  ]

  isolate = "wasm-spec-tests/wasm-spec-tests.isolate"
}

v8_isolate_run("webkit") {
  deps = [
    "..:d8_run",
  ]

  isolate = "webkit/webkit.isolate"
}
