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

from recipe_engine import post_process


DEPS = [
    'chromium',
    'recipe_engine/platform',
    'recipe_engine/properties',
]


def RunSteps(api):
  api.chromium.set_config(
      api.properties.get('chromium_config', 'chromium'),
      TARGET_PLATFORM=api.properties.get('target_platform', 'linux'),
      TARGET_BITS=api.properties.get('target_bits', 64))

  for config in api.properties.get('chromium_apply_config', []):
    api.chromium.apply_config(config)


def GenTests(api):
  yield (
      api.test('gn') +
      api.properties(chromium_apply_config=['gn']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('gn_for_uploads') +
      api.properties(chromium_apply_config=['gn_for_uploads']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('ios') +
      api.platform('mac', 64) +
      api.properties(target_platform='ios') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('goma_canary') +
      api.properties(chromium_apply_config=['goma_canary']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('gcc') +
      api.properties(chromium_config='gcc') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('no_dump_symbols') +
      api.properties(chromium_apply_config=['no_dump_symbols']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('isolation_mode_noop') +
      api.properties(chromium_apply_config=['isolation_mode_noop']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromeos_with_codecs') +
      api.properties(chromium_apply_config=['chromeos_with_codecs']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromeos') +
      api.properties(chromium_apply_config=['chromeos']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('ozone') +
      api.properties(chromium_apply_config=['ozone']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('analysis') +
      api.properties(chromium_apply_config=['analysis']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('asan_symbolized') +
      api.properties(chromium_apply_config=['asan_symbolized']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('msan_no_origin_tracking') +
      api.properties(chromium_apply_config=['msan_no_origin_tracking']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('msan_full_origin_tracking') +
      api.properties(chromium_apply_config=['msan_full_origin_tracking']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('prebuilt_instrumented_libraries') +
      api.properties(
          chromium_apply_config=['prebuilt_instrumented_libraries']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromium_syzyasan') +
      api.properties(chromium_config='chromium_syzyasan') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('trybot_flavor') +
      api.properties(chromium_apply_config=['trybot_flavor']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromium_win_clang_official') +
      api.platform('win', 64) +
      api.properties(
          chromium_config='chromium_win_clang_official',
          target_platform='win') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromium_win_clang_official_tot') +
      api.properties(chromium_config='chromium_win_clang_official_tot') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromium_win_clang_asan') +
      api.properties(chromium_config='chromium_win_clang_asan') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromium_win_clang_asan_tot_coverage') +
      api.properties(chromium_config='chromium_win_clang_asan_tot_coverage') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('clang_tot_linux') +
      api.properties(chromium_config='clang_tot_linux') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('clang_tot_mac') +
      api.properties(chromium_config='clang_tot_mac') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('clang_tot_linux_asan') +
      api.properties(chromium_config='clang_tot_linux_asan') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('clang_tot_linux_lld') +
      api.properties(chromium_config='clang_tot_linux_lld') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromium_linux_ubsan') +
      api.properties(chromium_config='chromium_linux_ubsan') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromium_linux_ubsan_vptr') +
      api.properties(chromium_config='chromium_linux_ubsan_vptr') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('clang_tot_linux_ubsan_vptr') +
      api.properties(chromium_config='clang_tot_linux_ubsan_vptr') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('clang_tot_mac_asan') +
      api.platform('mac', 64) +
      api.properties(
          chromium_config='clang_tot_mac_asan',
          target_platform='mac') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('clang_tot_android_asan') +
      api.properties(chromium_config='clang_tot_android_asan') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('clang_tot_android_dbg') +
      api.properties(chromium_config='clang_tot_android_dbg') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromium_linux_asan') +
      api.properties(chromium_config='chromium_linux_asan') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromium_mac_asan') +
      api.properties(chromium_config='chromium_mac_asan') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromium_mac_mac_views') +
      api.properties(chromium_config='chromium_mac_mac_views') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromium_tsan2') +
      api.properties(chromium_config='chromium_tsan2') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromium_chromiumos_asan') +
      api.properties(chromium_config='chromium_chromiumos_asan') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromium_official_linux') +
      api.properties(
          chromium_config='chromium_official',
          target_platform='linux') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromium_official_win') +
      api.platform('win', 64) +
      api.properties(
          chromium_config='chromium_official',
          target_platform='win') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('blink_logging_on') +
      api.properties(chromium_apply_config=['blink_logging_on']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('android_clang') +
      api.properties(chromium_config='android_clang') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('android_asan') +
      api.properties(chromium_config='android_asan') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromium_pgo_instrument') +
      api.properties(chromium_config='chromium_pgo_instrument') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('chromium_pgo_optimize') +
      api.properties(chromium_config='chromium_pgo_optimize') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('v8_optimize_medium') +
      api.properties(chromium_apply_config=['v8_optimize_medium']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('v8_verify_heap') +
      api.properties(chromium_apply_config=['v8_verify_heap']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('v8_hybrid_arm') +
      api.properties(chromium_apply_config=['v8_hybrid_arm']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('enable_ipc_fuzzer') +
      api.properties(chromium_apply_config=['enable_ipc_fuzzer']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('cast_linux') +
      api.properties(chromium_config='cast_linux') +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('internal_gles2_conform_tests') +
      api.properties(chromium_apply_config=['internal_gles2_conform_tests']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('build_angle_deqp_tests') +
      api.properties(chromium_apply_config=['build_angle_deqp_tests']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('download_vr_test_apks') +
      api.properties(chromium_apply_config=['download_vr_test_apks']) +
      api.post_process(post_process.DropExpectation)
  )

  yield (
      api.test('fetch_telemetry_dependencies') +
      api.properties(chromium_apply_config=['fetch_telemetry_dependencies']) +
      api.post_process(post_process.DropExpectation)
  )
