# 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/components.gni")
import("//build/dart/dart_library.gni")
import("//build/flutter/flutter_component.gni")

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

dart_library("lib") {
  package_name = "build_flutter_test"
  null_safe = true
  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"
  null_safe = true
  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",
  ]
}
