# Copyright 2012 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.

import("../../../scripts/dawn_overrides_with_defaults.gni")

import("//testing/test.gni")
import("${dawn_root}/generator/dawn_generator.gni")
import("${dawn_root}/scripts/dawn_features.gni")

group("tests") {
  testonly = true
  deps = [
    ":dawn_end2end_tests",
    ":dawn_perf_tests",
    ":dawn_unittests",
  ]
}

###############################################################################
# Gtest Gmock - Handle building inside and outside of Chromium.
###############################################################################

# When building outside of Chromium we need to define our own targets for GTest
# and GMock. However when compiling inside of Chromium we need to reuse the
# existing targets, both because Chromium has a special harness for swarming
# and because otherwise the "gn check" fails.

if (!build_with_chromium) {
  # When we aren't in Chromium we define out own targets based on the location
  # of the googletest repo.
  googletest_dir = dawn_googletest_dir

  config("gtest_config") {
    include_dirs = [
      "${googletest_dir}/googletest",
      "${googletest_dir}/googletest/include",
    ]
  }

  static_library("gtest") {
    testonly = true
    sources = [ "${googletest_dir}/googletest/src/gtest-all.cc" ]
    public_configs = [ ":gtest_config" ]
  }

  config("gmock_config") {
    include_dirs = [
      "${googletest_dir}/googlemock",
      "${googletest_dir}/googlemock/include",
      "${googletest_dir}/googletest/include",
    ]
  }

  static_library("gmock") {
    testonly = true
    sources = [ "${googletest_dir}/googlemock/src/gmock-all.cc" ]
    public_configs = [ ":gmock_config" ]
  }

  group("gmock_and_gtest") {
    testonly = true
    public_deps = [
      ":gmock",
      ":gtest",
    ]
  }
} else {
  # When we are in Chromium we reuse its targets, and also add some deps that
  # are needed to launch the test in swarming mode.
  group("gmock_and_gtest") {
    testonly = true
    public_deps = [
      "//base",
      "//base/test:test_support",
      "//testing/gmock",
      "//testing/gtest",
    ]
  }
}

###############################################################################
# Wrapping of Chromium targets
###############################################################################

# These targets are separated because they are Chromium sources files that
# can't use the dawn_internal config, otherwise Dawn's warning flags get
# applied while compiling a bunch of Chromium's //base (via header inclusion)
if (build_with_chromium) {
  source_set("unittests_main") {
    testonly = true
    deps = [ ":gmock_and_gtest" ]
    sources = [ "//gpu/dawn_unittests_main.cc" ]
  }
  source_set("end2end_tests_main") {
    testonly = true
    deps = [ ":gmock_and_gtest" ]
    sources = [ "//gpu/dawn_end2end_tests_main.cc" ]
  }
  source_set("perf_tests_main") {
    testonly = true
    deps = [ ":gmock_and_gtest" ]
    sources = [ "//gpu/dawn_perf_tests_main.cc" ]
  }
}

###############################################################################
# Copy target for DXC
###############################################################################

# When building with chromium under Windows, we need to copy the DXC from
# Windows SDK into build folder, in order to ensure a DXC of verison 1.6 is
# avaliable when running end-to-end tests in Chromium. Note that currently DXC
# only provided for x86 and x64 in Windows SDK 20348.
if (build_with_chromium && is_win &&
    (target_cpu == "x64" || target_cpu == "x86")) {
  # The windows_sdk_path is acquired in visual_studio_version.gni.
  import("//build/config/win/visual_studio_version.gni")

  # Windows 10 SDK version 10.0.20348.0 provides DXC compiler and validator both
  # of v1.6 and Chromium builds require this SDK version or higher.
  assert(defined(windows_sdk_path))
  assert(defined(windows_sdk_version))
  assert(windows_sdk_path != "")
  assert(windows_sdk_version != "")

  # Declare a copy target to copy DXC binary from Windows SDK for running Dawn
  # end-to-end test in Chromium.
  copy("copy_dxc_binary") {
    sources = [
      "$windows_sdk_path/bin/$windows_sdk_version/$target_cpu/dxc.exe",
      "$windows_sdk_path/bin/$windows_sdk_version/$target_cpu/dxcompiler.dll",
      "$windows_sdk_path/bin/$windows_sdk_version/$target_cpu/dxil.dll",
    ]

    outputs = [ "$root_out_dir/{{source_file_part}}" ]
  }
}

