# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# This file is meant to be included into an target to create a unittest that
# invokes a set of no-compile tests.  A no-compile test is a test that asserts
# a particular construct will not compile.
#
# Also see:
#   http://dev.chromium.org/developers/testing/no-compile-tests
#
# To use this, create a gyp target with the following form:
#
# import("//build/nocompile.gni")
# nocompile_test("my_module_nc_unittests") {
#   sources = [
#     'nc_testset_1.nc',
#     'nc_testset_2.nc',
#   ]
# }
#
# The .nc files are C++ files that contain code we wish to assert will not
# compile.  Each individual test case in the file should be put in its own
# #ifdef section.  The expected output should be appended with a C++-style
# comment that has a python list of regular expressions.  This will likely
# be greater than 80-characters. Giving a solid expected output test is
# important so that random compile failures do not cause the test to pass.
#
# Example .nc file:
#
#   #if defined(TEST_NEEDS_SEMICOLON)  // [r"expected ',' or ';' at end of input"]
#
#   int a = 1
#
#   #elif defined(TEST_NEEDS_CAST)  // [r"invalid conversion from 'void*' to 'char*'"]
#
#   void* a = NULL;
#   char* b = a;
#
#   #endif
#
# If we needed disable TEST_NEEDS_SEMICOLON, then change the define to:
#
#   DISABLE_TEST_NEEDS_SEMICOLON
#   TEST_NEEDS_CAST
#
# The lines above are parsed by a regexp so avoid getting creative with the
# formatting or ifdef logic; it will likely just not work.
#
# Implementation notes:
# The .nc files are actually processed by a python script which executes the
# compiler and generates a .cc file that is empty on success, or will have a
# series of #error lines on failure, and a set of trivially passing gunit
# TEST() functions on success. This allows us to fail at the compile step when
# something goes wrong, and know during the unittest run that the test was at
# least processed when things go right.

import("//build/config/clang/clang.gni")
import("//testing/test.gni")

declare_args() {
  # TODO(crbug.com/105388): make sure no-compile test is not flaky.
  enable_nocompile_tests =
      (is_linux || is_mac || is_ios) && is_clang && host_cpu == target_cpu
}

if (enable_nocompile_tests) {
  import("//build/config/c++/c++.gni")
  import("//build/config/sysroot.gni")
  template("nocompile_test") {
    nocompile_target = target_name + "_run_nocompile"

    action_foreach(nocompile_target) {
      testonly = true
      script = "//tools/nocompile_driver.py"
      sources = invoker.sources
      deps = invoker.deps
      if (defined(invoker.public_deps)) {
        public_deps = invoker.public_deps
      }

      result_path = "$target_gen_dir/{{source_name_part}}_nc.cc"
      depfile = "${result_path}.d"
      outputs = [
        result_path,
      ]
      args = [
        rebase_path("$clang_base_path/bin/clang++", root_build_dir),
        "4",  # number of compilers to invoke in parallel.
        "{{source}}",
        rebase_path(result_path, root_build_dir),
        "--",
        "-nostdinc++",
        "-isystem" + rebase_path("$libcxx_prefix/include", root_build_dir),
        "-isystem" + rebase_path("$libcxxabi_prefix/include", root_build_dir),
        "-std=c++14",
        "-Wall",
        "-Werror",
        "-Wfatal-errors",
        "-Wthread-safety",
        "-I" + rebase_path("//", root_build_dir),
        "-I" + rebase_path(root_gen_dir, root_build_dir),
      ]
      if (sysroot != "") {
        args += [
          "--sysroot",
          rebase_path(sysroot, root_build_dir),
        ]
      }
    }

    test(target_name) {
      deps = invoker.deps + [ ":$nocompile_target" ]
      sources = get_target_outputs(":$nocompile_target")
    }
  }
}
