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

import("//build/config/features.gni")
import("//build/config/nacl/config.gni")
import("//build/config/nacl/rules.gni")
import("//components/nacl/features.gni")
import("//ppapi/features/features.gni")
import("//testing/test.gni")
if (is_mac) {
  import("//build/config/mac/rules.gni")
}

assert(!is_android || enable_plugins,
       "//ppapi should not be referenced when is_android && !enable_plugins")

# Test files shared between several targets below.
#
# TODO(brettw) it seems like it should be possible to factor this in a source
# set that is shared in such a way that these only need to be referenced once.
test_common_source_files = [
  "lib/gl/gles2/gl2ext_ppapi.c",
  "lib/gl/gles2/gl2ext_ppapi.h",
  "lib/gl/gles2/gles2.c",
  "tests/all_c_includes.h",
  "tests/all_cpp_includes.h",
  "tests/arch_dependent_sizes_32.h",
  "tests/arch_dependent_sizes_64.h",
  "tests/pp_thread.h",
  "tests/test_audio.cc",
  "tests/test_audio.h",
  "tests/test_audio_config.cc",
  "tests/test_audio_config.h",
  "tests/test_audio_encoder.cc",
  "tests/test_audio_encoder.h",
  "tests/test_case.cc",
  "tests/test_case.h",
  "tests/test_compositor.cc",
  "tests/test_compositor.h",
  "tests/test_console.cc",
  "tests/test_console.h",
  "tests/test_core.cc",
  "tests/test_core.h",
  "tests/test_cursor_control.cc",
  "tests/test_cursor_control.h",
  "tests/test_empty.cc",
  "tests/test_empty.h",
  "tests/test_file_io.cc",
  "tests/test_file_io.h",
  "tests/test_file_ref.cc",
  "tests/test_file_ref.h",
  "tests/test_file_system.cc",
  "tests/test_file_system.h",
  "tests/test_fullscreen.cc",
  "tests/test_fullscreen.h",
  "tests/test_graphics_2d.cc",
  "tests/test_graphics_2d.h",
  "tests/test_graphics_3d.cc",
  "tests/test_graphics_3d.h",
  "tests/test_host_resolver.cc",
  "tests/test_host_resolver.h",
  "tests/test_host_resolver_private.cc",
  "tests/test_host_resolver_private.h",
  "tests/test_host_resolver_private_disallowed.cc",
  "tests/test_host_resolver_private_disallowed.h",
  "tests/test_image_data.cc",
  "tests/test_image_data.h",
  "tests/test_ime_input_event.cc",
  "tests/test_ime_input_event.h",
  "tests/test_input_event.cc",
  "tests/test_input_event.h",
  "tests/test_media_stream_audio_track.cc",
  "tests/test_media_stream_audio_track.h",
  "tests/test_media_stream_video_track.cc",
  "tests/test_media_stream_video_track.h",
  "tests/test_memory.cc",
  "tests/test_memory.h",
  "tests/test_message_handler.cc",
  "tests/test_message_handler.h",
  "tests/test_message_loop.cc",
  "tests/test_message_loop.h",
  "tests/test_mouse_cursor.cc",
  "tests/test_mouse_cursor.h",
  "tests/test_mouse_lock.cc",
  "tests/test_mouse_lock.h",
  "tests/test_net_address.cc",
  "tests/test_net_address.h",
  "tests/test_net_address_private_untrusted.cc",
  "tests/test_net_address_private_untrusted.h",
  "tests/test_network_monitor.cc",
  "tests/test_network_monitor.h",
  "tests/test_network_proxy.cc",
  "tests/test_network_proxy.h",
  "tests/test_output_protection_private.cc",
  "tests/test_output_protection_private.h",
  "tests/test_paint_aggregator.cc",
  "tests/test_paint_aggregator.h",
  "tests/test_post_message.cc",
  "tests/test_post_message.h",
  "tests/test_printing.cc",
  "tests/test_printing.h",
  "tests/test_tcp_server_socket_private.cc",
  "tests/test_tcp_server_socket_private.h",
  "tests/test_tcp_socket.cc",
  "tests/test_tcp_socket.h",
  "tests/test_tcp_socket_private.cc",
  "tests/test_tcp_socket_private.h",
  "tests/test_test_internals.cc",
  "tests/test_test_internals.h",
  "tests/test_trace_event.cc",
  "tests/test_trace_event.h",
  "tests/test_truetype_font.cc",
  "tests/test_truetype_font.h",
  "tests/test_udp_socket.cc",
  "tests/test_udp_socket.h",
  "tests/test_udp_socket_private.cc",
  "tests/test_udp_socket_private.h",
  "tests/test_uma.cc",
  "tests/test_uma.h",
  "tests/test_url_loader.cc",
  "tests/test_url_loader.h",
  "tests/test_url_request.cc",
  "tests/test_url_request.h",
  "tests/test_utils.cc",
  "tests/test_var.cc",
  "tests/test_var.h",
  "tests/test_var_resource.cc",
  "tests/test_var_resource.h",
  "tests/test_video_decoder.cc",
  "tests/test_video_decoder.h",
  "tests/test_video_destination.cc",
  "tests/test_video_destination.h",
  "tests/test_video_encoder.cc",
  "tests/test_video_encoder.h",
  "tests/test_video_source.cc",
  "tests/test_video_source.h",
  "tests/test_view.cc",
  "tests/test_view.h",
  "tests/test_websocket.cc",
  "tests/test_websocket.h",
  "tests/testing_instance.cc",
  "tests/testing_instance.h",

  # Compile-time tests
  "tests/test_c_includes.c",
  "tests/test_cpp_includes.cc",
  "tests/test_struct_sizes.c",
]