###############################################################################
# Dawn test template
###############################################################################
template("dawn_test") {
  test(target_name) {
    # Copy all variables except "configs", which has a default value
    forward_variables_from(invoker, "*", [ "configs" ])
    if (defined(invoker.configs)) {
      configs += invoker.configs
    }

    configs += [ "${dawn_root}/src/dawn/common:internal_config" ]

    # Running Dawn tests within Chromium in Windows may require DXC, copy DXC
    # binary from Windows SDK.
    if (build_with_chromium && is_win &&
        (target_cpu == "x64" || target_cpu == "x86")) {
      if (defined(data_deps)) {
        data_deps += [ ":copy_dxc_binary" ]
      } else {
        data_deps = [ ":copy_dxc_binary" ]
      }
    }
  }
}

###############################################################################
# Dawn unittests
###############################################################################

dawn_json_generator("mock_webgpu_gen") {
  target = "mock_api"
  outputs = [
    "src/dawn/mock_webgpu.h",
    "src/dawn/mock_webgpu.cpp",
  ]
}

# Source code for mocks used for unit testing are separated from the rest of
# sources so that they aren't included in non-test builds.
source_set("native_mocks_sources") {
  testonly = true

  deps = [
    ":gmock_and_gtest",
    "${dawn_root}/src/dawn:proc",
    "${dawn_root}/src/dawn/native:sources",
    "${dawn_root}/src/dawn/native:static",
    "${dawn_root}/src/dawn/utils",
  ]

  # Add internal dawn native config for internal unittests.
  configs += [ "${dawn_root}/src/dawn/native:internal" ]

  sources = [
    "unittests/native/mocks/BindGroupLayoutMock.cpp",
    "unittests/native/mocks/BindGroupLayoutMock.h",
    "unittests/native/mocks/BindGroupMock.cpp",
    "unittests/native/mocks/BindGroupMock.h",
    "unittests/native/mocks/BufferMock.cpp",
    "unittests/native/mocks/BufferMock.h",
    "unittests/native/mocks/CommandBufferMock.cpp",
    "unittests/native/mocks/CommandBufferMock.h",
    "unittests/native/mocks/ComputePipelineMock.cpp",
    "unittests/native/mocks/ComputePipelineMock.h",
    "unittests/native/mocks/DawnMockTest.cpp",
    "unittests/native/mocks/DawnMockTest.h",
    "unittests/native/mocks/DeviceMock.cpp",
    "unittests/native/mocks/DeviceMock.h",
    "unittests/native/mocks/ExternalTextureMock.cpp",
    "unittests/native/mocks/ExternalTextureMock.h",
    "unittests/native/mocks/PipelineLayoutMock.cpp",
    "unittests/native/mocks/PipelineLayoutMock.h",
    "unittests/native/mocks/QuerySetMock.cpp",
    "unittests/native/mocks/QuerySetMock.h",
    "unittests/native/mocks/QueueMock.cpp",
    "unittests/native/mocks/QueueMock.h",
    "unittests/native/mocks/RenderPipelineMock.cpp",
    "unittests/native/mocks/RenderPipelineMock.h",
    "unittests/native/mocks/SamplerMock.cpp",
    "unittests/native/mocks/SamplerMock.h",
    "unittests/native/mocks/ShaderModuleMock.cpp",
    "unittests/native/mocks/ShaderModuleMock.h",
    "unittests/native/mocks/SwapChainMock.cpp",
    "unittests/native/mocks/SwapChainMock.h",
    "unittests/native/mocks/TextureMock.cpp",
    "unittests/native/mocks/TextureMock.h",
  ]
}

