# 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/fidl_move.gni")
import("//build/flutter/test.gni")

dart_library("fuchsia_internationalization_flutter") {
  package_name = "fuchsia_internationalization_flutter"
  null_safe = true

  sources = [
    "internationalization.dart",
    "src/current_locale.dart",
    "src/profile_provider.dart",
  ]

  deps = [
    "//sdk/dart/fidl",
    "//sdk/dart/fuchsia_logger",
    "//sdk/fidl/fuchsia.intl",
    "//third_party/dart-pkg/git/flutter/packages/flutter",
    "//third_party/dart-pkg/git/flutter/packages/flutter_localizations",
    "//third_party/dart-pkg/pub/intl",
  ]
}

group("tests") {
  testonly = true
  deps = [ ":fuchsia_internationalization_flutter_unittests($host_toolchain)" ]
}

flutter_test("fuchsia_internationalization_flutter_unittests") {
  sources = [
    "current_locale_test.dart",
    "profile_provider_test.dart",
  ]

  deps = [
    ":fuchsia_internationalization_flutter",
    "//sdk/dart/fidl",
    "//sdk/dart/fuchsia_logger",
    "//sdk/fidl/fuchsia.intl",
    "//third_party/dart-pkg/git/flutter/packages/flutter",
    "//third_party/dart-pkg/git/flutter/packages/flutter_test",
    "//third_party/dart-pkg/pub/mockito",
    "//third_party/dart-pkg/pub/test",
  ]
}
