# Copyright 2017 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("//testing/libfuzzer/fuzzer_test.gni")

component("cbor") {
  sources = [
    "constants.h",
    "diagnostic_writer.cc",
    "diagnostic_writer.h",
    "reader.cc",
    "reader.h",
    "values.cc",
    "values.h",
    "writer.cc",
    "writer.h",
  ]

  defines = [ "CBOR_IMPLEMENTATION" ]

  deps = [ "//base" ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "diagnostic_writer_unittest.cc",
    "reader_unittest.cc",
    "values_unittest.cc",
    "writer_unittest.cc",
  ]

  deps = [
    ":cbor",
    "//base",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

fuzzer_test("reader_fuzzer") {
  sources = [ "reader_fuzzer.cc" ]
  deps = [
    ":cbor",
    "//base",
  ]
  seed_corpus = "reader_fuzzer_corpus/"
  libfuzzer_options = [ "max_len=65535" ]
}