copy("copy_test_files") {
  visibility = [ ":*" ]
  sources = [
    # Keep "test_case.html.mock-http-headers" with "test_case.html".
    "tests/test_case.html",
    "tests/test_case.html.mock-http-headers",
    "tests/test_page.css",
    "tests/test_page.css.mock-http-headers",
  ]
  outputs = [
    "$root_out_dir/{{source_file_part}}",
  ]
}

copy("copy_test_files2") {
  visibility = [ ":*" ]
  sources = [
    "tests/test_url_loader_data/hello.txt",
  ]
  outputs = [
    "$root_out_dir/test_url_loader_data/{{source_file_part}}",
  ]
}

source_set("ppapi_tests_sources") {
  sources = test_common_source_files
  sources += [
    "tests/test_broker.cc",
    "tests/test_broker.h",
    "tests/test_browser_font.cc",
    "tests/test_browser_font.h",
    "tests/test_buffer.cc",
    "tests/test_buffer.h",
    "tests/test_char_set.cc",
    "tests/test_char_set.h",
    "tests/test_crypto.cc",
    "tests/test_crypto.h",
    "tests/test_file_chooser.cc",
    "tests/test_file_chooser.h",
    "tests/test_flash.cc",
    "tests/test_flash.h",
    "tests/test_flash_clipboard.cc",
    "tests/test_flash_clipboard.h",
    "tests/test_flash_drm.cc",
    "tests/test_flash_drm.h",
    "tests/test_flash_file.cc",
    "tests/test_flash_file.h",
    "tests/test_flash_fullscreen.cc",
    "tests/test_flash_fullscreen.h",
    "tests/test_flash_fullscreen_for_browser_ui.cc",
    "tests/test_flash_fullscreen_for_browser_ui.h",
    "tests/test_flash_message_loop.cc",
    "tests/test_flash_message_loop.h",
    "tests/test_net_address_private.cc",
    "tests/test_net_address_private.h",
    "tests/test_pdf.cc",
    "tests/test_pdf.h",
    "tests/test_platform_verification_private.cc",
    "tests/test_platform_verification_private.h",
    "tests/test_tcp_socket_private_trusted.cc",
    "tests/test_tcp_socket_private_trusted.h",
    "tests/test_url_util.cc",
    "tests/test_url_util.h",
    "tests/test_utils.h",
    "tests/test_video_decoder_dev.cc",
    "tests/test_video_decoder_dev.h",
    "tests/test_x509_certificate_private.cc",
    "tests/test_x509_certificate_private.h",

    # Deprecated test cases.
    "tests/test_instance_deprecated.cc",
    "tests/test_instance_deprecated.h",
    "tests/test_var_deprecated.cc",
    "tests/test_var_deprecated.h",
  ]

  configs += [
    "//build/config:precompiled_headers",
    "//v8:external_startup_data",
  ]

  defines = [ "GL_GLEXT_PROTOTYPES" ]
  include_dirs = [ "lib/gl/include" ]

  deps = [
    ":copy_test_files",
    ":copy_test_files2",
    "//build/config:exe_and_shlib_deps",
    "//ppapi/cpp",
    "//ppapi/shared_impl",
  ]
}

