[YAML] Refactor escaping unittests

llvm-svn: 321284
This commit is contained in:
Francis Visoiu Mistrih 2017-12-21 17:14:13 +00:00
parent b2b961a3db
commit c9a8451425
2 changed files with 23 additions and 110 deletions

View File

@ -1725,7 +1725,7 @@ template <typename T> struct StdMapStringCustomMappingTraitsImpl {
template <> struct ScalarTraits<Type> { \
static void output(const Type &Value, void *ctx, raw_ostream &Out); \
static StringRef input(StringRef Scalar, void *ctxt, Type &Value); \
static QuotingType mustQuote(StringRef) { return MustQuote; } \
static QuotingType mustQuote(StringRef) { return MustQuote; } \
}; \
} \
}

View File

@ -7,6 +7,7 @@
//
//===----------------------------------------------------------------------===//
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Endian.h"
@ -2450,122 +2451,34 @@ TEST(YAMLIO, TestCustomMappingStruct) {
EXPECT_EQ(4, y["bar"].bar);
}
TEST(YAMLIO, InvalidInput) {
// polluting 1 value in the sequence
Input yin("---\n- foo: 3\n bar: 5\n1\n- foo: 3\n bar: 5\n...\n");
std::vector<FooBar> Data;
yin >> Data;
EXPECT_TRUE((bool)yin.error());
}
TEST(YAMLIO, TestEscapedSingleQuote) {
std::string Id = "@abc@";
static void TestEscaped(llvm::StringRef Input, llvm::StringRef Expected) {
std::string out;
llvm::raw_string_ostream ostr(out);
Output xout(ostr, nullptr, 0);
llvm::yaml::EmptyContext Ctx;
yamlize(xout, Id, true, Ctx);
yamlize(xout, Input, true, Ctx);
ostr.flush();
EXPECT_EQ("'@abc@'", out);
EXPECT_EQ(Expected, out);
}
TEST(YAMLIO, TestEscapedNoQuote) {
std::string Id = "abc/";
std::string out;
llvm::raw_string_ostream ostr(out);
Output xout(ostr, nullptr, 0);
llvm::yaml::EmptyContext Ctx;
yamlize(xout, Id, true, Ctx);
ostr.flush();
EXPECT_EQ("abc/", out);
}
TEST(YAMLIO, TestEscapedDoubleQuoteNonPrintable) {
std::string Id = "\01@abc@";
std::string out;
llvm::raw_string_ostream ostr(out);
Output xout(ostr, nullptr, 0);
llvm::yaml::EmptyContext Ctx;
yamlize(xout, Id, true, Ctx);
ostr.flush();
EXPECT_EQ("\"\\x01@abc@\"", out);
}
TEST(YAMLIO, TestEscapedDoubleQuoteInsideSingleQuote) {
std::string Id = "abc\"fdf";
std::string out;
llvm::raw_string_ostream ostr(out);
Output xout(ostr, nullptr, 0);
llvm::yaml::EmptyContext Ctx;
yamlize(xout, Id, true, Ctx);
ostr.flush();
EXPECT_EQ("'abc\"fdf'", out);
}
TEST(YAMLIO, TestEscapedDoubleQuoteInsideDoubleQuote) {
std::string Id = "\01bc\"fdf";
std::string out;
llvm::raw_string_ostream ostr(out);
Output xout(ostr, nullptr, 0);
llvm::yaml::EmptyContext Ctx;
yamlize(xout, Id, true, Ctx);
ostr.flush();
EXPECT_EQ("\"\\x01bc\\\"fdf\"", out);
}
TEST(YAMLIO, TestEscapedSingleQuoteInsideSingleQuote) {
std::string Id = "abc'fdf";
std::string out;
llvm::raw_string_ostream ostr(out);
Output xout(ostr, nullptr, 0);
llvm::yaml::EmptyContext Ctx;
yamlize(xout, Id, true, Ctx);
ostr.flush();
EXPECT_EQ("'abc''fdf'", out);
}
TEST(YAMLIO, TestEscapedUTF8SingleQuoteInsideDoubleQuote) {
std::string Id = "parameter 'параметр' is unused";
std::string out;
llvm::raw_string_ostream ostr(out);
Output xout(ostr, nullptr, 0);
llvm::yaml::EmptyContext Ctx;
yamlize(xout, Id, true, Ctx);
ostr.flush();
EXPECT_EQ("\"parameter 'параметр' is unused\"", out);
}
TEST(YAMLIO, TestEscapedUTF8) {
std::string Id = "/*параметр*/";
std::string out;
llvm::raw_string_ostream ostr(out);
Output xout(ostr, nullptr, 0);
llvm::yaml::EmptyContext Ctx;
yamlize(xout, Id, true, Ctx);
ostr.flush();
EXPECT_EQ("\"/*параметр*/\"", out);
TEST(YAMLIO, TestEscaped) {
// Single quote
TestEscaped("@abc@", "'@abc@'");
// No quote
TestEscaped("abc/", "abc/");
// Double quote non-printable
TestEscaped("\01@abc@", "\"\\x01@abc@\"");
// Double quote inside single quote
TestEscaped("abc\"fdf", "'abc\"fdf'");
// Double quote inside double quote
TestEscaped("\01bc\"fdf", "\"\\x01bc\\\"fdf\"");
// Single quote inside single quote
TestEscaped("abc'fdf", "'abc''fdf'");
// UTF8
TestEscaped("/*параметр*/", "\"/*параметр*/\"");
// UTF8 with single quote inside double quote
TestEscaped("parameter 'параметр' is unused",
"\"parameter 'параметр' is unused\"");
}