# Copyright 2017 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

static_library("url_pattern_index") {
  sources = [
    "closed_hash_map.h",
    "fuzzy_pattern_matching.cc",
    "fuzzy_pattern_matching.h",
    "ngram_extractor.h",
    "string_splitter.h",
    "uint64_hasher.h",
    "url_pattern.cc",
    "url_pattern.h",
    "url_pattern_index.cc",
    "url_pattern_index.h",
    "url_rule_util.cc",
    "url_rule_util.h",
  ]

  public_deps = [
    "//components/url_pattern_index/flat:url_pattern_index",
    "//components/url_pattern_index/proto:url_pattern_index",
    "//third_party/abseil-cpp:absl",
  ]

  deps = [
    "//base",
    "//third_party/flatbuffers:flatbuffers",
    "//third_party/protobuf:protobuf_lite",
    "//url",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "url_rule_test_support.cc",
    "url_rule_test_support.h",
  ]
  deps = [
    ":url_pattern_index",
    "//base",
    "//net",
    "//third_party/protobuf:protobuf_lite",
    "//url",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "closed_hash_map_unittest.cc",
    "fuzzy_pattern_matching_unittest.cc",
    "ngram_extractor_unittest.cc",
    "string_splitter_unittest.cc",
    "url_pattern_index_unittest.cc",
    "url_pattern_unittest.cc",
    "url_rule_util_unittest.cc",
  ]
  deps = [
    ":test_support",
    ":url_pattern_index",
    "//base",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/protobuf:protobuf_lite",
    "//url",
  ]
}
