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

"""Flutter Engine tester recipe.

This recipe is used to run tests using prebuilt artifacts.
"""

from contextlib import contextmanager

from google.protobuf import struct_pb2
from PB.recipes.flutter.engine.engine import InputProperties
from PB.recipes.flutter.engine.engine import EnvProperties
from PB.go.chromium.org.luci.buildbucket.proto import build as build_pb2

PYTHON_VERSION_COMPATIBILITY = 'PY3'

DEPS = [
    'recipe_engine/properties',
]

PROPERTIES = InputProperties
ENV_PROPERTIES = EnvProperties


def test(api, test_config):
  """Runs an independent test task."""
  pass

def RunSteps(api, properties, env_properties):
  # Test configuration is passed as build property. This is to standardize
  # the use of BuildBucket and Led APIs in the orchestrator recipe which
  # triggers the subbuilds.
  test_config = api.properties.get('build')
  test(api, test_config)


def GenTests(api):
  yield api.test('basic_custom_vars')