dawn_test("dawn_unittests") {
  deps = [
    ":gmock_and_gtest",
    ":mock_webgpu_gen",
    ":native_mocks_sources",
    ":platform_mocks_sources",
    "${dawn_root}/src/dawn:cpp",
    "${dawn_root}/src/dawn:proc",
    "${dawn_root}/src/dawn/common",
    "${dawn_root}/src/dawn/native:sources",
    "${dawn_root}/src/dawn/native:static",
    "${dawn_root}/src/dawn/utils",
    "${dawn_root}/src/dawn/wire",
  ]

  # Add internal dawn native config for internal unittests.
  configs = [ "${dawn_root}/src/dawn/native:internal" ]

  # Add Tint public+common configs so <tint/tint.h> can be included to test
  # the Dawn/Tint boundary.
  configs += [
    "${dawn_root}/src/tint:tint_public_config",
    "${dawn_root}/src/tint:tint_common_config",
  ]

  sources = get_target_outputs(":mock_webgpu_gen")
  sources += [
    "${dawn_root}/src/dawn/wire/client/ClientMemoryTransferService_mock.cpp",
    "${dawn_root}/src/dawn/wire/client/ClientMemoryTransferService_mock.h",
    "${dawn_root}/src/dawn/wire/server/ServerMemoryTransferService_mock.cpp",
    "${dawn_root}/src/dawn/wire/server/ServerMemoryTransferService_mock.h",
    "DawnNativeTest.cpp",
    "DawnNativeTest.h",
    "MockCallback.h",
    "ToggleParser.cpp",
    "ToggleParser.h",
    "unittests/AsyncTaskTests.cpp",
    "unittests/BitSetIteratorTests.cpp",
    "unittests/BuddyAllocatorTests.cpp",
    "unittests/BuddyMemoryAllocatorTests.cpp",
    "unittests/ChainUtilsTests.cpp",
    "unittests/CommandAllocatorTests.cpp",
    "unittests/ConcurrentCacheTests.cpp",
    "unittests/EnumClassBitmasksTests.cpp",
    "unittests/EnumMaskIteratorTests.cpp",
    "unittests/ErrorTests.cpp",
    "unittests/FeatureTests.cpp",
    "unittests/GPUInfoTests.cpp",
    "unittests/GetProcAddressTests.cpp",
    "unittests/ITypArrayTests.cpp",
    "unittests/ITypBitsetTests.cpp",
    "unittests/ITypSpanTests.cpp",
    "unittests/ITypVectorTests.cpp",
    "unittests/LimitsTests.cpp",
    "unittests/LinkedListTests.cpp",
    "unittests/MathTests.cpp",
    "unittests/NumericTests.cpp",
    "unittests/ObjectBaseTests.cpp",
    "unittests/PerStageTests.cpp",
    "unittests/PerThreadProcTests.cpp",
    "unittests/PlacementAllocatedTests.cpp",
    "unittests/RefBaseTests.cpp",
    "unittests/RefCountedTests.cpp",
    "unittests/ResultTests.cpp",
    "unittests/RingBufferAllocatorTests.cpp",
    "unittests/SerialMapTests.cpp",
    "unittests/SerialQueueTests.cpp",
    "unittests/SlabAllocatorTests.cpp",
    "unittests/StackContainerTests.cpp",
    "unittests/SubresourceStorageTests.cpp",
    "unittests/SystemUtilsTests.cpp",
    "unittests/ToBackendTests.cpp",
    "unittests/ToggleTests.cpp",
    "unittests/TypedIntegerTests.cpp",
    "unittests/UnicodeTests.cpp",
    "unittests/native/AllowedErrorTests.cpp",
    "unittests/native/BlobTests.cpp",
    "unittests/native/CacheRequestTests.cpp",
    "unittests/native/CommandBufferEncodingTests.cpp",
    "unittests/native/CreatePipelineAsyncTaskTests.cpp",
    "unittests/native/DestroyObjectTests.cpp",
    "unittests/native/DeviceAsyncTaskTests.cpp",
    "unittests/native/DeviceCreationTests.cpp",
    "unittests/native/ObjectContentHasherTests.cpp",
    "unittests/native/StreamTests.cpp",
    "unittests/validation/BindGroupValidationTests.cpp",
    "unittests/validation/BufferValidationTests.cpp",
    "unittests/validation/CommandBufferValidationTests.cpp",
    "unittests/validation/ComputeIndirectValidationTests.cpp",
    "unittests/validation/ComputeValidationTests.cpp",
    "unittests/validation/CopyCommandsValidationTests.cpp",
    "unittests/validation/CopyTextureForBrowserTests.cpp",
    "unittests/validation/DebugMarkerValidationTests.cpp",
    "unittests/validation/DeprecatedAPITests.cpp",
    "unittests/validation/DeprecatedAPITests.h",
    "unittests/validation/DeviceValidationTests.cpp",
    "unittests/validation/DrawIndirectValidationTests.cpp",
    "unittests/validation/DrawVertexAndIndexBufferOOBValidationTests.cpp",
    "unittests/validation/DynamicStateCommandValidationTests.cpp",
    "unittests/validation/ErrorScopeValidationTests.cpp",
    "unittests/validation/ExternalTextureTests.cpp",
    "unittests/validation/GetBindGroupLayoutValidationTests.cpp",
    "unittests/validation/IndexBufferValidationTests.cpp",
    "unittests/validation/InternalUsageValidationTests.cpp",
    "unittests/validation/LabelTests.cpp",
    "unittests/validation/MinimumBufferSizeValidationTests.cpp",
    "unittests/validation/MultipleDeviceTests.cpp",
    "unittests/validation/OverridableConstantsValidationTests.cpp",
    "unittests/validation/PipelineAndPassCompatibilityTests.cpp",
    "unittests/validation/QueryValidationTests.cpp",
    "unittests/validation/QueueOnSubmittedWorkDoneValidationTests.cpp",
    "unittests/validation/QueueSubmitValidationTests.cpp",
    "unittests/validation/QueueWriteBufferValidationTests.cpp",
    "unittests/validation/QueueWriteTextureValidationTests.cpp",
    "unittests/validation/RenderBundleValidationTests.cpp",
    "unittests/validation/RenderPassDescriptorValidationTests.cpp",
    "unittests/validation/RenderPipelineValidationTests.cpp",
    "unittests/validation/ResourceUsageTrackingTests.cpp",
    "unittests/validation/SamplerValidationTests.cpp",
    "unittests/validation/ShaderModuleValidationTests.cpp",
    "unittests/validation/StorageTextureValidationTests.cpp",
    "unittests/validation/TextureSubresourceTests.cpp",
    "unittests/validation/TextureValidationTests.cpp",
    "unittests/validation/TextureViewValidationTests.cpp",
    "unittests/validation/ToggleValidationTests.cpp",
    "unittests/validation/UnsafeAPIValidationTests.cpp",
    "unittests/validation/ValidationTest.cpp",
    "unittests/validation/ValidationTest.h",
    "unittests/validation/VertexBufferValidationTests.cpp",
    "unittests/validation/VertexStateValidationTests.cpp",
    "unittests/validation/VideoViewsValidationTests.cpp",
    "unittests/validation/WritableBufferBindingAliasingValidationTests.cpp",
    "unittests/validation/WritableTextureBindingAliasingValidationTests.cpp",
    "unittests/validation/WriteBufferTests.cpp",
    "unittests/wire/WireAdapterTests.cpp",
    "unittests/wire/WireArgumentTests.cpp",
    "unittests/wire/WireBasicTests.cpp",
    "unittests/wire/WireBufferMappingTests.cpp",
    "unittests/wire/WireCreatePipelineAsyncTests.cpp",
    "unittests/wire/WireDisconnectTests.cpp",
    "unittests/wire/WireErrorCallbackTests.cpp",
    "unittests/wire/WireExtensionTests.cpp",
    "unittests/wire/WireInjectDeviceTests.cpp",
    "unittests/wire/WireInjectInstanceTests.cpp",
    "unittests/wire/WireInjectSwapChainTests.cpp",
    "unittests/wire/WireInjectTextureTests.cpp",
    "unittests/wire/WireInstanceTests.cpp",
    "unittests/wire/WireMemoryTransferServiceTests.cpp",
    "unittests/wire/WireOptionalTests.cpp",
    "unittests/wire/WireQueueTests.cpp",
    "unittests/wire/WireShaderModuleTests.cpp",
    "unittests/wire/WireTest.cpp",
    "unittests/wire/WireTest.h",
  ]

  if (is_win) {
    sources += [ "unittests/WindowsUtilsTests.cpp" ]
  }

  if (dawn_enable_d3d12) {
    sources += [ "unittests/d3d12/CopySplitTests.cpp" ]
  }

  # When building inside Chromium, use their gtest main function because it is
  # needed to run in swarming correctly.
  if (build_with_chromium) {
    deps += [ ":unittests_main" ]
  } else {
    sources += [ "UnittestsMain.cpp" ]
  }
}

