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

static_library("json_schema") {
  sources = [
    "json_schema_constants.cc",
    "json_schema_constants.h",
    "json_schema_validator.cc",
    "json_schema_validator.h",
  ]

  deps = [
    "//base",
    "//third_party/re2",
  ]
}

bundle_data("unit_tests_bundle_data") {
  visibility = [ ":unit_tests" ]
  testonly = true
  sources = [
    "//components/test/data/json_schema/array_tuple_schema.json",
    "//components/test/data/json_schema/choices_schema.json",
    "//components/test/data/json_schema/complex_instance.json",
    "//components/test/data/json_schema/complex_schema.json",
    "//components/test/data/json_schema/enum_schema.json",
    "//components/test/data/json_schema/pattern_properties_dot.json",
    "//components/test/data/json_schema/reference_types.json",
  ]
  outputs = [
    "{{bundle_resources_dir}}/" +
        "{{source_root_relative_dir}}/{{source_file_part}}",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "json_schema_validator_unittest.cc",
    "json_schema_validator_unittest_base.cc",
    "json_schema_validator_unittest_base.h",
  ]
  deps = [
    ":json_schema",
    ":unit_tests_bundle_data",
    "//base",
    "//testing/gtest",
  ]
}
