# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/dart/dart_library.gni")
import("//build/flutter/flutter_component.gni")
import("//src/sys/build/components.gni")

group("tests") {
  testonly = true
  deps = [ ":build-flutter-test-package" ]
}

dart_library("lib") {
  package_name = "build_flutter_test"
  sources = [
    "main.dart",
    "test_main.dart",
  ]
  deps = [
    "//third_party/dart-pkg/git/flutter/packages/flutter",
    "//third_party/dart-pkg/git/flutter/packages/flutter_driver",
  ]
}

resource("text-file") {
  sources = [ "text_file.txt" ]
  outputs = [ "data/text_file.txt" ]
}

flutter_component("flutter-component-with-flutter-driver") {
  manifest = "meta/flutter-component-with-flutter-driver.cmx"
  main_dart = "test_main.dart"
  main_package = "build_flutter_test"
  deps = [
    ":lib",
    ":text-file",
  ]
}

flutter_component("flutter-component") {
  manifest = "meta/flutter-component.cmx"
  main_package = "build_flutter_test"
  deps = [
    ":lib",
    ":text-file",
  ]
}

fuchsia_package("build-flutter-test-package") {
  deps = [
    ":flutter-component",
    ":flutter-component-with-flutter-driver",
  ]
}
