# Copyright 2018 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/testing/environments.gni")
import("//topaz/runtime/dart/dart_fuchsia_test.gni")
import("//topaz/runtime/dart/flutter_test.gni")

dart_library("sledge") {
  package_name = "sledge"

  # Several source files have analysis errors
  sources_required = false

  sources = [
    "sledge.dart",
    "src/document/change.dart",
    "src/document/document.dart",
    "src/document/document_id.dart",
    "src/document/leaf_value.dart",
    "src/document/node_value.dart",
    "src/document/value.dart",
    "src/document/value_observer.dart",
    "src/document/values/compressor.dart",
    "src/document/values/converted_change.dart",
    "src/document/values/converter.dart",
    "src/document/values/key_value.dart",
    "src/document/values/key_value_storage.dart",
    "src/document/values/last_one_wins_value.dart",
    "src/document/values/map_value.dart",
    "src/document/values/ordered_list_tree_path.dart",
    "src/document/values/ordered_list_value.dart",
    "src/document/values/pos_neg_counter_value.dart",
    "src/document/values/set_value.dart",
    "src/ledger_helpers.dart",
    "src/modification_queue.dart",
    "src/query/field_value.dart",
    "src/query/index_definition.dart",
    "src/query/query.dart",
    "src/schema/base_type.dart",
    "src/schema/schema.dart",
    "src/schema/types/map_type.dart",
    "src/schema/types/ordered_list_type.dart",
    "src/schema/types/pos_neg_counter_type.dart",
    "src/schema/types/set_type.dart",
    "src/schema/types/trivial_types.dart",
    "src/sledge.dart",
    "src/sledge_connection_id.dart",
    "src/sledge_errors.dart",
    "src/sledge_page_id.dart",
    "src/subscription/subscription.dart",
    "src/transaction.dart",
    "src/uint8list_ops.dart",

    # analyzer errors triggered by including these files
    # "src/version.dart",
    # "src/conflict_resolver/conflict_resolver_factory.dart",
    # "src/conflict_resolver/schemas_obtainer.dart",
    # "src/conflict_resolver/conflict_resolver.dart",
    # "src/conflict_resolver/document_conflict_resolver.dart",
    # "src/storage/kv_encoding.dart",
    # "src/storage/schema_storage.dart",
    # "src/storage/document_storage.dart",
    # "src/query/query_builder.dart",
    # "src/query/query_field_comparison.dart",
  ]

  deps = [
    "//sdk/fidl/fuchsia.ledger",
    "//third_party/dart-pkg/pub/collection",
    "//third_party/dart-pkg/pub/crypto",
    "//topaz/public/lib/app/dart",
    "//sdk/fidl/fuchsia.modular",
  ]
}

flutter_test("dart_sledge_tests") {
  sources = [
    "crdt_test_framework/checker.dart",
    "crdt_test_framework/computational_graph.dart",
    "crdt_test_framework/crdt_test_framework.dart",
    "crdt_test_framework/entry.dart",
    "crdt_test_framework/fleet.dart",
    "crdt_test_framework/fleet_state.dart",
    "crdt_test_framework/node.dart",
    "crdt_test_framework/storage_state.dart",
    "crdt_test_framework_test/checker_test.dart",
    "crdt_test_framework_test/computational_graph_test.dart",
    "crdt_test_framework_test/evaluation_order_test.dart",
    "crdt_test_framework_test/storage_state_test.dart",
    "crdt_test_framework_test/thrown_error_test.dart",
    "document_deletion_test.dart",
    "document_id_test.dart",
    "document_ss_test.dart",
    "document_test.dart",
    "dummies/dummy_value_observer.dart",
    "fakes/fake_ledger_object_factories.dart",
    "fakes/fake_ledger_page.dart",
    "fakes/fake_ledger_page_snapshot.dart",
    "get_documents_test.dart",
    "helpers.dart",
    "ledger_helpers_test.dart",
    "query/index_definition_test.dart",
    "query/query_builder_test.dart",
    "query/query_test.dart",
    "schema_test.dart",
    "schemas_obtainer_test.dart",
    "sledge_page_id_test.dart",
    "sledge_ss_test.dart",
    "transaction_test.dart",
    "uint8list_ops_test.dart",
    "values/compressor_test.dart",
    "values/converter_test.dart",
    "values/key_value_storage_test.dart",
    "values/last_one_wins_values_test.dart",
    "values/list_api_tester.dart",
    "values/map_api_tester.dart",
    "values/map_value_ss_test.dart",
    "values/map_value_test.dart",
    "values/matchers.dart",
    "values/ordered_list_ss_test.dart",
    "values/ordered_list_tree_path_test.dart",
    "values/ordered_list_value_test.dart",
    "values/pos_neg_counter_ss_test.dart",
    "values/pos_neg_counter_test.dart",
    "values/set_api_tester.dart",
    "values/set_value_ss_test.dart",
    "values/set_value_test.dart",
  ]

  source_dir = "test"

  deps = [
    ":sledge",
    "//third_party/dart-pkg/git/flutter/packages/flutter_test",
    "//third_party/dart-pkg/pub/test",
  ]
}

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

  source_dir = "test/integration_tests"

  deps = [
    ":sledge",
    "//third_party/dart-pkg/pub/test",
  ]
  environments = basic_envs
}