###############################################################################
# Dawn test infrastructure targets
###############################################################################

source_set("test_infra_sources") {
  configs += [ "${dawn_root}/src/dawn/native:internal" ]
  testonly = true

  deps = [
    "${dawn_root}/src/dawn:cpp",
    "${dawn_root}/src/dawn:proc",
    "${dawn_root}/src/dawn/common",
    "${dawn_root}/src/dawn/native:sources",
    "${dawn_root}/src/dawn/native:static",
    "${dawn_root}/src/dawn/utils",
    "${dawn_root}/src/dawn/wire",
  ]

  public_deps = [ ":gmock_and_gtest" ]

  if (dawn_supports_glfw_for_windowing || dawn_enable_opengl) {
    assert(dawn_supports_glfw_for_windowing)
    public_deps += [ "${dawn_root}/src/dawn/glfw" ]
  }

  sources = [
    "AdapterTestConfig.cpp",
    "AdapterTestConfig.h",
    "DawnTest.cpp",
    "DawnTest.h",
    "MockCallback.h",
    "ParamGenerator.h",
    "ToggleParser.cpp",
    "ToggleParser.h",
  ]
}

###############################################################################
# Dawn end2end tests targets
###############################################################################

# Source code for mocks used for platform testing are separated from the rest of
# sources so that they aren't included in non-test builds.
source_set("platform_mocks_sources") {
  configs += [ "${dawn_root}/src/dawn/native:internal" ]
  testonly = true

  deps = [
    ":gmock_and_gtest",
    "${dawn_root}/src/dawn/common",
    "${dawn_root}/src/dawn/platform",
  ]

  sources = [
    "mocks/platform/CachingInterfaceMock.cpp",
    "mocks/platform/CachingInterfaceMock.h",
  ]
}

