# Copyright 2020 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.

import("//build/compiled_action.gni")
import("//testing/libfuzzer/fuzzer_test.gni")

source_set("unit_tests") {
  testonly = true
  sources = [
    "extractor_unittest.cc",
    "generate_schema_org_code_unittest.cc",
    "validator_unittest.cc",
  ]

  deps = [
    ":extractor",
    ":generate_schema_org_code",
    ":schema_org",
    ":schema_org_properties",
    "//base",
    "//base/test:test_support",
    "//components/schema_org/common:improved_mojom",
    "//services/data_decoder/public/cpp:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

executable("schema_org_name_generator") {
  sources = [ "schema_org_name_generator.cc" ]
  deps = [
    "//base",
    "//url",
  ]
}

compiled_action("schema_org_name_data") {
  tool = ":schema_org_name_generator"

  args = [
    rebase_path("//third_party/schema_org/schema.jsonld", root_build_dir),
    rebase_path("//third_party/schema_org/overrides.jsonld", root_build_dir),
    rebase_path("$target_gen_dir/schema_org_name_data.json", root_build_dir),
  ]

  inputs = [
    "//third_party/schema_org/schema.jsonld",
    "//third_party/schema_org/overrides.jsonld",
  ]

  outputs = [ "$target_gen_dir/schema_org_name_data.json" ]
}

action("generate_schema_org_code") {
  script = "//components/schema_org/generate_schema_org_code.py"

  sources = [
    "templates/schema_org_entity_names.cc.tmpl",
    "templates/schema_org_entity_names.h.tmpl",
    "templates/schema_org_enums.cc.tmpl",
    "templates/schema_org_enums.h.tmpl",
    "templates/schema_org_property_configurations.cc.tmpl",
    "templates/schema_org_property_configurations.h.tmpl",
    "templates/schema_org_property_names.cc.tmpl",
    "templates/schema_org_property_names.h.tmpl",
  ]

  args =
      [
        "--schema-file",
        rebase_path("//third_party/schema_org/schema.jsonld", root_build_dir),
        "--overrides-file",
        rebase_path("//third_party/schema_org/overrides.jsonld",
                    root_build_dir),
        "--name-file",
        rebase_path("$target_gen_dir/schema_org_name_data.json",
                    root_build_dir),
        "--output-dir",
        rebase_path("$target_gen_dir", root_build_dir),
        "--templates",
      ] + sources

  inputs = [
    "//third_party/schema_org/schema.jsonld",
    "//third_party/schema_org/overrides.jsonld",
  ]

  outputs = [
    "$target_gen_dir/schema_org_entity_names.h",
    "$target_gen_dir/schema_org_entity_names.cc",
    "$target_gen_dir/schema_org_property_configurations.h",
    "$target_gen_dir/schema_org_property_configurations.cc",
    "$target_gen_dir/schema_org_property_names.h",
    "$target_gen_dir/schema_org_property_names.cc",
    "$target_gen_dir/schema_org_enums.h",
    "$target_gen_dir/schema_org_enums.cc",
  ]

  deps = [ ":schema_org_name_data" ]
}

static_library("schema_org_properties") {
  sources = [
    "$target_gen_dir/schema_org_entity_names.cc",
    "$target_gen_dir/schema_org_entity_names.h",
    "$target_gen_dir/schema_org_enums.cc",
    "$target_gen_dir/schema_org_enums.h",
    "$target_gen_dir/schema_org_property_configurations.cc",
    "$target_gen_dir/schema_org_property_configurations.h",
    "$target_gen_dir/schema_org_property_names.cc",
    "$target_gen_dir/schema_org_property_names.h",
  ]

  deps = [
    ":generate_schema_org_code",
    "//base",
  ]
}

static_library("extractor") {
  sources = [
    "extractor.cc",
    "extractor.h",
  ]

  deps = [
    "//base",
    "//components/schema_org:generate_schema_org_code",
    "//components/schema_org:schema_org",
    "//components/schema_org:schema_org_properties",
    "//components/schema_org/common",
    "//components/schema_org/common:improved_mojom",
    "//services/data_decoder/public/cpp",
  ]
}

static_library("schema_org") {
  sources = [
    "validator.cc",
    "validator.h",
  ]

  deps = [
    "//base",
    "//components/schema_org:generate_schema_org_code",
    "//components/schema_org:schema_org_properties",
    "//components/schema_org/common:improved_mojom",
  ]
}

fuzzer_test("extractor_fuzzer") {
  sources = [ "extractor_fuzzer.cc" ]
  deps = [
    ":extractor",
    ":schema_org_properties",
    "//base",
    "//base/test:test_support",
    "//components/schema_org/common:improved_mojom",
    "//services/data_decoder/public/cpp:test_support",
  ]
}
