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

dart_library("dart") {
  package_name = "composition_delegate.dart"

  sdk_category = "partner"
  sources = [
    "composition_delegate.dart",
    "src/layout/layout_context.dart",
    "src/layout/layout_types.dart",
    "src/composition_delegate/composition_delegate.dart",
    "src/surface/surface_relation.dart",
    "src/surface/surface.dart",
    "src/internal/tree/_surface_node.dart",
    "src/internal/tree/_surface_tree.dart",
  ]

  deps = [
    "//third_party/dart-pkg/pub/logging",
    "//third_party/dart-pkg/pub/meta",
    "//third_party/dart-pkg/pub/quiver"
  ]
}

dart_test("composition_delegate_tests") {
  sources = [
    "encode_decode_test.dart",
    "internal/surface_node_test.dart",
    "internal/surface_tree_test.dart",
    "layout_test.dart",
  ]

  deps = [
    ":dart",
    "//third_party/dart-pkg/pub/logging",
    "//third_party/dart-pkg/pub/test",
  ]
}