# Copyright 2020 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 = [
    'flutter/flutter_osx_sdk',
    'recipe_engine/platform',
    'recipe_engine/properties',
    'recipe_engine/step',
    'recipe_engine/python',
]

def RunSteps(api):
  with api.flutter_osx_sdk('mac'):
    api.step('inner step', ['do', 'stuff'])
    api.python.failing_step('Failure', 'whoops')

def GenTests(api):
  yield api.test('basic')
  yield api.test(
    'basic mac',
    api.platform('mac', 64),
  )
  properties_dict = {
    '$depot_tools/osx_sdk': {
      'sdk_version':'deadbeef',
    },
  }
  yield api.test(
    'xcode_version',
    api.platform('mac', 64),
    api.properties(**properties_dict)
  )
  properties_dict = {
    '$depot_tools/osx_sdk': {
      'sdk_version':'deadbeef',
    },
    '$flutter/flutter_osx_sdk': {
      'iphoneos_sdk': '0xDEADBEEF',
      'iphonesimulator_sdk': '0xDEADBEEF',
      'ld': '0xDEADBEEF',
    },
  }
  yield api.test(
    'additional deps',
    api.platform('mac', 64),
    api.properties(**properties_dict)
  )