source_set("end2end_tests_sources") {
  testonly = true

  deps = [
    ":platform_mocks_sources",
    ":test_infra_sources",
    "${dawn_root}/src/dawn:cpp",
    "${dawn_root}/src/dawn:proc",
    "${dawn_root}/src/dawn/common",
    "${dawn_root}/src/dawn/native:headers",
    "${dawn_root}/src/dawn/utils",
    "${dawn_root}/src/dawn/wire",
  ]

  sources = [
    "end2end/AdapterDiscoveryTests.cpp",
    "end2end/BasicTests.cpp",
    "end2end/BindGroupTests.cpp",
    "end2end/BufferTests.cpp",
    "end2end/BufferZeroInitTests.cpp",
    "end2end/ClipSpaceTests.cpp",
    "end2end/ColorStateTests.cpp",
    "end2end/CommandEncoderTests.cpp",
    "end2end/CompressedTextureFormatTests.cpp",
    "end2end/ComputeCopyStorageBufferTests.cpp",
    "end2end/ComputeDispatchTests.cpp",
    "end2end/ComputeFlowControlTests.cpp",
    "end2end/ComputeLayoutMemoryBufferTests.cpp",
    "end2end/ComputeSharedMemoryTests.cpp",
    "end2end/ComputeStorageBufferBarrierTests.cpp",
    "end2end/CopyExternalTextureForBrowserTests.cpp",
    "end2end/CopyTests.cpp",
    "end2end/CopyTextureForBrowserTests.cpp",
    "end2end/CreatePipelineAsyncTests.cpp",
    "end2end/CullingTests.cpp",
    "end2end/DebugMarkerTests.cpp",
    "end2end/DepthBiasTests.cpp",
    "end2end/DepthStencilCopyTests.cpp",
    "end2end/DepthStencilLoadOpTests.cpp",
    "end2end/DepthStencilSamplingTests.cpp",
    "end2end/DepthStencilStateTests.cpp",
    "end2end/DestroyTests.cpp",
    "end2end/DeviceInitializationTests.cpp",
    "end2end/DeviceLifetimeTests.cpp",
    "end2end/DeviceLostTests.cpp",
    "end2end/DrawIndexedIndirectTests.cpp",
    "end2end/DrawIndexedTests.cpp",
    "end2end/DrawIndirectTests.cpp",
    "end2end/DrawTests.cpp",
    "end2end/DynamicBufferOffsetTests.cpp",
    "end2end/EntryPointTests.cpp",
    "end2end/ExperimentalDP4aTests.cpp",
    "end2end/ExternalTextureTests.cpp",
    "end2end/FirstIndexOffsetTests.cpp",
    "end2end/FragDepthTests.cpp",
    "end2end/GpuMemorySynchronizationTests.cpp",
    "end2end/IndexFormatTests.cpp",
    "end2end/MaxLimitTests.cpp",
    "end2end/MemoryAllocationStressTests.cpp",
    "end2end/MultisampledRenderingTests.cpp",
    "end2end/MultisampledSamplingTests.cpp",
    "end2end/NonzeroBufferCreationTests.cpp",
    "end2end/NonzeroTextureCreationTests.cpp",
    "end2end/ObjectCachingTests.cpp",
    "end2end/OpArrayLengthTests.cpp",
    "end2end/PipelineCachingTests.cpp",
    "end2end/PipelineLayoutTests.cpp",
    "end2end/PrimitiveStateTests.cpp",
    "end2end/PrimitiveTopologyTests.cpp",
    "end2end/QueryTests.cpp",
    "end2end/QueueTests.cpp",
    "end2end/QueueTimelineTests.cpp",
    "end2end/ReadOnlyDepthStencilAttachmentTests.cpp",
    "end2end/RenderAttachmentTests.cpp",
    "end2end/RenderBundleTests.cpp",
    "end2end/RenderPassLoadOpTests.cpp",
    "end2end/RenderPassTests.cpp",
    "end2end/RequiredBufferSizeInCopyTests.cpp",
    "end2end/SamplerFilterAnisotropicTests.cpp",
    "end2end/SamplerTests.cpp",
    "end2end/ScissorTests.cpp",
    "end2end/ShaderF16Tests.cpp",
    "end2end/ShaderTests.cpp",
    "end2end/ShaderValidationTests.cpp",
    "end2end/StorageTextureTests.cpp",
    "end2end/SubresourceRenderAttachmentTests.cpp",
    "end2end/Texture3DTests.cpp",
    "end2end/TextureCorruptionTests.cpp",
    "end2end/TextureFormatTests.cpp",
    "end2end/TextureSubresourceTests.cpp",
    "end2end/TextureViewTests.cpp",
    "end2end/TextureZeroInitTests.cpp",
    "end2end/VertexFormatTests.cpp",
    "end2end/VertexOnlyRenderPipelineTests.cpp",
    "end2end/VertexStateTests.cpp",
    "end2end/ViewportOrientationTests.cpp",
    "end2end/ViewportTests.cpp",
  ]

  libs = []

  if (dawn_enable_d3d12) {
    sources += [
      "end2end/D3D12CachingTests.cpp",
      "end2end/D3D12ResourceWrappingTests.cpp",
      "end2end/VideoViewsTests_win.cpp",
    ]
    libs += [
      "d3d11.lib",
      "dxgi.lib",
    ]
  }

  if (dawn_enable_metal) {
    sources += [
      "end2end/IOSurfaceWrappingTests.cpp",
      "end2end/VideoViewsTests_mac.cpp",
    ]
    frameworks = [ "IOSurface.framework" ]
  }

  if (dawn_supports_glfw_for_windowing) {
    sources += [
      "end2end/SwapChainTests.cpp",
      "end2end/SwapChainValidationTests.cpp",
      "end2end/WindowSurfaceTests.cpp",
    ]
  }

  if (dawn_enable_d3d12 || (dawn_enable_vulkan && is_chromeos) ||
      dawn_enable_metal) {
    sources += [
      "end2end/VideoViewsTests.cpp",
      "end2end/VideoViewsTests.h",
    ]
  }

  if (dawn_enable_vulkan && is_chromeos) {
    sources += [ "end2end/VideoViewsTests_gbm.cpp" ]
  }
}

