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

DEPS = [
  'ios',
  'depot_tools/gclient',
  'depot_tools/tryserver',
  'recipe_engine/buildbucket',
  'recipe_engine/json',
  'recipe_engine/platform',
  'recipe_engine/properties',
  'recipe_engine/raw_io',
  'recipe_engine/step',
]

def RunSteps(api):
  with api.tryserver.set_failure_hash():
    api.ios.checkout()
    # Ensure try bots mirror configs from chromium.mac.
    api.ios.read_build_config(master_name='chromium.mac')
    api.ios.build(analyze=True, suffix='with patch')
    api.ios.test_swarming()

def GenTests(api):

  def suppress_analyze():
    """Overrides analyze step data so that all targets get compiled."""
    return api.override_step_data(
        'read filter exclusion spec',
        api.json.output({
            'base': {
                'exclusions': ['f.*'],
            },
            'chromium': {
                'exclusions': [],
            },
            'ios': {
                'exclusions': [],
            },
        })
    )

  def try_build(git_repo=None):
    return api.buildbucket.try_build(
        project='ios',
        builder='linux',
        git_repo=git_repo or 'https://chromium.googlesource.com/chromium/src')

  yield (
    api.test('basic')
    + try_build()
    + api.platform('mac', 64)
    + api.properties(
      buildername='ios-simulator',
      buildnumber='0',
      issue=123456,
      mastername='tryserver.fake',
      patchset=1,
      rietveld='fake://rietveld.url',
      bot_id='fake-vm',
      path_config='kitchen',
    )
    + api.ios.make_test_build_config({
      'xcode version': 'fake xcode version',
      'gn_args': [
        'is_debug=true',
        'target_cpu="x86"',
      ],
      'tests': [
        {
          'app': 'fake tests',
          'device type': 'fake device',
          'os': '8.1',
          'xctest': True,
        },
      ],
    })
    + api.step_data(
        'bootstrap swarming.swarming.py --version',
        stdout=api.raw_io.output_text('1.2.3'),
    )
    + suppress_analyze()
  )

  yield (
    api.test('no_compilation')
    + try_build()
    + api.platform('mac', 64)
    + api.properties(
      buildername='ios-simulator',
      buildnumber='0',
      issue=123456,
      mastername='tryserver.fake',
      patchset=1,
      rietveld='fake://rietveld.url',
      bot_id='fake-vm',
      path_config='kitchen',
    )
    + api.ios.make_test_build_config({
      'xcode version': 'fake xcode version',
      'gn_args': [
        'is_debug=true',
        'target_cpu="x86"',
      ],
      'tests': [
        {
          'app': 'fake tests',
          'device type': 'fake device',
          'os': '8.1',
          'xctest': True,
        },
      ],
    })
    + api.step_data(
        'bootstrap swarming.swarming.py --version',
        stdout=api.raw_io.output_text('1.2.3'),
    )
  )

  yield (
    api.test('no_tests')
    + try_build()
    + api.platform('mac', 64)
    + api.properties(
      buildername='ios-simulator',
      buildnumber='0',
      issue=123456,
      mastername='tryserver.fake',
      patchset=1,
      rietveld='fake://rietveld.url',
      bot_id='fake-vm',
      path_config='kitchen',
    )
    + api.ios.make_test_build_config({
      'xcode version': 'fake xcode version',
      'gn_args': [
        'is_debug=true',
        'target_cpu="x86"',
      ],
      'tests': [
      ],
    })
    + api.step_data(
        'bootstrap swarming.swarming.py --version',
        stdout=api.raw_io.output_text('1.2.3'),
    )
    + suppress_analyze()
  )

  # The same test as above but applying an icu patch.
  yield (
    api.test('icu_patch')
    + try_build(git_repo='https://chromium.googlesource.com/chromium/deps/icu')
    + api.platform('mac', 64)
    + api.properties(
      buildername='ios-simulator',
      buildnumber='0',
      issue=123456,
      mastername='tryserver.fake',
      patchset=1,
      patch_project='icu',
      rietveld='fake://rietveld.url',
      bot_id='fake-vm',
      path_config='kitchen',
    )
    + api.ios.make_test_build_config({
      'xcode version': 'fake xcode version',
      'gn_args': [
        'is_debug=true',
        'target_cpu="x86"',
      ],
      'tests': [
        {
          'app': 'fake tests',
          'device type': 'fake device',
          'os': '8.1',
        },
      ],
    })
    + api.step_data(
        'bootstrap swarming.swarming.py --version',
        stdout=api.raw_io.output_text('1.2.3'),
    )
    + suppress_analyze()
  )

  yield (
    api.test('parent')
    + try_build()
    + api.platform('mac', 64)
    + api.properties(
      buildername='ios',
      buildnumber='0',
      issue=123456,
      mastername='tryserver.fake',
      patchset=1,
      rietveld='fake://rietveld.url',
      bot_id='fake-vm',
      path_config='kitchen',
    )
    + api.ios.make_test_build_config({
      'triggered by': 'parent',
      'tests': [
        {
          'app': 'fake tests',
          'device type': 'fake device',
          'os': '8.1',
        },
      ],
    })
    + api.ios.make_test_build_config_for_parent({
      'xcode version': 'fake xcode version',
      'gn_args': [
        'is_debug=true',
        'target_cpu="x86"',
      ],
    })
    + api.step_data(
        'bootstrap swarming.swarming.py --version',
        stdout=api.raw_io.output_text('1.2.3'),
    )
    + suppress_analyze()
  )

  yield (
    api.test('gn')
    + try_build()
    + api.platform('mac', 64)
    + api.properties(
      buildername='ios-simulator-gn',
      buildnumber='0',
      issue=123456,
      mastername='tryserver.fake',
      patchset=1,
      rietveld='fake://rietveld.url',
      bot_id='fake-vm',
      path_config='kitchen',
    )
    + api.ios.make_test_build_config({
      'xcode version': 'fake xcode version',
      'gn_args': [
        'is_debug=true',
        'ios_enable_code_signing=false',
        'target_cpu="x86"',
        'target_os="ios"',
        'use_goma=true',
      ],
      'use_analyze': True,
      'mb_type': 'gn',
      'tests': [
        {
          'app': 'fake tests',
          'device type': 'fake device',
          'os': '8.1',
        },
      ],
    })
    + api.step_data(
        'bootstrap swarming.swarming.py --version',
        stdout=api.raw_io.output_text('1.2.3'),
    )
    + suppress_analyze()
  )

  yield (
    api.test('goma_compilation_failure')
    + try_build()
    + api.platform('mac', 64)
    + api.properties(
      buildername='ios-simulator-gn',
      buildnumber='0',
      issue=123456,
      mastername='tryserver.fake',
      patchset=1,
      rietveld='fake://rietveld.url',
      bot_id='fake-vm',
      path_config='kitchen',
    )
    + api.ios.make_test_build_config({
      'xcode version': 'fake xcode version',
      'gn_args': [
        'is_debug=true',
        'ios_enable_code_signing=false',
        'target_cpu="x86"',
        'target_os="ios"',
        'use_goma=true',
      ],
      'use_analyze': True,
      'mb_type': 'gn',
      'tests': [
        {
          'app': 'fake tests',
          'device type': 'fake device',
          'os': '8.1',
        },
      ],
    })
    + api.step_data('compile (with patch)', retcode=1)
    + suppress_analyze()
  )

  yield (
    api.test('additional_compile_targets')
    + try_build()
    + api.platform('mac', 64)
    + api.properties(
      buildername='ios-simulator',
      buildnumber='0',
      issue=123456,
      mastername='tryserver.fake',
      patchset=1,
      rietveld='fake://rietveld.url',
      bot_id='fake-vm',
      path_config='kitchen',
    )
    + api.ios.make_test_build_config({
      'xcode version': 'fake xcode version',
      'gn_args': [
        'is_debug=true',
        'target_cpu="x86"',
      ],
      'additional_compile_targets': ['fake_target'],
      'tests': [
      ],
    })
    + api.step_data(
        'bootstrap swarming.swarming.py --version',
        stdout=api.raw_io.output_text('1.2.3'),
    )
    + suppress_analyze()
  )

  yield (
    api.test('patch_failure')
    + try_build()
    + api.platform('mac', 64)
    + api.properties(
      buildername='ios-simulator',
      buildnumber='0',
      issue=123456,
      mastername='tryserver.fake',
      patchset=1,
      rietveld='fake://rietveld.url',
      bot_id='fake-vm',
      path_config='kitchen',
      fail_patch='apply',
    )
    + api.ios.make_test_build_config({
      'xcode version': 'fake xcode version',
      'gn_args': [
        'is_debug=true',
        'target_cpu="x86"',
      ],
      'tests': [
        {
          'app': 'fake tests',
          'device type': 'fake device',
          'os': '8.1',
          'xctest': True,
        },
      ],
    })
    + api.step_data('bot_update', retcode=87)
  )
