# Copyright 2017 The Bazel Authors. All rights reserved.
#
# 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.

load(":test.bzl", "e2e_integration_test")

e2e_integration_test(
    name = "e2e_bazel_managed_deps",
    npm_packages = {
        "//packages/jasmine:npm_package": "@bazel/jasmine",
    },
)

e2e_integration_test(
    name = "e2e_coverage",
    bazel_commands = [
        "info",
        "coverage ...",
    ],
    npm_packages = {
        "//packages/jasmine:npm_package": "@bazel/jasmine",
        "//packages/typescript:npm_package": "@bazel/typescript",
    },
    # Coverage not working on Windows. Looks like a bazel issue.
    # ==================== Test output for //:coverage_test:
    # ERROR(tools/test/windows/tw.cc:1262) ERROR: src/main/native/windows/process.cc(199): CreateProcessW("C:\users\b\_bazel_b\tpt6yasm\execroot\e2e_coverage\bazel-out\x64_windows-fastbuild\bin\coverage_test.bat.runfiles\bazel_tools\tools\test\collect_coverage.sh"  ./coverage_test.bat): The system cannot find the file specified.
    #  (error: 2)
    # ERROR(tools/test/windows/tw.cc:1419) Failed to start test process (arg: C:\users\b\_bazel_b\tpt6yasm\execroot\e2e_coverage\bazel-out\x64_windows-fastbuild\bin\coverage_test.bat.runfiles\bazel_tools\tools\test\collect_coverage.sh)
    tags = [
        "no-bazelci-windows",
    ],
)

e2e_integration_test(
    name = "e2e_fine_grained_symlinks",
)

e2e_integration_test(
    name = "e2e_jasmine",
    npm_packages = {
        "//packages/jasmine:npm_package": "@bazel/jasmine",
    },
)

e2e_integration_test(
    name = "e2e_node_loader_no_preserve_symlinks",
)

e2e_integration_test(
    name = "e2e_node_loader_preserve_symlinks",
)

e2e_integration_test(
    name = "e2e_nodejs_image",
    bazel_commands = [
        "info",
        "test ...",
        "run --platforms=@build_bazel_rules_nodejs//toolchains/node:linux_amd64 //:nodejs_image",
    ],
    # Only run on buildkite linux as other CI platforms have no docker available
    tags = [
        "no-bazelci-mac",
        "no-bazelci-windows",
        "no-circleci",
    ],
)

e2e_integration_test(
    name = "e2e_packages",
    # TODO(alex): figure out why this is broken by turning on linker
    tags = ["no-bazelci-windows"],
)

e2e_integration_test(
    name = "e2e_symlinked_node_modules_npm",
)

e2e_integration_test(
    name = "e2e_symlinked_node_modules_yarn",
)

# terser rules are tested in the e2e_webapp
test_suite(
    name = "e2e_terser",
    tests = ["e2e_webapp"],
)

# rollup rules are tested in the e2e_webapp
test_suite(
    name = "e2e_rollup",
    tests = ["e2e_webapp"],
)

e2e_integration_test(
    name = "e2e_webapp",
    npm_packages = {
        "//packages/rollup:npm_package": "@bazel/rollup",
        "//packages/terser:npm_package": "@bazel/terser",
    },
)

e2e_integration_test(
    name = "e2e_concatjs_devserver",
    npm_packages = {
        "//packages/concatjs:npm_package": "@bazel/concatjs",
        "//packages/protractor:npm_package": "@bazel/protractor",
        "//packages/typescript:npm_package": "@bazel/typescript",
    },
)

[e2e_integration_test(
    name = "e2e_typescript_%s" % tsc_version.replace(".", "_"),
    npm_packages = {
        "//packages/jasmine:npm_package": "@bazel/jasmine",
        "//packages/typescript:npm_package": "@bazel/typescript",
    },
    # use these package.json packages instead
    package_json_substitutions = {
        "typescript": tsc_version,
    },
    workspace_root = "typescript",
) for tsc_version in [
    "3.0.x",
    "3.1.x",
    "3.2.x",
    "3.3.x",
    "3.4.x",
    "3.5.x",
    "3.6.x",
    "3.7.x",
    "3.8.x",
    "3.9.x",
    "4.0.x",
    "4.1.x",
]]