source_set("white_box_tests_sources") {
  configs += [ "${dawn_root}/src/dawn/native:internal" ]
  testonly = true

  deps = [
    ":test_infra_sources",
    "${dawn_root}/src/dawn:cpp",
    "${dawn_root}/src/dawn:proc",
    "${dawn_root}/src/dawn/common",

    # Statically linked and with sources because the end2end white_box tests use Dawn internals.
    "${dawn_root}/src/dawn/native:sources",
    "${dawn_root}/src/dawn/native:static",
    "${dawn_root}/src/dawn/utils",
    "${dawn_root}/src/dawn/wire",
  ]

  sources = []

  if (dawn_enable_vulkan) {
    deps += [ "${dawn_vulkan_headers_dir}:vulkan_headers" ]

    if (is_chromeos) {
      sources += [
        "white_box/VulkanImageWrappingTests.cpp",
        "white_box/VulkanImageWrappingTests.h",
        "white_box/VulkanImageWrappingTests_DmaBuf.cpp",
      ]
    } else if (is_linux) {
      sources += [
        "white_box/VulkanImageWrappingTests.cpp",
        "white_box/VulkanImageWrappingTests.h",
        "white_box/VulkanImageWrappingTests_OpaqueFD.cpp",
      ]
    }

    if (dawn_enable_error_injection) {
      sources += [ "white_box/VulkanErrorInjectorTests.cpp" ]
    }
  }

  sources += [
    "white_box/BufferAllocatedSizeTests.cpp",
    "white_box/InternalResourceUsageTests.cpp",
    "white_box/InternalStorageBufferBindingTests.cpp",
    "white_box/QueryInternalShaderTests.cpp",
  ]

  if (dawn_enable_d3d12) {
    sources += [
      "white_box/D3D12DescriptorHeapTests.cpp",
      "white_box/D3D12ResidencyTests.cpp",
      "white_box/D3D12ResourceHeapTests.cpp",
      "white_box/GPUTimestampCalibrationTests.cpp",
      "white_box/GPUTimestampCalibrationTests.h",
      "white_box/GPUTimestampCalibrationTests_D3D12.cpp",
    ]
  }

  if (dawn_enable_metal) {
    sources += [
      "white_box/GPUTimestampCalibrationTests.cpp",
      "white_box/GPUTimestampCalibrationTests.h",
      "white_box/GPUTimestampCalibrationTests_Metal.mm",
      "white_box/MetalAutoreleasePoolTests.mm",
    ]
  }

  if (dawn_enable_opengles) {
    sources += [ "white_box/EGLImageWrappingTests.cpp" ]
    include_dirs = [ "//third_party/khronos" ]
  }

  libs = []
}

