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

source_set("tests") {
  testonly = true

  sources = [
    "associated_interface_unittest.cc",
    "bind_task_runner_unittest.cc",
    "binding_callback_unittest.cc",
    "binding_set_unittest.cc",
    "binding_unittest.cc",
    "buffer_unittest.cc",
    "connector_unittest.cc",
    "constant_unittest.cc",
    "container_test_util.cc",
    "container_test_util.h",
    "data_view_unittest.cc",
    "equals_unittest.cc",
    "handle_passing_unittest.cc",
    "hash_unittest.cc",
    "interface_ptr_unittest.cc",
    "map_unittest.cc",
    "message_queue.cc",
    "message_queue.h",
    "multiplex_router_unittest.cc",
    "report_bad_message_unittest.cc",
    "request_response_unittest.cc",
    "router_test_util.cc",
    "router_test_util.h",
    "sample_service_unittest.cc",
    "serialization_warning_unittest.cc",
    "struct_unittest.cc",
    "sync_method_unittest.cc",
    "type_conversion_unittest.cc",
    "union_unittest.cc",
    "validation_context_unittest.cc",
    "validation_unittest.cc",
    "variant_test_util.h",
  ]

  deps = [
    ":mojo_public_bindings_test_utils",
    "//base/test:test_support",
    "//mojo/edk/system",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//mojo/public/cpp/test_support:test_utils",
    "//mojo/public/interfaces/bindings/tests:test_associated_interfaces",
    "//mojo/public/interfaces/bindings/tests:test_export_component",
    "//mojo/public/interfaces/bindings/tests:test_export_component2",
    "//mojo/public/interfaces/bindings/tests:test_exported_import",
    "//mojo/public/interfaces/bindings/tests:test_interfaces",
    "//mojo/public/interfaces/bindings/tests:test_struct_traits_interfaces",
    "//testing/gtest",
  ]

  data = [
    "//mojo/public/interfaces/bindings/tests/data/validation/",
  ]

  if (is_ios) {
    assert_no_deps = [ "//third_party/WebKit/*" ]
  } else {
    sources += [
      "pickle_unittest.cc",
      "struct_traits_unittest.cc",
    ]

    deps += [ "//mojo/public/interfaces/bindings/tests:test_interfaces_blink" ]
  }
}

if (!is_ios) {
  source_set("for_blink_tests") {
    testonly = true

    sources = [
      "container_test_util.cc",
      "container_test_util.h",
      "variant_test_util.h",
      "wtf_hash_unittest.cc",
      "wtf_map_unittest.cc",
      "wtf_types_unittest.cc",
    ]

    deps = [
      "//mojo/public/cpp/bindings",
      "//mojo/public/cpp/system",
      "//mojo/public/interfaces/bindings/tests:test_export_blink_component",
      "//mojo/public/interfaces/bindings/tests:test_exported_import_blink",
      "//mojo/public/interfaces/bindings/tests:test_interfaces",
      "//mojo/public/interfaces/bindings/tests:test_interfaces_blink",
      "//mojo/public/interfaces/bindings/tests:test_wtf_types",
      "//mojo/public/interfaces/bindings/tests:test_wtf_types_blink",
      "//testing/gtest",
    ]
  }
}

source_set("struct_with_traits_impl") {
  sources = [
    "struct_with_traits_impl.cc",
    "struct_with_traits_impl.h",
  ]

  deps = [
    "//base",
    "//mojo/public/cpp/system:system",
  ]
}

source_set("perftests") {
  testonly = true

  sources = [
    "bindings_perftest.cc",
  ]

  if (!is_ios) {
    sources += [ "e2e_perftest.cc" ]
  }

  deps = [
    "//base/test:test_support",
    "//mojo/edk/system",
    "//mojo/edk/test:test_support",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//mojo/public/cpp/test_support:test_utils",
    "//mojo/public/interfaces/bindings/tests:test_interfaces",
    "//testing/gtest",
  ]
}

source_set("mojo_public_bindings_test_utils") {
  sources = [
    "validation_test_input_parser.cc",
    "validation_test_input_parser.h",
  ]

  deps = [
    "//mojo/public/c/system",
  ]
}