if (is_mac) {
  ppapi_tests_target_type = "mac_plugin_bundle"
} else {
  ppapi_tests_target_type = "shared_library"
}
target(ppapi_tests_target_type, "ppapi_tests") {
  deps = [
    ":ppapi_tests_sources",
  ]
}

source_set("power_saver_test_plugin_sources") {
  sources = [
    "tests/power_saver_test_plugin.cc",
    "tests/test_utils.cc",
  ]

  deps = [
    "//build/config:exe_and_shlib_deps",
    "//ppapi/cpp",
    "//ppapi/shared_impl",
  ]
}

if (!is_mac) {
  shared_library("power_saver_test_plugin") {
    deps = [
      ":power_saver_test_plugin_sources",
    ]
  }
} else {
  mac_plugin_bundle("power_saver_test_plugin") {
    deps = [
      ":power_saver_test_plugin_sources",
    ]
  }
}

source_set("blink_deprecated_test_plugin_sources") {
  sources = [
    "tests/blink_deprecated_test_plugin.cc",
  ]

  deps = [
    "//base",
    "//build/config:exe_and_shlib_deps",
    "//ppapi/cpp",
    "//ppapi/shared_impl",
  ]
}

if (!is_mac) {
  loadable_module("blink_deprecated_test_plugin") {
    deps = [
      ":blink_deprecated_test_plugin_sources",
    ]
  }
} else {
  mac_plugin_bundle("blink_deprecated_test_plugin") {
    deps = [
      ":blink_deprecated_test_plugin_sources",
    ]
  }
}

source_set("blink_test_plugin_sources") {
  sources = [
    "tests/blink_test_plugin.cc",
  ]

  deps = [
    "//base",
    "//build/config:exe_and_shlib_deps",
    "//ppapi/cpp",
    "//ppapi/shared_impl",
  ]
}

if (!is_mac) {
  loadable_module("blink_test_plugin") {
    deps = [
      ":blink_test_plugin_sources",
    ]
  }
} else {
  mac_plugin_bundle("blink_test_plugin") {
    deps = [
      ":blink_test_plugin_sources",
    ]
  }
}