dawn_test("dawn_end2end_tests") {
  deps = [
    ":end2end_tests_sources",
    ":test_infra_sources",
    ":white_box_tests_sources",
  ]

  sources = []
  libs = []

  # When building inside Chromium, use their gtest main function because it is
  # needed to run in swarming correctly.
  if (build_with_chromium) {
    deps += [ ":end2end_tests_main" ]
  } else {
    sources += [ "End2EndTestsMain.cpp" ]
  }

  if (is_chromeos) {
    libs += [ "gbm" ]
  }
}

###############################################################################
# Dawn perf tests
###############################################################################

dawn_test("dawn_perf_tests") {
  deps = [
    ":test_infra_sources",
    "${dawn_root}/src/dawn:cpp",
    "${dawn_root}/src/dawn:proc",
    "${dawn_root}/src/dawn/common",
    "${dawn_root}/src/dawn/platform",
    "${dawn_root}/src/dawn/utils",
    "${dawn_root}/src/dawn/wire",
  ]

  sources = [
    "perf_tests/BufferUploadPerf.cpp",
    "perf_tests/DawnPerfTest.cpp",
    "perf_tests/DawnPerfTest.h",
    "perf_tests/DawnPerfTestPlatform.cpp",
    "perf_tests/DawnPerfTestPlatform.h",
    "perf_tests/DrawCallPerf.cpp",
    "perf_tests/ShaderRobustnessPerf.cpp",
    "perf_tests/SubresourceTrackingPerf.cpp",
  ]

  libs = []

  # When building inside Chromium, use their gtest main function and the
  # other perf test scaffolding in order to run in swarming correctly.
  if (build_with_chromium) {
    deps += [ ":perf_tests_main" ]
    data_deps = [ "//testing:run_perf_test" ]
  } else {
    sources += [ "PerfTestsMain.cpp" ]
  }

  if (dawn_enable_metal) {
    frameworks = [ "IOSurface.framework" ]
  }
}
