# Copyright 2022 The Dawn 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.

# Note: This file is intentionally not used by any other BUILD.gn in Dawn.
# Instead, Chromium depends directly on this file to build the WebGPU CTS.
# Scripts called from this file assume Dawn is checked out inside Chromium.

# This needs to be copied to the output directory since the CTS tests also
# serve resources that are copied into it.
copy("webgpu_cts_resources") {
  testonly = true
  sources = [
    "test_page.html",
    "test_runner.js",
  ]
  outputs = [ "$target_gen_dir/{{source_file_part}}" ]
}

group("webgpu-cts") {
  testonly = true
  data_deps = [
    ":webgpu_cts_resources",
    "../third_party/gn/webgpu-cts",
  ]
  data = [
    "//third_party/node/",
    "./scripts",
    "./expectations.txt",
    "../third_party/webgpu-cts/src",
    "../third_party/webgpu-cts/node.tsconfig.json",
    "../third_party/webgpu-cts/tsconfig.json",
  ]
}
