# Copyright 2017 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("//chrome/common/features.gni")
import("//chrome/test/base/js2gtest.gni")

js2gtest("interactive_ui_tests_js_webui") {
  test_type = "webui"

  sources = [
    "cr_elements/cr_elements_focus_test.js",
    "md_bookmarks/md_bookmarks_focus_test.js",
    "md_history/md_history_focus_test.js",
    "print_preview/print_preview_interactive_ui_tests.js",
    "settings/cr_settings_interactive_ui_tests.js",
    "settings/settings_ui_browsertest.js",
  ]

  gen_include_files = [
    "polymer_browser_test_base.js",
    "polymer_interactive_ui_test.js",
  ]

  deps = [
    "//chrome/browser/ui",
  ]

  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
}

js2gtest("browser_tests_js_webui") {
  test_type = "webui"

  # Javascript sources. These are combined with the .cc files in the GYP build
  # and are handled by a rule, but in the GN build they're in a separate
  # action so need to be separated out.
  sources = [
    "../../../browser/ui/webui/chromeos/bluetooth_pairing_dialog_browsertest.js",
    "../../../browser/ui/webui/chromeos/certificate_manager_dialog_browsertest.js",
    "../../../browser/ui/webui/chromeos/set_time_ui_browsertest.js",
    "../../../browser/ui/webui/identity_internals_ui_browsertest.js",
    "../../../browser/ui/webui/sync_internals_browsertest.js",
    "../chromeos/oobe_webui_browsertest.js",
    "//third_party/axe-core/axe.js",
    "a11y/accessibility_audit_rules.js",
    "a11y/accessibility_test.js",
    "about_invalidations_browsertest.js",
    "assertions.js",
    "async_gen.js",
    "chrome_send_browsertest.js",
    "cr_components/cr_components_browsertest.js",
    "cr_elements/cr_elements_browsertest.js",
    "load_time_data_browsertest.js",
    "md_bookmarks/md_bookmarks_browsertest.js",
    "md_downloads/downloads_browsertest.js",
    "md_history/md_history_browsertest.js",
    "media_router/media_router_elements_browsertest.js",
    "mock4js_browsertest.js",
    "net_internals/chromeos_view.js",
    "net_internals/dns_view.js",
    "net_internals/domain_security_policy_view.js",
    "net_internals/main.js",
    "net_internals/net_internals_test.js",
    "ntp4.js",
    "polymer_browser_test_base.js",
    "sandboxstatus_browsertest.js",
    "settings/a11y/about_a11y_test.js",
    "settings/a11y/accessibility_a11y_test.js",
    "settings/a11y/basic_a11y_test.js",
    "settings/a11y/edit_dictionary_a11y_test.js",
    "settings/a11y/manage_accessibility_a11y_test.js",
    "settings/a11y/manage_profile_a11y_test.js",
    "settings/a11y/multidevice_a11y_test.js",
    "settings/a11y/multidevice_features_a11y_test.js",
    "settings/a11y/passwords_a11y_test.js",
    "settings/a11y/settings_accessibility_test.js",
    "settings/a11y/sign_out_a11y_test.js",
    "settings/a11y/tts_subpage_a11y_test.js",
    "settings/advanced_page_browsertest.js",
    "settings/animation_browsertest.js",
    "settings/basic_page_browsertest.js",
    "settings/cr_settings_browsertest.js",
    "settings/help_page_browsertest.js",
    "settings/passwords_and_autofill_fake_data.js",
    "settings/passwords_and_forms_browsertest.js",
    "settings/settings_idle_load_browsertest.js",
    "settings/settings_page_browsertest.js",
    "settings/settings_passwords_section_browsertest.js",
    "settings/site_settings_page_browsertest.js",
    "text_defaults_browsertest.js",
    "webui_resource_async_browsertest.js",
  ]

  extra_js_files = [
    "//chrome/browser/resources/md_downloads/constants.js",
    "//chrome/browser/resources/signin/dice_sync_confirmation/sync_confirmation_browser_proxy.js",
  ]

  if (is_chromeos) {
    sources += [
      "certificate_viewer_dialog_test.js",
      "sys_internals/sys_internals_browsertest.js",
    ]
  } else {
    sources += [
      "md_user_manager/user_manager_browsertest.js",
      "signin/signin_browsertest.js",
      "welcome/onboarding_welcome_browsertest.js",
    ]
  }

  if (!is_chrome_branded) {
    # crbug.com/230471
    sources += [ "accessibility_audit_browsertest.js" ]
  }
  if (enable_extensions) {
    sources += [
      "extensions/a11y/extensions_a11y_test.js",
      "extensions/cr_extensions_browsertest.js",
    ]
  }
  if (enable_print_preview) {
    sources += [
      "print_preview/new_print_preview_ui_browsertest.js",
      "print_preview/print_preview_destination_search_test.js",
      "print_preview/print_preview_ui_browsertest.js",
    ]
  }
  deps = [
    "//chrome/browser/ui",
    "//skia",
  ]
  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
}

