Changeset View
Changeset View
Standalone View
Standalone View
clang/unittests/AST/CommentLexer.cpp
Show First 20 Lines • Show All 85 Lines • ▼ Show 20 Lines | TEST_F(CommentLexerTest, Basic1) { | ||||
ASSERT_EQ(0U, Toks.size()); | ASSERT_EQ(0U, Toks.size()); | ||||
} | } | ||||
// Empty comments should be handled. | // Empty comments should be handled. | ||||
TEST_F(CommentLexerTest, Basic2) { | TEST_F(CommentLexerTest, Basic2) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"//", "///", "//!", "///<", "//!<" | "//", "///", "//!", "///<", "//!<" | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(1U, Toks.size()); | ASSERT_EQ(1U, Toks.size()); | ||||
ASSERT_EQ(tok::newline, Toks[0].getKind()); | ASSERT_EQ(tok::newline, Toks[0].getKind()); | ||||
} | } | ||||
} | } | ||||
// Empty comments should be handled. | // Empty comments should be handled. | ||||
TEST_F(CommentLexerTest, Basic3) { | TEST_F(CommentLexerTest, Basic3) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"/**/", "/***/", "/*!*/", "/**<*/", "/*!<*/" | "/**/", "/***/", "/*!*/", "/**<*/", "/*!<*/" | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(2U, Toks.size()); | ASSERT_EQ(2U, Toks.size()); | ||||
ASSERT_EQ(tok::newline, Toks[0].getKind()); | ASSERT_EQ(tok::newline, Toks[0].getKind()); | ||||
ASSERT_EQ(tok::newline, Toks[1].getKind()); | ASSERT_EQ(tok::newline, Toks[1].getKind()); | ||||
} | } | ||||
} | } | ||||
// Single comment with plain text. | // Single comment with plain text. | ||||
TEST_F(CommentLexerTest, Basic4) { | TEST_F(CommentLexerTest, Basic4) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"// Meow", "/// Meow", "//! Meow", | "// Meow", "/// Meow", "//! Meow", | ||||
"// Meow\n", "// Meow\r\n", "//! Meow\r", | "// Meow\n", "// Meow\r\n", "//! Meow\r", | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(2U, Toks.size()); | ASSERT_EQ(2U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef(" Meow"), Toks[0].getText()); | ASSERT_EQ(StringRef(" Meow"), Toks[0].getText()); | ||||
ASSERT_EQ(tok::newline, Toks[1].getKind()); | ASSERT_EQ(tok::newline, Toks[1].getKind()); | ||||
} | } | ||||
} | } | ||||
// Single comment with plain text. | // Single comment with plain text. | ||||
TEST_F(CommentLexerTest, Basic5) { | TEST_F(CommentLexerTest, Basic5) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"/* Meow*/", "/** Meow*/", "/*! Meow*/" | "/* Meow*/", "/** Meow*/", "/*! Meow*/" | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(3U, Toks.size()); | ASSERT_EQ(3U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef(" Meow"), Toks[0].getText()); | ASSERT_EQ(StringRef(" Meow"), Toks[0].getText()); | ||||
ASSERT_EQ(tok::newline, Toks[1].getKind()); | ASSERT_EQ(tok::newline, Toks[1].getKind()); | ||||
ASSERT_EQ(tok::newline, Toks[2].getKind()); | ASSERT_EQ(tok::newline, Toks[2].getKind()); | ||||
} | } | ||||
} | } | ||||
// Test newline escaping. | // Test newline escaping. | ||||
TEST_F(CommentLexerTest, Basic6) { | TEST_F(CommentLexerTest, Basic6) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"// Aaa\\\n" " Bbb\\ \n" " Ccc?" "?/\n", | "// Aaa\\\n" " Bbb\\ \n" " Ccc?" "?/\n", | ||||
"// Aaa\\\r\n" " Bbb\\ \r\n" " Ccc?" "?/\r\n", | "// Aaa\\\r\n" " Bbb\\ \r\n" " Ccc?" "?/\r\n", | ||||
"// Aaa\\\r" " Bbb\\ \r" " Ccc?" "?/\r" | "// Aaa\\\r" " Bbb\\ \r" " Ccc?" "?/\r" | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(10U, Toks.size()); | ASSERT_EQ(10U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef(" Aaa"), Toks[0].getText()); | ASSERT_EQ(StringRef(" Aaa"), Toks[0].getText()); | ||||
▲ Show 20 Lines • Show All 62 Lines • ▼ Show 20 Lines | TEST_F(CommentLexerTest, Basic7) { | ||||
ASSERT_EQ(tok::newline, Toks[13].getKind()); | ASSERT_EQ(tok::newline, Toks[13].getKind()); | ||||
ASSERT_EQ(tok::newline, Toks[14].getKind()); | ASSERT_EQ(tok::newline, Toks[14].getKind()); | ||||
} | } | ||||
// A command marker followed by comment end. | // A command marker followed by comment end. | ||||
TEST_F(CommentLexerTest, DoxygenCommand1) { | TEST_F(CommentLexerTest, DoxygenCommand1) { | ||||
const char *Sources[] = { "//@", "///@", "//!@" }; | const char *Sources[] = { "//@", "///@", "//!@" }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(2U, Toks.size()); | ASSERT_EQ(2U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef("@"), Toks[0].getText()); | ASSERT_EQ(StringRef("@"), Toks[0].getText()); | ||||
ASSERT_EQ(tok::newline, Toks[1].getKind()); | ASSERT_EQ(tok::newline, Toks[1].getKind()); | ||||
} | } | ||||
} | } | ||||
// A command marker followed by comment end. | // A command marker followed by comment end. | ||||
TEST_F(CommentLexerTest, DoxygenCommand2) { | TEST_F(CommentLexerTest, DoxygenCommand2) { | ||||
const char *Sources[] = { "/*@*/", "/**@*/", "/*!@*/"}; | const char *Sources[] = { "/*@*/", "/**@*/", "/*!@*/"}; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(3U, Toks.size()); | ASSERT_EQ(3U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef("@"), Toks[0].getText()); | ASSERT_EQ(StringRef("@"), Toks[0].getText()); | ||||
ASSERT_EQ(tok::newline, Toks[1].getKind()); | ASSERT_EQ(tok::newline, Toks[1].getKind()); | ||||
ASSERT_EQ(tok::newline, Toks[2].getKind()); | ASSERT_EQ(tok::newline, Toks[2].getKind()); | ||||
} | } | ||||
} | } | ||||
// A command marker followed by comment end. | // A command marker followed by comment end. | ||||
TEST_F(CommentLexerTest, DoxygenCommand3) { | TEST_F(CommentLexerTest, DoxygenCommand3) { | ||||
const char *Sources[] = { "/*\\*/", "/**\\*/" }; | const char *Sources[] = { "/*\\*/", "/**\\*/" }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(3U, Toks.size()); | ASSERT_EQ(3U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef("\\"), Toks[0].getText()); | ASSERT_EQ(StringRef("\\"), Toks[0].getText()); | ||||
Show All 11 Lines | TEST_F(CommentLexerTest, DoxygenCommand4) { | ||||
}; | }; | ||||
const char *Text[] = { | const char *Text[] = { | ||||
" ", | " ", | ||||
"\\", " ", "@", " ", "&", " ", "$", " ", "#", " ", | "\\", " ", "@", " ", "&", " ", "$", " ", "#", " ", | ||||
"<", " ", ">", " ", "%", " ", "\"", " ", ".", " ", | "<", " ", ">", " ", "%", " ", "\"", " ", ".", " ", | ||||
"::", "" | "::", "" | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(array_lengthof(Text), Toks.size()); | ASSERT_EQ(std::size(Text), Toks.size()); | ||||
for (size_t j = 0, e = Toks.size(); j != e; j++) { | for (size_t j = 0, e = Toks.size(); j != e; j++) { | ||||
if(Toks[j].is(tok::text)) { | if(Toks[j].is(tok::text)) { | ||||
ASSERT_EQ(StringRef(Text[j]), Toks[j].getText()) | ASSERT_EQ(StringRef(Text[j]), Toks[j].getText()) | ||||
<< "index " << i; | << "index " << i; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
▲ Show 20 Lines • Show All 245 Lines • ▼ Show 20 Lines | |||||
// Empty verbatim block. | // Empty verbatim block. | ||||
TEST_F(CommentLexerTest, VerbatimBlock1) { | TEST_F(CommentLexerTest, VerbatimBlock1) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"/// \\verbatim\\endverbatim\n//", | "/// \\verbatim\\endverbatim\n//", | ||||
"/** \\verbatim\\endverbatim*/" | "/** \\verbatim\\endverbatim*/" | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(5U, Toks.size()); | ASSERT_EQ(5U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ||||
▲ Show 20 Lines • Show All 50 Lines • ▼ Show 20 Lines | |||||
// Single-line verbatim block. | // Single-line verbatim block. | ||||
TEST_F(CommentLexerTest, VerbatimBlock4) { | TEST_F(CommentLexerTest, VerbatimBlock4) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"/// Meow \\verbatim aaa \\endverbatim\n//", | "/// Meow \\verbatim aaa \\endverbatim\n//", | ||||
"/** Meow \\verbatim aaa \\endverbatim*/" | "/** Meow \\verbatim aaa \\endverbatim*/" | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(6U, Toks.size()); | ASSERT_EQ(6U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef(" Meow "), Toks[0].getText()); | ASSERT_EQ(StringRef(" Meow "), Toks[0].getText()); | ||||
Show All 14 Lines | |||||
// Single-line verbatim block without an end command. | // Single-line verbatim block without an end command. | ||||
TEST_F(CommentLexerTest, VerbatimBlock5) { | TEST_F(CommentLexerTest, VerbatimBlock5) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"/// Meow \\verbatim aaa \n//", | "/// Meow \\verbatim aaa \n//", | ||||
"/** Meow \\verbatim aaa */" | "/** Meow \\verbatim aaa */" | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(5U, Toks.size()); | ASSERT_EQ(5U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef(" Meow "), Toks[0].getText()); | ASSERT_EQ(StringRef(" Meow "), Toks[0].getText()); | ||||
▲ Show 20 Lines • Show All 208 Lines • ▼ Show 20 Lines | |||||
// Empty verbatim line. | // Empty verbatim line. | ||||
TEST_F(CommentLexerTest, VerbatimLine1) { | TEST_F(CommentLexerTest, VerbatimLine1) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"/// \\fn\n//", | "/// \\fn\n//", | ||||
"/** \\fn*/" | "/** \\fn*/" | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(4U, Toks.size()); | ASSERT_EQ(4U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ||||
ASSERT_EQ(tok::verbatim_line_name, Toks[1].getKind()); | ASSERT_EQ(tok::verbatim_line_name, Toks[1].getKind()); | ||||
ASSERT_EQ(StringRef("fn"), getVerbatimLineName(Toks[1])); | ASSERT_EQ(StringRef("fn"), getVerbatimLineName(Toks[1])); | ||||
ASSERT_EQ(tok::newline, Toks[2].getKind()); | ASSERT_EQ(tok::newline, Toks[2].getKind()); | ||||
ASSERT_EQ(tok::newline, Toks[3].getKind()); | ASSERT_EQ(tok::newline, Toks[3].getKind()); | ||||
} | } | ||||
} | } | ||||
// Verbatim line with Doxygen escape sequences, which should not be expanded. | // Verbatim line with Doxygen escape sequences, which should not be expanded. | ||||
TEST_F(CommentLexerTest, VerbatimLine2) { | TEST_F(CommentLexerTest, VerbatimLine2) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"/// \\fn void *foo(const char *zzz = \"\\$\");\n//", | "/// \\fn void *foo(const char *zzz = \"\\$\");\n//", | ||||
"/** \\fn void *foo(const char *zzz = \"\\$\");*/" | "/** \\fn void *foo(const char *zzz = \"\\$\");*/" | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(5U, Toks.size()); | ASSERT_EQ(5U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ||||
▲ Show 20 Lines • Show All 109 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
TEST_F(CommentLexerTest, HTML4) { | TEST_F(CommentLexerTest, HTML4) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"// <img", | "// <img", | ||||
"// <img " | "// <img " | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(3U, Toks.size()); | ASSERT_EQ(3U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
TEST_F(CommentLexerTest, HTML9) { | TEST_F(CommentLexerTest, HTML9) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"// <img src", | "// <img src", | ||||
"// <img src " | "// <img src " | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(4U, Toks.size()); | ASSERT_EQ(4U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ||||
Show All 9 Lines | |||||
} | } | ||||
TEST_F(CommentLexerTest, HTML10) { | TEST_F(CommentLexerTest, HTML10) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"// <img src=", | "// <img src=", | ||||
"// <img src =" | "// <img src =" | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(5U, Toks.size()); | ASSERT_EQ(5U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ||||
Show All 13 Lines | |||||
TEST_F(CommentLexerTest, HTML11) { | TEST_F(CommentLexerTest, HTML11) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"// <img src=\"", | "// <img src=\"", | ||||
"// <img src = \"", | "// <img src = \"", | ||||
"// <img src=\'", | "// <img src=\'", | ||||
"// <img src = \'" | "// <img src = \'" | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(6U, Toks.size()); | ASSERT_EQ(6U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ||||
▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | |||||
TEST_F(CommentLexerTest, HTML13) { | TEST_F(CommentLexerTest, HTML13) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"// <img src=\"val\\\"\\'val", | "// <img src=\"val\\\"\\'val", | ||||
"// <img src=\"val\\\"\\'val\"", | "// <img src=\"val\\\"\\'val\"", | ||||
"// <img src=\'val\\\"\\'val", | "// <img src=\'val\\\"\\'val", | ||||
"// <img src=\'val\\\"\\'val\'" | "// <img src=\'val\\\"\\'val\'" | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(6U, Toks.size()); | ASSERT_EQ(6U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ||||
Show All 14 Lines | |||||
} | } | ||||
TEST_F(CommentLexerTest, HTML14) { | TEST_F(CommentLexerTest, HTML14) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"// <img src=\"val\\\"\\'val\">", | "// <img src=\"val\\\"\\'val\">", | ||||
"// <img src=\'val\\\"\\'val\'>" | "// <img src=\'val\\\"\\'val\'>" | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(7U, Toks.size()); | ASSERT_EQ(7U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ||||
Show All 16 Lines | |||||
} | } | ||||
TEST_F(CommentLexerTest, HTML15) { | TEST_F(CommentLexerTest, HTML15) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"// <img/>", | "// <img/>", | ||||
"// <img />" | "// <img />" | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(4U, Toks.size()); | ASSERT_EQ(4U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ||||
ASSERT_EQ(tok::html_start_tag, Toks[1].getKind()); | ASSERT_EQ(tok::html_start_tag, Toks[1].getKind()); | ||||
ASSERT_EQ(StringRef("img"), Toks[1].getHTMLTagStartName()); | ASSERT_EQ(StringRef("img"), Toks[1].getHTMLTagStartName()); | ||||
ASSERT_EQ(tok::html_slash_greater, Toks[2].getKind()); | ASSERT_EQ(tok::html_slash_greater, Toks[2].getKind()); | ||||
ASSERT_EQ(tok::newline, Toks[3].getKind()); | ASSERT_EQ(tok::newline, Toks[3].getKind()); | ||||
} | } | ||||
} | } | ||||
TEST_F(CommentLexerTest, HTML16) { | TEST_F(CommentLexerTest, HTML16) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"// <img/ Aaa", | "// <img/ Aaa", | ||||
"// <img / Aaa" | "// <img / Aaa" | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(5U, Toks.size()); | ASSERT_EQ(5U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ||||
▲ Show 20 Lines • Show All 407 Lines • ▼ Show 20 Lines | |||||
TEST_F(CommentLexerTest, HTMLCharacterReferences16) { | TEST_F(CommentLexerTest, HTMLCharacterReferences16) { | ||||
const char *Sources[] = { | const char *Sources[] = { | ||||
"// =", | "// =", | ||||
"// =", | "// =", | ||||
"// =", | "// =", | ||||
"// =" | "// =" | ||||
}; | }; | ||||
for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { | for (size_t i = 0, e = std::size(Sources); i != e; i++) { | ||||
std::vector<Token> Toks; | std::vector<Token> Toks; | ||||
lexString(Sources[i], Toks); | lexString(Sources[i], Toks); | ||||
ASSERT_EQ(3U, Toks.size()); | ASSERT_EQ(3U, Toks.size()); | ||||
ASSERT_EQ(tok::text, Toks[0].getKind()); | ASSERT_EQ(tok::text, Toks[0].getKind()); | ||||
ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ASSERT_EQ(StringRef(" "), Toks[0].getText()); | ||||
▲ Show 20 Lines • Show All 49 Lines • Show Last 20 Lines |