# 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/android_virtual_device',
    'recipe_engine/path',
    'recipe_engine/raw_io',
]

def RunSteps(api):
  env = {
    'USE_EMULATOR': True
  }
  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_if_requested(
      env=env,
      env_prefixes=env_prefixes,
      version='31',
  )
  api.android_virtual_device.stop_if_requested(
    env=env,
  )


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'
          )
      ),
  )
