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