xref: /llvm-project/llvm/unittests/ObjectYAML/YAMLTest.cpp (revision f64903fd81764f1fde7aeb00eea5e1d488458f63)
1ebd9193bSRafael Espindola //===- YAMLTest.cpp - Tests for Object YAML -------------------------------===//
2ebd9193bSRafael Espindola //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6ebd9193bSRafael Espindola //
7ebd9193bSRafael Espindola //===----------------------------------------------------------------------===//
8ebd9193bSRafael Espindola 
9ebd9193bSRafael Espindola #include "llvm/ObjectYAML/YAML.h"
10ebd9193bSRafael Espindola #include "llvm/Support/YAMLTraits.h"
11ebd9193bSRafael Espindola #include "gtest/gtest.h"
12ebd9193bSRafael Espindola 
13ebd9193bSRafael Espindola using namespace llvm;
14ebd9193bSRafael Espindola 
15ebd9193bSRafael Espindola struct BinaryHolder {
16ebd9193bSRafael Espindola   yaml::BinaryRef Binary;
17ebd9193bSRafael Espindola };
18ebd9193bSRafael Espindola 
19ebd9193bSRafael Espindola namespace llvm {
20ebd9193bSRafael Espindola namespace yaml {
21ebd9193bSRafael Espindola template <>
22ebd9193bSRafael Espindola struct MappingTraits<BinaryHolder> {
mappingllvm::yaml::MappingTraits23ebd9193bSRafael Espindola   static void mapping(IO &IO, BinaryHolder &BH) {
24ebd9193bSRafael Espindola     IO.mapRequired("Binary", BH.Binary);
25ebd9193bSRafael Espindola   }
26ebd9193bSRafael Espindola };
27ebd9193bSRafael Espindola } // end namespace yaml
28ebd9193bSRafael Espindola } // end namespace llvm
29ebd9193bSRafael Espindola 
TEST(ObjectYAML,BinaryRef)30ebd9193bSRafael Espindola TEST(ObjectYAML, BinaryRef) {
31ebd9193bSRafael Espindola   BinaryHolder BH;
32ebd9193bSRafael Espindola   SmallVector<char, 32> Buf;
33ebd9193bSRafael Espindola   llvm::raw_svector_ostream OS(Buf);
34ebd9193bSRafael Espindola   yaml::Output YOut(OS);
35ebd9193bSRafael Espindola   YOut << BH;
36ebd9193bSRafael Espindola   EXPECT_NE(OS.str().find("''"), StringRef::npos);
37ebd9193bSRafael Espindola }
38*f64903fdSJoachim Meyer 
TEST(ObjectYAML,UnknownOption)39*f64903fdSJoachim Meyer TEST(ObjectYAML, UnknownOption) {
40*f64903fdSJoachim Meyer   StringRef InputYAML = "InvalidKey: InvalidValue\n"
41*f64903fdSJoachim Meyer                         "Binary: AAAA\n";
42*f64903fdSJoachim Meyer   BinaryHolder BH;
43*f64903fdSJoachim Meyer   yaml::Input Input(InputYAML);
44*f64903fdSJoachim Meyer   // test 1: default in trying to parse invalid key is an error case.
45*f64903fdSJoachim Meyer   Input >> BH;
46*f64903fdSJoachim Meyer   EXPECT_EQ(Input.error().value(), 22);
47*f64903fdSJoachim Meyer 
48*f64903fdSJoachim Meyer   // test 2: only warn about invalid key if actively set.
49*f64903fdSJoachim Meyer   yaml::Input Input2(InputYAML);
50*f64903fdSJoachim Meyer   BinaryHolder BH2;
51*f64903fdSJoachim Meyer   Input2.setAllowUnknownKeys(true);
52*f64903fdSJoachim Meyer   Input2 >> BH2;
53*f64903fdSJoachim Meyer   EXPECT_EQ(BH2.Binary, yaml::BinaryRef("AAAA"));
54*f64903fdSJoachim Meyer   EXPECT_EQ(Input2.error().value(), 0);
55*f64903fdSJoachim Meyer }
56