# Copyright 2019 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/dart/dart_test_component.gni")
import("//build/flutter/flutter_app.gni")
import("//build/flutter/test.gni")
import("//build/testing/environments.gni")
import("//src/sys/build/fuchsia_test_package.gni")

dart_library("torus15") {
  package_name = "torus15"

  sdk_category = "partner"

  sources = [
    "main.dart",
    "src/logic/torus_logic.dart",
    "src/ui/torus_grid.dart",
    "src/ui/torus_tile.dart",
  ]

  deps = [
    "//sdk/dart/fuchsia_inspect",
    "//sdk/dart/fuchsia_inspect_flutter",
    "//sdk/dart/fuchsia_logger",
    "//sdk/dart/fuchsia_modular",
    "//third_party/dart-pkg/git/flutter/packages/flutter",
    "//third_party/dart-pkg/pub/collection",
  ]
}

flutter_app("torus15_flutter") {
  main_dart = "lib/main.dart"
  package_name = "torus15_flutter"
  fuchsia_package_name = "torus15_flutter"

  sources = [ "main.dart" ]

  deps = [ ":torus15" ]

  meta = [
    {
      path = rebase_path("meta/torus15_flutter.cmx")
      dest = "torus15_flutter.cmx"
    },
  ]
}

# Run these tests using:
#  fx run-host-tests torus15_flutter_test
flutter_test("torus15_flutter_test") {
  source_dir = "flutter_test"
  sources = [ "torus15_flutter_test.dart" ]

  deps = [
    ":torus15",
    "//sdk/dart/fuchsia_inspect",
    "//third_party/dart-pkg/git/flutter/packages/flutter_test",
    "//third_party/dart-pkg/pub/mockito",
  ]
}

dart_test_component("test-component") {
  component_name = "torus15-dart-test"
  manifest = "meta/torus15_dart_test.cmx"
  sources = [ "torus15_dart_test.dart" ]

  deps = [
    ":torus15",
    "//sdk/dart/fuchsia_inspect",
    "//third_party/dart-pkg/pub/mockito",
    "//third_party/dart-pkg/pub/test",
  ]
}

fuchsia_test_package("torus15-dart-test") {
  test_components = [ ":test-component" ]
}