test("ppapi_unittests") {
  sources = [
    "host/resource_message_filter_unittest.cc",
    "proxy/device_enumeration_resource_helper_unittest.cc",
    "proxy/file_chooser_resource_unittest.cc",
    "proxy/file_system_resource_unittest.cc",
    "proxy/flash_resource_unittest.cc",
    "proxy/interface_list_unittest.cc",
    "proxy/mock_resource.cc",
    "proxy/mock_resource.h",
    "proxy/nacl_message_scanner_unittest.cc",
    "proxy/pdf_resource_unittest.cc",
    "proxy/plugin_dispatcher_unittest.cc",
    "proxy/plugin_resource_tracker_unittest.cc",
    "proxy/plugin_var_tracker_unittest.cc",
    "proxy/ppb_var_unittest.cc",
    "proxy/ppp_instance_private_proxy_unittest.cc",
    "proxy/ppp_instance_proxy_unittest.cc",
    "proxy/ppp_messaging_proxy_unittest.cc",
    "proxy/printing_resource_unittest.cc",
    "proxy/raw_var_data_unittest.cc",
    "proxy/serialized_var_unittest.cc",
    "proxy/tracked_callback_unittest.cc",
    "proxy/video_decoder_resource_unittest.cc",
    "proxy/video_encoder_resource_unittest.cc",
    "proxy/websocket_resource_unittest.cc",
    "shared_impl/media_stream_audio_track_shared_unittest.cc",
    "shared_impl/media_stream_buffer_manager_unittest.cc",
    "shared_impl/media_stream_video_track_shared_unittest.cc",
    "shared_impl/proxy_lock_unittest.cc",
    "shared_impl/resource_tracker_unittest.cc",
    "shared_impl/thread_aware_callback_unittest.cc",
    "shared_impl/time_conversion_unittest.cc",
    "shared_impl/var_tracker_unittest.cc",
  ]

  deps = [
    "//base/test:test_support",
    "//gpu/ipc/common:command_buffer_traits",
    "//ipc",
    "//ipc:run_all_unittests",
    "//ipc:test_support",
    "//media:shared_memory_support",
    "//ppapi/host",
    "//ppapi/proxy",
    "//ppapi/proxy:test_support",
    "//ppapi/shared_impl",
    "//ppapi/shared_impl:test_support",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/surface",
  ]
}

test("ppapi_perftests") {
  sources = [
    "proxy/ppapi_perftests.cc",
    "proxy/ppp_messaging_proxy_perftest.cc",
  ]

  deps = [
    "//base/test:test_support",
    "//mojo/edk/system",
    "//ppapi/proxy",
    "//ppapi/proxy:test_support",
    "//ppapi/shared_impl",
    "//ppapi/shared_impl:test_support",
    "//testing/gtest",
  ]
}

executable("pepper_hash_for_uma") {
  sources = [
    "tools/pepper_hash_for_uma.cc",
  ]

  deps = [
    "//base",
    "//build/config:exe_and_shlib_deps",
    "//build/win:default_exe_manifest",
  ]
}

source_set("ppapi_gles2_lib") {
  include_dirs = [ "lib/gl/include" ]
  sources = [
    "lib/gl/gles2/gl2ext_ppapi.c",
    "lib/gl/gles2/gl2ext_ppapi.h",
    "lib/gl/gles2/gles2.c",
  ]
  deps = [
    "//ppapi/cpp",
  ]
}

if (enable_nacl) {
  import("//ppapi/native_client/nacl_test_data.gni")

  if (is_nacl) {
    nacl_test_data("ppapi_nacl_tests") {
      include_dirs = [ "lib/gl/include" ]
      sources = test_common_source_files

      sources += [
        "tests/test_nacl_irt_stack_alignment.cc",
        "tests/test_nacl_irt_stack_alignment.h",
        "tests/test_tcp_server_socket_private_disallowed.cc",
        "tests/test_tcp_server_socket_private_disallowed.h",
        "tests/test_tcp_socket_private_disallowed.cc",
        "tests/test_tcp_socket_private_disallowed.h",
        "tests/test_udp_socket_private_disallowed.cc",
        "tests/test_udp_socket_private_disallowed.h",
      ]

      defines = [
        "GL_GLEXT_PROTOTYPES",
        "PPAPI_TEST_IMPLEMENTATION",
      ]
      deps = [
        "//ppapi/cpp",
      ]
      if (current_cpu == "pnacl") {
        pretranslate_pexe = true
      }
    }
  }

  group("ppapi_nacl_tests_all") {
    data_deps = [
      ":copy_test_files",
      ":ppapi_nacl_tests(//build/toolchain/nacl:clang_newlib_${target_cpu})",
      ":ppapi_nacl_tests(//build/toolchain/nacl:newlib_pnacl)",
    ]

    if (target_cpu != "mipsel") {
      data_deps +=
          [ ":ppapi_nacl_tests(//build/toolchain/nacl:glibc_${target_cpu})" ]
    }

    if (is_linux && enable_nacl_nonsfi) {
      data_deps +=
          [ ":ppapi_nacl_tests(//build/toolchain/nacl:newlib_pnacl_nonsfi)" ]
    }
  }
}
