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

PYTHON_VERSION_COMPATIBILITY = 'PY2+3'

DEPS = [
    'flutter/android_virtual_device',
    'recipe_engine/path',
    'recipe_engine/raw_io',
]

def RunSteps(api):
  env = {}
  env_prefixes = {}
  avd_root = api.path['cache'].join('builder', 'avd')
  api.android_virtual_device.download(
      avd_root=avd_root,
      env=env,
      env_prefixes=env_prefixes,
      version='31'
  )
  api.android_virtual_device.start(
      env=env,
      env_prefixes=env_prefixes,
  )
  api.android_virtual_device.setup(
      env=env,
      env_prefixes=env_prefixes,
  )
  api.android_virtual_device.kill()


def GenTests(api):
  avd_api_version = '31'
  yield api.test(
    'demo',
    api.step_data(
        'start avd.Start Android emulator (API level %s)' % avd_api_version,
        stdout=api.raw_io.output_text(
            'android_' + avd_api_version + '_google_apis_x86|emulator-5554 started (pid: 17687)'
        )
    ),
  )
  yield api.test(
    'demo zombie processes',
    api.step_data(
        'start avd.Start Android emulator (API level %s)' % avd_api_version,
        stdout=api.raw_io.output_text(
            'android_' + avd_api_version + '_google_apis_x86|emulator-5554 started (pid: 17687)'
        )
    ),
    api.step_data(
          'kill and cleanup avd.list processes',
          stdout=api.raw_io.output_text(
              '12345 qemu-system blah'
          )
      ),
  )