js2gtest("browser_tests_js_mojo_webui") {
  test_type = "mojo_webui"

  sources = [
    "bluetooth_internals_browsertest.js",
    "engagement/site_engagement_browsertest.js",
    "interventions_internals_browsertest.js",
    "media/media_engagement_browsertest.js",
  ]

  if (is_win || is_mac || is_desktop_linux || is_chromeos) {
    sources += [ "discards/discards_browsertest.js" ]
  }

  if (is_chromeos) {
    sources += [ "multidevice_setup/multidevice_setup_browsertest.js" ]
  }

  deps = [
    "//chrome/browser/ui",
    "//skia",
  ]

  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
}

js2gtest("browser_tests_js_mojo_lite_webui") {
  test_type = "mojo_lite_webui"

  sources = [
    "app_management/app_management_browsertest.js",
  ]

  deps = [
    "//chrome/browser/ui",
  ]

  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
}

js2gtest("unit_tests_js") {
  test_type = "unit"
  sources = [
    "../../../browser/resources/md_downloads/search_service_unittest.gtestjs",
    "../../../browser/resources/print_preview/print_preview_utils_unittest.gtestjs",
    "../../../renderer/resources/extensions/notifications_custom_bindings.gtestjs",
    "../unit/framework_unittest.gtestjs",
  ]
  extra_js_files = [
    "../../../browser/resources/md_downloads/browser_proxy.js",
    "../../../browser/resources/print_preview/data/measurement_system.js",
    "../../../browser/resources/print_preview/print_preview_utils.js",
    "../../../browser/resources/md_downloads/search_service.js",
    "../../../renderer/resources/extensions/notifications_custom_bindings.js",
    "../../../renderer/resources/extensions/notifications_test_util.js",
    "//ui/webui/resources/js/cr.js",
  ]
  if (is_chromeos) {
    sources += [
      "../../../browser/resources/chromeos/braille_ime/braille_ime_unittest.gtestjs",
      "../../../browser/resources/chromeos/select_to_speak/node_utils_unittest.gtestjs",
      "../../../browser/resources/chromeos/select_to_speak/paragraph_utils_unittest.gtestjs",
      "../../../browser/resources/chromeos/select_to_speak/rect_utils_unittest.gtestjs",
      "../../../browser/resources/chromeos/select_to_speak/select_to_speak_unittest.gtestjs",
      "../../../browser/resources/chromeos/select_to_speak/word_utils_unittest.gtestjs",
    ]
    extra_js_files += [
      "../../../browser/resources/chromeos/braille_ime/braille_ime.js",
      "../../../browser/resources/chromeos/select_to_speak/paragraph_utils.js",
      "../../../browser/resources/chromeos/select_to_speak/rect_utils.js",
      "../../../browser/resources/chromeos/select_to_speak/select_to_speak.js",
      "../../../browser/resources/chromeos/select_to_speak/test_support.js",
      "../../../browser/resources/chromeos/select_to_speak/word_utils.js",
      "../../../browser/resources/chromeos/select_to_speak/node_utils.js",
    ]
  }
}
