12d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko//===- unittests/AST/CommentLexer.cpp ------ Comment lexer tests ----------===// 22d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// 32d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// The LLVM Compiler Infrastructure 42d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// 52d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// This file is distributed under the University of Illinois Open Source 62d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// License. See LICENSE.TXT for details. 72d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// 82d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko//===----------------------------------------------------------------------===// 92d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 101050e8b2252d89a0004a6fd25a58dab88b5ee625Chandler Carruth#include "clang/AST/CommentLexer.h" 111050e8b2252d89a0004a6fd25a58dab88b5ee625Chandler Carruth#include "clang/AST/CommentCommandTraits.h" 126ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko#include "clang/Basic/CommentOptions.h" 132d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko#include "clang/Basic/Diagnostic.h" 143aeb34f5639ca03ba952bef7239028eaaec33281Douglas Gregor#include "clang/Basic/DiagnosticOptions.h" 151050e8b2252d89a0004a6fd25a58dab88b5ee625Chandler Carruth#include "clang/Basic/FileManager.h" 167cc315ccf80382fab7674735fbfda95990d28f8eChandler Carruth#include "clang/Basic/SourceManager.h" 172d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko#include "llvm/ADT/STLExtras.h" 182d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko#include "gtest/gtest.h" 191050e8b2252d89a0004a6fd25a58dab88b5ee625Chandler Carruth#include <vector> 202d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 212d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenkousing namespace llvm; 222d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenkousing namespace clang; 232d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 242d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenkonamespace clang { 252d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenkonamespace comments { 262d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 272d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenkonamespace { 282d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenkoclass CommentLexerTest : public ::testing::Test { 292d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenkoprotected: 302d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko CommentLexerTest() 312d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko : FileMgr(FileMgrOpts), 322d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko DiagID(new DiagnosticIDs()), 338e023611637905629b928915cbda22a90b2432c3Douglas Gregor Diags(DiagID, new DiagnosticOptions, new IgnoringDiagConsumer()), 34e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko SourceMgr(Diags, FileMgr), 356ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko Traits(Allocator, CommentOptions()) { 362d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 372d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 382d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko FileSystemOptions FileMgrOpts; 392d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko FileManager FileMgr; 402d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko IntrusiveRefCntPtr<DiagnosticIDs> DiagID; 412d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko DiagnosticsEngine Diags; 422d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko SourceManager SourceMgr; 43477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko llvm::BumpPtrAllocator Allocator; 44e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko CommandTraits Traits; 452d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 462d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko void lexString(const char *Source, std::vector<Token> &Toks); 47e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 48e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko StringRef getCommandName(const Token &Tok) { 49e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko return Traits.getCommandInfo(Tok.getCommandID())->Name; 50e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko } 51e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 52e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko StringRef getVerbatimBlockName(const Token &Tok) { 53e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko return Traits.getCommandInfo(Tok.getVerbatimBlockID())->Name; 54e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko } 55e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 56e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko StringRef getVerbatimLineName(const Token &Tok) { 57e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko return Traits.getCommandInfo(Tok.getVerbatimLineID())->Name; 58e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko } 592d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko}; 602d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 612d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenkovoid CommentLexerTest::lexString(const char *Source, 622d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> &Toks) { 632d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko MemoryBuffer *Buf = MemoryBuffer::getMemBuffer(Source); 646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines FileID File = SourceMgr.createFileID(Buf); 652d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko SourceLocation Begin = SourceMgr.getLocForStartOfFile(File); 662d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 67ad6fd9f93ce0d328397e8d57ef7117ced24fc8e2Fariborz Jahanian Lexer L(Allocator, Diags, Traits, Begin, Source, Source + strlen(Source)); 682d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 692d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko while (1) { 702d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko Token Tok; 712d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko L.lex(Tok); 722d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko if (Tok.is(tok::eof)) 732d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko break; 742d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko Toks.push_back(Tok); 752d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 762d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 772d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 782d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} // unnamed namespace 792d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 802d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// Empty source range should be handled. 812d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, Basic1) { 822d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Source = ""; 832d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 842d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 852d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Source, Toks); 862d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 872d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(0U, Toks.size()); 882d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 892d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 902d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// Empty comments should be handled. 912d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, Basic2) { 922d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { 932d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "//", "///", "//!", "///<", "//!<" 942d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko }; 952d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 962d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 972d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 982d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 992d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1002d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(1U, Toks.size()); 1012d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1022d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[0].getKind()); 1032d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 1042d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 1052d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1062d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// Empty comments should be handled. 1072d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, Basic3) { 1082d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { 1092d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/**/", "/***/", "/*!*/", "/**<*/", "/*!<*/" 1102d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko }; 1112d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 1122d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 1132d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1142d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 1152d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1162d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(2U, Toks.size()); 1172d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1182d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[0].getKind()); 1192d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[1].getKind()); 1202d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 1212d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 1222d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1232d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// Single comment with plain text. 1242d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, Basic4) { 1252d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { 1262d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "// Meow", "/// Meow", "//! Meow", 1272d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "// Meow\n", "// Meow\r\n", "//! Meow\r", 1282d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko }; 1292d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1302d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 1312d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 1322d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1332d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 1342d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1352d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(2U, Toks.size()); 1362d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1372d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1382d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Meow"), Toks[0].getText()); 1392d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1402d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[1].getKind()); 1412d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 1422d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 1432d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1442d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// Single comment with plain text. 1452d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, Basic5) { 1462d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { 1472d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/* Meow*/", "/** Meow*/", "/*! Meow*/" 1482d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko }; 1492d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1502d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 1512d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 1522d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1532d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 1542d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1552d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(3U, Toks.size()); 1562d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1572d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1582d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Meow"), Toks[0].getText()); 1592d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1602d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[1].getKind()); 1612d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 1622d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 1632d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 1642d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1652d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// Test newline escaping. 1662d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, Basic6) { 1672d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { 1682d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "// Aaa\\\n" " Bbb\\ \n" " Ccc?" "?/\n", 1692d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "// Aaa\\\r\n" " Bbb\\ \r\n" " Ccc?" "?/\r\n", 1702d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "// Aaa\\\r" " Bbb\\ \r" " Ccc?" "?/\r" 1712d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko }; 1722d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1732d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 1742d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 1752d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1762d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 1772d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1782d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(10U, Toks.size()); 1792d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1802d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1812d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Aaa"), Toks[0].getText()); 1822d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1832d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef("\\"), Toks[1].getText()); 1842d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 1852d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1862d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[3].getKind()); 1872d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Bbb"), Toks[3].getText()); 1882d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[4].getKind()); 1892d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef("\\"), Toks[4].getText()); 1902d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[5].getKind()); 1912d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[5].getText()); 1922d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[6].getKind()); 1932d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1942d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[7].getKind()); 1952d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Ccc?" "?/"), Toks[7].getText()); 1962d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[8].getKind()); 1972d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1982d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[9].getKind()); 1992d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 2002d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 2012d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2022d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// Check that we skip C-style aligned stars correctly. 2032d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, Basic7) { 2042d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Source = 2052d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/* Aaa\n" 2062d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko " * Bbb\r\n" 2072d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "\t* Ccc\n" 2082d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko " ! Ddd\n" 2092d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko " * Eee\n" 2102d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko " ** Fff\n" 2112d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko " */"; 2122d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 2132d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2142d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Source, Toks); 2152d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2162d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(15U, Toks.size()); 2172d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2182d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 2192d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Aaa"), Toks[0].getText()); 2202d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[1].getKind()); 2212d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2222d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 2232d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Bbb"), Toks[2].getText()); 2242d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 2252d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2262d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[4].getKind()); 2272d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Ccc"), Toks[4].getText()); 2282d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[5].getKind()); 2292d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2302d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[6].getKind()); 2312d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" ! Ddd"), Toks[6].getText()); 2322d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[7].getKind()); 2332d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2342d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[8].getKind()); 2352d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Eee"), Toks[8].getText()); 2362d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[9].getKind()); 2372d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2382d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[10].getKind()); 2392d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef("* Fff"), Toks[10].getText()); 2402d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[11].getKind()); 2412d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2422d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[12].getKind()); 2432d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[12].getText()); 2442d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2452d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[13].getKind()); 2462d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[14].getKind()); 2472d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 2482d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2492d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// A command marker followed by comment end. 2502d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, DoxygenCommand1) { 2512d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { "//@", "///@", "//!@" }; 2522d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 2532d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 2542d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2552d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 2562d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2572d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(2U, Toks.size()); 2582d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2592d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 2602d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef("@"), Toks[0].getText()); 2612d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2622d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[1].getKind()); 2632d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 2642d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 2652d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2662d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// A command marker followed by comment end. 2672d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, DoxygenCommand2) { 2682d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { "/*@*/", "/**@*/", "/*!@*/"}; 2692d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 2702d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 2712d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2722d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 2732d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2742d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(3U, Toks.size()); 2752d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2762d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 2772d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef("@"), Toks[0].getText()); 2782d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2792d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[1].getKind()); 2802d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 2812d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 2822d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 2832d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2842d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// A command marker followed by comment end. 2852d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, DoxygenCommand3) { 2862d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { "/*\\*/", "/**\\*/" }; 2872d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 2882d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 2892d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2902d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 2912d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2922d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(3U, Toks.size()); 2932d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2942d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 2952d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef("\\"), Toks[0].getText()); 2962d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 2972d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[1].getKind()); 2982d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 2992d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 3002d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 3012d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 3022d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// Doxygen escape sequences. 3032d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, DoxygenCommand4) { 304808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko const char *Sources[] = { 305808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko "/// \\\\ \\@ \\& \\$ \\# \\< \\> \\% \\\" \\. \\::", 306808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko "/// @\\ @@ @& @$ @# @< @> @% @\" @. @::" 307808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko }; 3082d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Text[] = { 3092d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko " ", 3102d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "\\", " ", "@", " ", "&", " ", "$", " ", "#", " ", 3112d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "<", " ", ">", " ", "%", " ", "\"", " ", ".", " ", 3122d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "::", "" 3132d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko }; 3142d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 315808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 316808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko std::vector<Token> Toks; 3172d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 318808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko lexString(Sources[i], Toks); 3192d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 320808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(array_lengthof(Text), Toks.size()); 3212d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 322808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko for (size_t j = 0, e = Toks.size(); j != e; j++) { 323808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko if(Toks[j].is(tok::text)) 324808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(StringRef(Text[j]), Toks[j].getText()) 325808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko << "index " << i; 326808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko } 3272d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 3282d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 3292d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 3308c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko// A command marker followed by a non-letter that is not a part of an escape 3318c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko// sequence. 3322d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, DoxygenCommand5) { 3338c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko const char *Source = "/// \\^ \\0"; 3348c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko std::vector<Token> Toks; 3358c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko 3368c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko lexString(Source, Toks); 3378c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko 3388c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko ASSERT_EQ(6U, Toks.size()); 3398c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko 3408c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 3418c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 3428c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko 3438c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 3448c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko ASSERT_EQ(StringRef("\\"), Toks[1].getText()); 3458c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko 3468c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 3478c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko ASSERT_EQ(StringRef("^ "), Toks[2].getText()); 3488c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko 3498c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko ASSERT_EQ(tok::text, Toks[3].getKind()); 3508c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko ASSERT_EQ(StringRef("\\"), Toks[3].getText()); 3518c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko 3528c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko ASSERT_EQ(tok::text, Toks[4].getKind()); 3538c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko ASSERT_EQ(StringRef("0"), Toks[4].getText()); 3548c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko 3558c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko ASSERT_EQ(tok::newline, Toks[5].getKind()); 3568c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko} 3578c05da3fd8db98af482826ba059ab1ad6d58010fDmitri Gribenko 3588c05da3fd8db98af482826ba059ab1ad6d58010fDmitri GribenkoTEST_F(CommentLexerTest, DoxygenCommand6) { 3592d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Source = "/// \\brief Aaa."; 3602d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 3612d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 3622d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Source, Toks); 3632d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 3642d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(4U, Toks.size()); 3652d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 3662d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 3672d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 3682d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 3698536fa14ee1048e5e2d62cb3dc11fc640c7dc00dFariborz Jahanian ASSERT_EQ(tok::backslash_command, Toks[1].getKind()); 370e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("brief"), getCommandName(Toks[1])); 3712d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 3722d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 3732d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Aaa."), Toks[2].getText()); 3742d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 3752d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 3762d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 3772d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 3788c05da3fd8db98af482826ba059ab1ad6d58010fDmitri GribenkoTEST_F(CommentLexerTest, DoxygenCommand7) { 379e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko const char *Source = "/// \\em\\em \\em\t\\em\n"; 380e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko std::vector<Token> Toks; 381e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 382e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko lexString(Source, Toks); 383e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 384e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(8U, Toks.size()); 385e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 386e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 387e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 388e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 3898536fa14ee1048e5e2d62cb3dc11fc640c7dc00dFariborz Jahanian ASSERT_EQ(tok::backslash_command, Toks[1].getKind()); 390e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("em"), getCommandName(Toks[1])); 391e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 3928536fa14ee1048e5e2d62cb3dc11fc640c7dc00dFariborz Jahanian ASSERT_EQ(tok::backslash_command, Toks[2].getKind()); 393e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("em"), getCommandName(Toks[2])); 394e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 395e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(tok::text, Toks[3].getKind()); 396e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[3].getText()); 397e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 3988536fa14ee1048e5e2d62cb3dc11fc640c7dc00dFariborz Jahanian ASSERT_EQ(tok::backslash_command, Toks[4].getKind()); 399e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("em"), getCommandName(Toks[4])); 400e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 401e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(tok::text, Toks[5].getKind()); 402e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("\t"), Toks[5].getText()); 403e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 4048536fa14ee1048e5e2d62cb3dc11fc640c7dc00dFariborz Jahanian ASSERT_EQ(tok::backslash_command, Toks[6].getKind()); 405e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("em"), getCommandName(Toks[6])); 406e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 407e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[7].getKind()); 408e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko} 409e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko 4108c05da3fd8db98af482826ba059ab1ad6d58010fDmitri GribenkoTEST_F(CommentLexerTest, DoxygenCommand8) { 411808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko const char *Source = "/// @em@em @em\t@em\n"; 412808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko std::vector<Token> Toks; 413808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko 414808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko lexString(Source, Toks); 415808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko 416808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(8U, Toks.size()); 417808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko 418808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 419808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 420808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko 421808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(tok::at_command, Toks[1].getKind()); 422808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(StringRef("em"), getCommandName(Toks[1])); 423808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko 424808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(tok::at_command, Toks[2].getKind()); 425808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(StringRef("em"), getCommandName(Toks[2])); 426808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko 427808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(tok::text, Toks[3].getKind()); 428808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[3].getText()); 429808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko 430808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(tok::at_command, Toks[4].getKind()); 431808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(StringRef("em"), getCommandName(Toks[4])); 432808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko 433808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(tok::text, Toks[5].getKind()); 434808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(StringRef("\t"), Toks[5].getText()); 435808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko 436808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(tok::at_command, Toks[6].getKind()); 437808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(StringRef("em"), getCommandName(Toks[6])); 438808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko 439808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(tok::newline, Toks[7].getKind()); 440808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko} 441808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko 442808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri GribenkoTEST_F(CommentLexerTest, DoxygenCommand9) { 4432d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Source = "/// \\aaa\\bbb \\ccc\t\\ddd\n"; 4442d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 4452d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 4462d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Source, Toks); 4472d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 4482d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(8U, Toks.size()); 4492d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 4502d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 4512d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 4522d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 453e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(tok::unknown_command, Toks[1].getKind()); 454e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("aaa"), Toks[1].getUnknownCommandName()); 4552d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 456e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(tok::unknown_command, Toks[2].getKind()); 457e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("bbb"), Toks[2].getUnknownCommandName()); 4582d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 4592d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[3].getKind()); 4602d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[3].getText()); 4612d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 462e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(tok::unknown_command, Toks[4].getKind()); 463e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("ccc"), Toks[4].getUnknownCommandName()); 4642d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 4652d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[5].getKind()); 4662d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef("\t"), Toks[5].getText()); 4672d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 468e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(tok::unknown_command, Toks[6].getKind()); 469e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("ddd"), Toks[6].getUnknownCommandName()); 4702d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 4712d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[7].getKind()); 4722d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 4732d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 474808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri GribenkoTEST_F(CommentLexerTest, DoxygenCommand10) { 4758d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko const char *Source = "// \\c\n"; 4768d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko std::vector<Token> Toks; 4778d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 4788d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko lexString(Source, Toks); 4798d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 4808d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(3U, Toks.size()); 4818d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 4828d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 4838d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 4848d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 4858536fa14ee1048e5e2d62cb3dc11fc640c7dc00dFariborz Jahanian ASSERT_EQ(tok::backslash_command, Toks[1].getKind()); 486e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("c"), getCommandName(Toks[1])); 4878d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 4888d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 4896ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko} 4906ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 4916ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri GribenkoTEST_F(CommentLexerTest, RegisterCustomBlockCommand) { 492808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko const char *Source = 493808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko "/// \\NewBlockCommand Aaa.\n" 494808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko "/// @NewBlockCommand Aaa.\n"; 4956ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 4966ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko Traits.registerBlockCommand(StringRef("NewBlockCommand")); 4976ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 4986ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko std::vector<Token> Toks; 4996ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5006ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko lexString(Source, Toks); 5016ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 502808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(8U, Toks.size()); 5036ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 504808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 505808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 5066ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5078536fa14ee1048e5e2d62cb3dc11fc640c7dc00dFariborz Jahanian ASSERT_EQ(tok::backslash_command, Toks[1].getKind()); 5086ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(StringRef("NewBlockCommand"), getCommandName(Toks[1])); 5096ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5106ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 5116ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(StringRef(" Aaa."), Toks[2].getText()); 5126ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 513808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 514808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko 515808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(tok::text, Toks[4].getKind()); 516808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[4].getText()); 517808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko 518808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(tok::at_command, Toks[5].getKind()); 519808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(StringRef("NewBlockCommand"), getCommandName(Toks[5])); 520808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko 521808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(tok::text, Toks[6].getKind()); 522808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(StringRef(" Aaa."), Toks[6].getText()); 523808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko 524808383d2d6d58a7c7db85f8c7618fb74d821309fDmitri Gribenko ASSERT_EQ(tok::newline, Toks[7].getKind()); 5256ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko} 5266ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5276ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri GribenkoTEST_F(CommentLexerTest, RegisterMultipleBlockCommands) { 5286ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko const char *Source = 5296ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko "/// \\Foo\n" 5306ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko "/// \\Bar Baz\n" 5316ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko "/// \\Blech quux=corge\n"; 5326ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5336ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko Traits.registerBlockCommand(StringRef("Foo")); 5346ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko Traits.registerBlockCommand(StringRef("Bar")); 5356ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko Traits.registerBlockCommand(StringRef("Blech")); 5366ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5376ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko std::vector<Token> Toks; 5386ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5396ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko lexString(Source, Toks); 5406ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5416ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(11U, Toks.size()); 5426ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5436ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 5446ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 5456ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5468536fa14ee1048e5e2d62cb3dc11fc640c7dc00dFariborz Jahanian ASSERT_EQ(tok::backslash_command, Toks[1].getKind()); 5476ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(StringRef("Foo"), getCommandName(Toks[1])); 5486ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5496ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 5506ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5516ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(tok::text, Toks[3].getKind()); 5526ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[3].getText()); 5536ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5548536fa14ee1048e5e2d62cb3dc11fc640c7dc00dFariborz Jahanian ASSERT_EQ(tok::backslash_command, Toks[4].getKind()); 5556ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(StringRef("Bar"), getCommandName(Toks[4])); 5566ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5576ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(tok::text, Toks[5].getKind()); 5586ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(StringRef(" Baz"), Toks[5].getText()); 5596ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5606ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[6].getKind()); 5616ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5626ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(tok::text, Toks[7].getKind()); 5636ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[7].getText()); 5646ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5658536fa14ee1048e5e2d62cb3dc11fc640c7dc00dFariborz Jahanian ASSERT_EQ(tok::backslash_command, Toks[8].getKind()); 5666ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(StringRef("Blech"), getCommandName(Toks[8])); 5676ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5686ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(tok::text, Toks[9].getKind()); 5696ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(StringRef(" quux=corge"), Toks[9].getText()); 5706ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko 5716ebf09130479bc7605aa09a3e6c4dc2ba3513495Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[10].getKind()); 5728d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko} 5738d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 5742d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// Empty verbatim block. 5752d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, VerbatimBlock1) { 5762d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { 5772d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/// \\verbatim\\endverbatim\n//", 5782d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/** \\verbatim\\endverbatim*/" 5792d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko }; 5802d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 5812d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 5822d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 5832d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 5842d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 5852d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 5862d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(5U, Toks.size()); 5872d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 5882d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 5892d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 5902d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 5912d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_begin, Toks[1].getKind()); 592e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("verbatim"), getVerbatimBlockName(Toks[1])); 5932d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 5942d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_end, Toks[2].getKind()); 595e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("endverbatim"), getVerbatimBlockName(Toks[2])); 5962d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 5972d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 5982d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[4].getKind()); 5992d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 6002d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 6012d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6022d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// Empty verbatim block without an end command. 6032d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, VerbatimBlock2) { 6048d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko const char *Source = "/// \\verbatim"; 6052d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6068d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko std::vector<Token> Toks; 6072d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6088d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko lexString(Source, Toks); 6092d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6108d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(3U, Toks.size()); 6112d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6128d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 6138d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 6142d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6158d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::verbatim_block_begin, Toks[1].getKind()); 616e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("verbatim"), getVerbatimBlockName(Toks[1])); 6172d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6188d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 6192d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 6202d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6218d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko// Empty verbatim block without an end command. 6222d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, VerbatimBlock3) { 6238d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko const char *Source = "/** \\verbatim*/"; 6248d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 6258d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko std::vector<Token> Toks; 6268d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 6278d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko lexString(Source, Toks); 6288d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 6298d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(4U, Toks.size()); 6308d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 6318d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 6328d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 6338d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 6348d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::verbatim_block_begin, Toks[1].getKind()); 635e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("verbatim"), getVerbatimBlockName(Toks[1])); 6368d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 6378d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 6388d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 6398d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko} 6408d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 6418d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko// Single-line verbatim block. 6428d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri GribenkoTEST_F(CommentLexerTest, VerbatimBlock4) { 6432d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { 6442d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/// Meow \\verbatim aaa \\endverbatim\n//", 6452d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/** Meow \\verbatim aaa \\endverbatim*/" 6462d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko }; 6472d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6482d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 6492d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 6502d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6512d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 6522d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6532d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(6U, Toks.size()); 6542d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6552d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 6562d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Meow "), Toks[0].getText()); 6572d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6582d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_begin, Toks[1].getKind()); 659e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("verbatim"), getVerbatimBlockName(Toks[1])); 6602d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6612d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_line, Toks[2].getKind()); 6622d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" aaa "), Toks[2].getVerbatimBlockText()); 6632d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6642d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_end, Toks[3].getKind()); 665e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("endverbatim"), getVerbatimBlockName(Toks[3])); 6662d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6672d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[4].getKind()); 6682d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[5].getKind()); 6692d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 6702d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 6712d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6722d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// Single-line verbatim block without an end command. 6738d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri GribenkoTEST_F(CommentLexerTest, VerbatimBlock5) { 6742d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { 6752d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/// Meow \\verbatim aaa \n//", 6762d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/** Meow \\verbatim aaa */" 6772d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko }; 6782d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6792d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 6802d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 6812d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6822d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 6832d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6842d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(5U, Toks.size()); 6852d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6862d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 6872d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Meow "), Toks[0].getText()); 6882d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6892d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_begin, Toks[1].getKind()); 690e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("verbatim"), getVerbatimBlockName(Toks[1])); 6912d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6922d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_line, Toks[2].getKind()); 6932d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" aaa "), Toks[2].getVerbatimBlockText()); 6942d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 6952d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 6962d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[4].getKind()); 6972d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 6982d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 6992d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 7008d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri GribenkoTEST_F(CommentLexerTest, VerbatimBlock6) { 7018d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko const char *Source = 7028d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko "// \\verbatim\n" 7038d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko "// Aaa\n" 7048d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko "//\n" 7058d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko "// Bbb\n" 7068d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko "// \\endverbatim\n"; 7078d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7088d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko std::vector<Token> Toks; 7098d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7108d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko lexString(Source, Toks); 7118d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 71264da4e55c111f4733135e1780216609569767351Dmitri Gribenko ASSERT_EQ(10U, Toks.size()); 7138d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7148d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 7158d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 7168d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7178d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::verbatim_block_begin, Toks[1].getKind()); 718e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("verbatim"), getVerbatimBlockName(Toks[1])); 7198d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7208d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 7218d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7228d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::verbatim_block_line, Toks[3].getKind()); 7238d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(StringRef(" Aaa"), Toks[3].getVerbatimBlockText()); 7248d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7258d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[4].getKind()); 7268d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7278d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[5].getKind()); 7288d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7298d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::verbatim_block_line, Toks[6].getKind()); 7308d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(StringRef(" Bbb"), Toks[6].getVerbatimBlockText()); 7318d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7328d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[7].getKind()); 7338d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 73464da4e55c111f4733135e1780216609569767351Dmitri Gribenko ASSERT_EQ(tok::verbatim_block_end, Toks[8].getKind()); 735e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("endverbatim"), getVerbatimBlockName(Toks[8])); 7368d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 73764da4e55c111f4733135e1780216609569767351Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[9].getKind()); 7388d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko} 7398d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7408d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri GribenkoTEST_F(CommentLexerTest, VerbatimBlock7) { 7418d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko const char *Source = 7428d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko "/* \\verbatim\n" 7438d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko " * Aaa\n" 7448d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko " *\n" 7458d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko " * Bbb\n" 7468d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko " * \\endverbatim\n" 7478d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko " */"; 7488d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7498d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko std::vector<Token> Toks; 7508d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7518d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko lexString(Source, Toks); 7528d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 75364da4e55c111f4733135e1780216609569767351Dmitri Gribenko ASSERT_EQ(10U, Toks.size()); 7548d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7558d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 7568d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 7578d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7588d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::verbatim_block_begin, Toks[1].getKind()); 759e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("verbatim"), getVerbatimBlockName(Toks[1])); 7608d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7618d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::verbatim_block_line, Toks[2].getKind()); 7628d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(StringRef(" Aaa"), Toks[2].getVerbatimBlockText()); 7638d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7648d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::verbatim_block_line, Toks[3].getKind()); 7658d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(StringRef(""), Toks[3].getVerbatimBlockText()); 7668d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7678d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::verbatim_block_line, Toks[4].getKind()); 7688d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(StringRef(" Bbb"), Toks[4].getVerbatimBlockText()); 7698d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 77064da4e55c111f4733135e1780216609569767351Dmitri Gribenko ASSERT_EQ(tok::verbatim_block_end, Toks[5].getKind()); 771e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("endverbatim"), getVerbatimBlockName(Toks[5])); 7728d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 77364da4e55c111f4733135e1780216609569767351Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[6].getKind()); 7748d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 77564da4e55c111f4733135e1780216609569767351Dmitri Gribenko ASSERT_EQ(tok::text, Toks[7].getKind()); 77664da4e55c111f4733135e1780216609569767351Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[7].getText()); 7778d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 77864da4e55c111f4733135e1780216609569767351Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[8].getKind()); 7798d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[9].getKind()); 7808d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko} 7818d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 7822d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// Complex test for verbatim blocks. 7838d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri GribenkoTEST_F(CommentLexerTest, VerbatimBlock8) { 7842d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Source = 7852d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/* Meow \\verbatim aaa\\$\\@\n" 7862d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "bbb \\endverbati\r" 7872d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "ccc\r\n" 7882d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "ddd \\endverbatim Blah \\verbatim eee\n" 7892d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "\\endverbatim BlahBlah*/"; 7902d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 7912d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 7922d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Source, Toks); 7932d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 7942d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(14U, Toks.size()); 7952d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 7962d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 7972d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Meow "), Toks[0].getText()); 7982d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 7992d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_begin, Toks[1].getKind()); 800e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("verbatim"), getVerbatimBlockName(Toks[1])); 8012d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8022d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_line, Toks[2].getKind()); 8038d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(StringRef(" aaa\\$\\@"), Toks[2].getVerbatimBlockText()); 8042d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8052d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_line, Toks[3].getKind()); 8068d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(StringRef("bbb \\endverbati"), Toks[3].getVerbatimBlockText()); 8072d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8082d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_line, Toks[4].getKind()); 8098d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(StringRef("ccc"), Toks[4].getVerbatimBlockText()); 8102d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8112d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_line, Toks[5].getKind()); 8122d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef("ddd "), Toks[5].getVerbatimBlockText()); 8132d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8142d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_end, Toks[6].getKind()); 815e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("endverbatim"), getVerbatimBlockName(Toks[6])); 8162d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8172d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[7].getKind()); 8182d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Blah "), Toks[7].getText()); 8192d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8202d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_begin, Toks[8].getKind()); 821e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("verbatim"), getVerbatimBlockName(Toks[8])); 8222d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8232d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_line, Toks[9].getKind()); 8248d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(StringRef(" eee"), Toks[9].getVerbatimBlockText()); 8252d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8262d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_end, Toks[10].getKind()); 827e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("endverbatim"), getVerbatimBlockName(Toks[10])); 8282d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8292d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[11].getKind()); 8302d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" BlahBlah"), Toks[11].getText()); 8312d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8322d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[12].getKind()); 8332d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[13].getKind()); 8342d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 8352d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8362d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// LaTeX verbatim blocks. 8378d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri GribenkoTEST_F(CommentLexerTest, VerbatimBlock9) { 8382d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Source = 8392d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/// \\f$ Aaa \\f$ \\f[ Bbb \\f] \\f{ Ccc \\f}"; 8402d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 8412d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8422d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Source, Toks); 8432d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8442d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(13U, Toks.size()); 8452d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8462d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 8472d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 8482d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8492d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_begin, Toks[1].getKind()); 850e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("f$"), getVerbatimBlockName(Toks[1])); 8512d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8522d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_line, Toks[2].getKind()); 8532d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Aaa "), Toks[2].getVerbatimBlockText()); 8542d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8552d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_end, Toks[3].getKind()); 856e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("f$"), getVerbatimBlockName(Toks[3])); 8572d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8582d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[4].getKind()); 8592d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[4].getText()); 8602d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8612d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_begin, Toks[5].getKind()); 862e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("f["), getVerbatimBlockName(Toks[5])); 8632d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8642d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_line, Toks[6].getKind()); 8652d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Bbb "), Toks[6].getVerbatimBlockText()); 8662d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8672d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_end, Toks[7].getKind()); 868e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("f]"), getVerbatimBlockName(Toks[7])); 8692d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8702d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[8].getKind()); 8712d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[8].getText()); 8722d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8732d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_begin, Toks[9].getKind()); 874e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("f{"), getVerbatimBlockName(Toks[9])); 8752d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8762d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_line, Toks[10].getKind()); 8772d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Ccc "), Toks[10].getVerbatimBlockText()); 8782d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8792d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::verbatim_block_end, Toks[11].getKind()); 880e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("f}"), getVerbatimBlockName(Toks[11])); 8812d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8822d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[12].getKind()); 8832d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 8842d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8852d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// Empty verbatim line. 8862d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, VerbatimLine1) { 8872d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { 8882d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/// \\fn\n//", 8892d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/** \\fn*/" 8902d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko }; 8912d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8922d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 8932d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 8942d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8952d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 8962d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 8972d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(4U, Toks.size()); 8982d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 899962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 900962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 9012d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 902962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::verbatim_line_name, Toks[1].getKind()); 903e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("fn"), getVerbatimLineName(Toks[1])); 9042d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 905962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 906962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 9072d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 9082d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 9092d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 9102d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// Verbatim line with Doxygen escape sequences, which should not be expanded. 9112d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, VerbatimLine2) { 9122d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { 9132d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/// \\fn void *foo(const char *zzz = \"\\$\");\n//", 9142d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/** \\fn void *foo(const char *zzz = \"\\$\");*/" 9152d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko }; 9162d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 9172d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 9182d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 9192d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 9202d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 9212d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 922962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(5U, Toks.size()); 9232d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 924962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 925962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 926962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko 927962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::verbatim_line_name, Toks[1].getKind()); 928e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("fn"), getVerbatimLineName(Toks[1])); 9292d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 930962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::verbatim_line_text, Toks[2].getKind()); 9312d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" void *foo(const char *zzz = \"\\$\");"), 932962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko Toks[2].getVerbatimLineText()); 9332d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 934962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 935962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::newline, Toks[4].getKind()); 9362d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 9372d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 9382d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 9392d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko// Verbatim line should not eat anything from next source line. 9402d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, VerbatimLine3) { 9412d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Source = 9422d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/** \\fn void *foo(const char *zzz = \"\\$\");\n" 9432d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko " * Meow\n" 9442d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko " */"; 9452d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 9462d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 9472d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 9482d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Source, Toks); 9492d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 950962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(9U, Toks.size()); 9512d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 952962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 953962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 954962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko 955962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::verbatim_line_name, Toks[1].getKind()); 956e4330a302ac20b41b9800267ebd4b5b01f8553f8Dmitri Gribenko ASSERT_EQ(StringRef("fn"), getVerbatimLineName(Toks[1])); 9572d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 958962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::verbatim_line_text, Toks[2].getKind()); 9592d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" void *foo(const char *zzz = \"\\$\");"), 960962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko Toks[2].getVerbatimLineText()); 961962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 9622d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 963962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::text, Toks[4].getKind()); 964962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(StringRef(" Meow"), Toks[4].getText()); 965962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::newline, Toks[5].getKind()); 9662d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 967962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::text, Toks[6].getKind()); 968962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[6].getText()); 9692d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 970962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::newline, Toks[7].getKind()); 971962668d2c192dd02f75b8ec3628a89964bfb738bDmitri Gribenko ASSERT_EQ(tok::newline, Toks[8].getKind()); 9722d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 9732d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 9742d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, HTML1) { 9752d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Source = 9762d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "// <"; 9772d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 9782d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 9792d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 9802d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Source, Toks); 9812d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 9822d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(3U, Toks.size()); 9832d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 9842d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 9852d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 9862d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 9872d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 9882d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef("<"), Toks[1].getText()); 9892d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 9902d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 9912d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 9922d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 9932d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, HTML2) { 9945676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko const char *Source = 995a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko "// a<2"; 996a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 997a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko std::vector<Token> Toks; 998a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 999a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko lexString(Source, Toks); 1000a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1001a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko ASSERT_EQ(4U, Toks.size()); 1002a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1003a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1004a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko ASSERT_EQ(StringRef(" a"), Toks[0].getText()); 1005a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1006a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1007a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko ASSERT_EQ(StringRef("<"), Toks[1].getText()); 1008a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1009a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 1010a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko ASSERT_EQ(StringRef("2"), Toks[2].getText()); 1011a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1012a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 1013a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko} 1014a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1015a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri GribenkoTEST_F(CommentLexerTest, HTML3) { 1016a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko const char *Source = 1017834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// < img"; 10185676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko 10195676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko std::vector<Token> Toks; 10205676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko 10215676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko lexString(Source, Toks); 10225676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko 10235676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko ASSERT_EQ(4U, Toks.size()); 10245676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko 10255676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 10265676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 10275676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko 10285676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 10295676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko ASSERT_EQ(StringRef("<"), Toks[1].getText()); 10305676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko 10315676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 1032834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef(" img"), Toks[2].getText()); 10335676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko 10345676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 10355676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko} 10365676d32a23faf0506f5c295980c2876c862488d5Dmitri Gribenko 1037a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri GribenkoTEST_F(CommentLexerTest, HTML4) { 10382d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { 1039834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img", 1040834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img " 10412d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko }; 10422d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 10432d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 10442d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 10452d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 10462d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 10472d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 10482d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(3U, Toks.size()); 10492d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 10503f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 10513f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 10522d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 10533f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_start_tag, Toks[1].getKind()); 1054834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("img"), Toks[1].getHTMLTagStartName()); 10552d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 10563f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 10572d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 10582d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 10592d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1060a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri GribenkoTEST_F(CommentLexerTest, HTML5) { 1061a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko const char *Source = 1062834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img 42"; 1063a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1064a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko std::vector<Token> Toks; 1065a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1066a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko lexString(Source, Toks); 1067a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1068a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko ASSERT_EQ(4U, Toks.size()); 1069a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 10703f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 10713f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1072a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 10733f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_start_tag, Toks[1].getKind()); 1074834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("img"), Toks[1].getHTMLTagStartName()); 1075a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 10763f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 10773f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(StringRef("42"), Toks[2].getText()); 1078a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 10793f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 1080a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko} 1081a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1082a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri GribenkoTEST_F(CommentLexerTest, HTML6) { 1083834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko const char *Source = "// <img> Meow"; 1084a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1085a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko std::vector<Token> Toks; 1086a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1087a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko lexString(Source, Toks); 1088a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1089a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko ASSERT_EQ(5U, Toks.size()); 1090a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 10913f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 10923f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1093a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 10943f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_start_tag, Toks[1].getKind()); 1095834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("img"), Toks[1].getHTMLTagStartName()); 1096a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 10973f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_greater, Toks[2].getKind()); 1098a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 10993f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::text, Toks[3].getKind()); 11003f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(StringRef(" Meow"), Toks[3].getText()); 1101a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 11023f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[4].getKind()); 1103a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko} 1104a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1105a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri GribenkoTEST_F(CommentLexerTest, HTML7) { 1106834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko const char *Source = "// <img="; 11072d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11082d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 11092d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11102d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Source, Toks); 11112d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11122d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(4U, Toks.size()); 11132d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11143f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 11153f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 11162d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11173f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_start_tag, Toks[1].getKind()); 1118834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("img"), Toks[1].getHTMLTagStartName()); 11192d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11203f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 11213f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(StringRef("="), Toks[2].getText()); 11222d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11233f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 11242d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 11252d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1126a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri GribenkoTEST_F(CommentLexerTest, HTML8) { 1127834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko const char *Source = "// <img src=> Meow"; 1128a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1129a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko std::vector<Token> Toks; 1130a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1131a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko lexString(Source, Toks); 1132a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1133a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko ASSERT_EQ(7U, Toks.size()); 1134a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 11353f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 11363f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1137a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 11383f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_start_tag, Toks[1].getKind()); 1139834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("img"), Toks[1].getHTMLTagStartName()); 1140a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 11413f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_ident, Toks[2].getKind()); 1142834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("src"), Toks[2].getHTMLIdent()); 1143a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 11443f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_equals, Toks[3].getKind()); 1145a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 11463f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_greater, Toks[4].getKind()); 1147a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 11483f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::text, Toks[5].getKind()); 11493f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(StringRef(" Meow"), Toks[5].getText()); 1150a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 11513f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[6].getKind()); 1152a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko} 1153a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri Gribenko 1154a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri GribenkoTEST_F(CommentLexerTest, HTML9) { 11552d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { 1156834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img src", 1157834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img src " 11582d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko }; 11592d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11602d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 11612d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 11622d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11632d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 11642d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11652d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(4U, Toks.size()); 11662d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11673f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 11683f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 11692d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11703f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_start_tag, Toks[1].getKind()); 1171834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("img"), Toks[1].getHTMLTagStartName()); 11722d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11733f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_ident, Toks[2].getKind()); 1174834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("src"), Toks[2].getHTMLIdent()); 11752d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11763f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 11772d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 11782d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 11792d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1180a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri GribenkoTEST_F(CommentLexerTest, HTML10) { 11812d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { 1182834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img src=", 1183834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img src =" 11842d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko }; 11852d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11862d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 11872d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 11882d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11892d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 11902d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11912d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(5U, Toks.size()); 11922d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11933f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 11943f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 11952d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11963f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_start_tag, Toks[1].getKind()); 1197834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("img"), Toks[1].getHTMLTagStartName()); 11982d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 11993f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_ident, Toks[2].getKind()); 1200834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("src"), Toks[2].getHTMLIdent()); 12012d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12023f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_equals, Toks[3].getKind()); 12032d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12043f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[4].getKind()); 12052d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 12062d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 12072d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1208a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri GribenkoTEST_F(CommentLexerTest, HTML11) { 12092d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { 1210834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img src=\"", 1211834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img src = \"", 1212834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img src=\'", 1213834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img src = \'" 12142d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko }; 12152d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12162d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 12172d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 12182d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12192d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 12202d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12212d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(6U, Toks.size()); 12222d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12232d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 12242d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 12252d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12263f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_start_tag, Toks[1].getKind()); 1227834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("img"), Toks[1].getHTMLTagStartName()); 12282d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12292d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::html_ident, Toks[2].getKind()); 1230834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("src"), Toks[2].getHTMLIdent()); 12312d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12322d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::html_equals, Toks[3].getKind()); 12332d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12342d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::html_quoted_string, Toks[4].getKind()); 12352d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(""), Toks[4].getHTMLQuotedString()); 12362d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12372d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[5].getKind()); 12382d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 12392d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 12402d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1241a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri GribenkoTEST_F(CommentLexerTest, HTML12) { 1242834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko const char *Source = "// <img src=@"; 12432d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12442d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 12452d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12462d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Source, Toks); 12472d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12482d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(6U, Toks.size()); 12492d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12503f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 12513f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 12522d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12533f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_start_tag, Toks[1].getKind()); 1254834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("img"), Toks[1].getHTMLTagStartName()); 12552d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12563f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_ident, Toks[2].getKind()); 1257834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("src"), Toks[2].getHTMLIdent()); 12582d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12593f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_equals, Toks[3].getKind()); 12602d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12613f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::text, Toks[4].getKind()); 12623f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(StringRef("@"), Toks[4].getText()); 12632d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12643f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[5].getKind()); 12652d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 12662d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1267a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri GribenkoTEST_F(CommentLexerTest, HTML13) { 12682d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { 1269834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img src=\"val\\\"\\'val", 1270834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img src=\"val\\\"\\'val\"", 1271834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img src=\'val\\\"\\'val", 1272834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img src=\'val\\\"\\'val\'" 12732d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko }; 12742d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12752d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 12762d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 12772d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12782d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 12792d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12802d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(6U, Toks.size()); 12812d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12822d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 12832d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 12842d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12853f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_start_tag, Toks[1].getKind()); 1286834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("img"), Toks[1].getHTMLTagStartName()); 12872d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12882d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::html_ident, Toks[2].getKind()); 1289834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("src"), Toks[2].getHTMLIdent()); 12902d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12912d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::html_equals, Toks[3].getKind()); 12922d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12932d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::html_quoted_string, Toks[4].getKind()); 12942d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef("val\\\"\\'val"), Toks[4].getHTMLQuotedString()); 12952d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 12962d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[5].getKind()); 12972d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 12982d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 12992d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1300a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri GribenkoTEST_F(CommentLexerTest, HTML14) { 13012d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Sources[] = { 1302834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img src=\"val\\\"\\'val\">", 1303834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img src=\'val\\\"\\'val\'>" 13042d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko }; 13052d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 13062d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 13072d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 13082d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 13092d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Sources[i], Toks); 13102d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 13112d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(7U, Toks.size()); 13122d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 13132d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 13142d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 13152d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 13163f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_start_tag, Toks[1].getKind()); 1317834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("img"), Toks[1].getHTMLTagStartName()); 13182d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 13192d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::html_ident, Toks[2].getKind()); 1320834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("src"), Toks[2].getHTMLIdent()); 13212d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 13222d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::html_equals, Toks[3].getKind()); 13232d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 13242d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::html_quoted_string, Toks[4].getKind()); 13252d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef("val\\\"\\'val"), Toks[4].getHTMLQuotedString()); 13262d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 13272d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::html_greater, Toks[5].getKind()); 13282d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 13292d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[6].getKind()); 13302d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko } 13312d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 13322d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1333a99ec107ba6b5abaf27c6cc9318e65689163f2a1Dmitri GribenkoTEST_F(CommentLexerTest, HTML15) { 1334a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko const char *Sources[] = { 1335834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img/>", 1336834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img />" 1337a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko }; 1338a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1339a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 1340a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko std::vector<Token> Toks; 1341a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1342a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko lexString(Sources[i], Toks); 1343a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1344a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko ASSERT_EQ(4U, Toks.size()); 1345a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1346a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1347a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1348a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 13493f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_start_tag, Toks[1].getKind()); 1350834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("img"), Toks[1].getHTMLTagStartName()); 1351a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1352a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko ASSERT_EQ(tok::html_slash_greater, Toks[2].getKind()); 1353a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1354a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 1355a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko } 1356a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko} 1357a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1358a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri GribenkoTEST_F(CommentLexerTest, HTML16) { 1359a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko const char *Sources[] = { 1360834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img/ Aaa", 1361834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko "// <img / Aaa" 1362a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko }; 1363a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1364a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 1365a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko std::vector<Token> Toks; 1366a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1367a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko lexString(Sources[i], Toks); 1368a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1369a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko ASSERT_EQ(5U, Toks.size()); 1370a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1371a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1372a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1373a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 13743f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_start_tag, Toks[1].getKind()); 1375834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("img"), Toks[1].getHTMLTagStartName()); 1376a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1377a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 1378a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko ASSERT_EQ(StringRef("/"), Toks[2].getText()); 1379a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1380a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko ASSERT_EQ(tok::text, Toks[3].getKind()); 1381a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko ASSERT_EQ(StringRef(" Aaa"), Toks[3].getText()); 1382a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1383a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[4].getKind()); 1384a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko } 1385a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko} 1386a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri Gribenko 1387a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri GribenkoTEST_F(CommentLexerTest, HTML17) { 13882d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Source = "// </"; 13892d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 13902d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 13912d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 13922d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Source, Toks); 13932d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 13942d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(3U, Toks.size()); 13952d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1396834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1397834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 13982d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1399834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1400834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("</"), Toks[1].getText()); 14012d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1402834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 14032d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 14042d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1405a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri GribenkoTEST_F(CommentLexerTest, HTML18) { 14062d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Source = "// </@"; 14072d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 14082d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 14092d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 14102d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Source, Toks); 14112d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 14122d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(4U, Toks.size()); 14132d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1414834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1415834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 14162d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1417834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1418834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("</"), Toks[1].getText()); 14192d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1420834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 1421834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("@"), Toks[2].getText()); 14222d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1423834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 14242d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 14252d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1426a5ef44ff5d93a3be6ca67782828157a71894cf0cDmitri GribenkoTEST_F(CommentLexerTest, HTML19) { 1427834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko const char *Source = "// </img"; 14288d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 14298d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko std::vector<Token> Toks; 14308d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 14318d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko lexString(Source, Toks); 14328d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 14338d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko ASSERT_EQ(3U, Toks.size()); 14348d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 14353f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 14363f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 14378d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 14383f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::html_end_tag, Toks[1].getKind()); 1439834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("img"), Toks[1].getHTMLTagEndName()); 14408d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 14413f38bf2d441fac379c427f86153fbb0cb41256c6Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 14428d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko} 14438d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1444834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri GribenkoTEST_F(CommentLexerTest, NotAKnownHTMLTag1) { 1445834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko const char *Source = "// <tag>"; 14462d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1447834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko std::vector<Token> Toks; 14482d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1449834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko lexString(Source, Toks); 14502d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1451834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(4U, Toks.size()); 14522d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1453834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1454834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 14552d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1456834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1457834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("<tag"), Toks[1].getText()); 14582d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1459834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 1460834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef(">"), Toks[2].getText()); 14618d3ba23f2d9e6c87794d059412a0808c9cbacb25Dmitri Gribenko 1462834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 1463834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko} 1464834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko 1465834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri GribenkoTEST_F(CommentLexerTest, NotAKnownHTMLTag2) { 1466834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko const char *Source = "// </tag>"; 1467834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko 1468834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko std::vector<Token> Toks; 1469834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko 1470834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko lexString(Source, Toks); 1471834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko 1472834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(4U, Toks.size()); 1473834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko 1474834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1475834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1476834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko 1477834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1478834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef("</tag"), Toks[1].getText()); 1479834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko 1480834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 1481834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(StringRef(">"), Toks[2].getText()); 1482834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko 1483834a5bd311b4a32f89937ca5b6dd2b4111891859Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 14842d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 14852d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1486477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri GribenkoTEST_F(CommentLexerTest, HTMLCharacterReferences1) { 1487477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko const char *Source = "// &"; 1488477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1489477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko std::vector<Token> Toks; 1490477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1491477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko lexString(Source, Toks); 1492477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1493477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(3U, Toks.size()); 1494477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1495477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1496477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1497477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1498477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1499477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("&"), Toks[1].getText()); 1500477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1501477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 1502477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko} 1503477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1504477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri GribenkoTEST_F(CommentLexerTest, HTMLCharacterReferences2) { 1505477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko const char *Source = "// &!"; 1506477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1507477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko std::vector<Token> Toks; 1508477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1509477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko lexString(Source, Toks); 1510477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1511477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(4U, Toks.size()); 1512477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1513477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1514477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1515477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1516477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1517477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("&"), Toks[1].getText()); 1518477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1519477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 1520477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("!"), Toks[2].getText()); 1521477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1522477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 1523477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko} 1524477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1525477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri GribenkoTEST_F(CommentLexerTest, HTMLCharacterReferences3) { 1526477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko const char *Source = "// &"; 1527477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1528477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko std::vector<Token> Toks; 1529477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1530477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko lexString(Source, Toks); 1531477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1532477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(3U, Toks.size()); 1533477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1534477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1535477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1536477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1537477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1538477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("&"), Toks[1].getText()); 1539477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1540477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 1541477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko} 1542477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1543477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri GribenkoTEST_F(CommentLexerTest, HTMLCharacterReferences4) { 1544477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko const char *Source = "// &!"; 1545477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1546477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko std::vector<Token> Toks; 1547477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1548477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko lexString(Source, Toks); 1549477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1550477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(4U, Toks.size()); 1551477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1552477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1553477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1554477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1555477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1556477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("&"), Toks[1].getText()); 1557477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1558477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 1559477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("!"), Toks[2].getText()); 1560477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1561477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 1562477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko} 1563477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1564477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri GribenkoTEST_F(CommentLexerTest, HTMLCharacterReferences5) { 1565477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko const char *Source = "// &#"; 1566477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1567477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko std::vector<Token> Toks; 1568477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1569477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko lexString(Source, Toks); 1570477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1571477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(3U, Toks.size()); 1572477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1573477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1574477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1575477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1576477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1577477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("&#"), Toks[1].getText()); 1578477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1579477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 1580477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko} 1581477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1582477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri GribenkoTEST_F(CommentLexerTest, HTMLCharacterReferences6) { 1583477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko const char *Source = "// &#a"; 1584477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1585477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko std::vector<Token> Toks; 1586477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1587477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko lexString(Source, Toks); 1588477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1589477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(4U, Toks.size()); 1590477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1591477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1592477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1593477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1594477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1595477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("&#"), Toks[1].getText()); 1596477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1597477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 1598477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("a"), Toks[2].getText()); 1599477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1600477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 1601477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko} 1602477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1603477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri GribenkoTEST_F(CommentLexerTest, HTMLCharacterReferences7) { 1604477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko const char *Source = "// *"; 1605477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1606477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko std::vector<Token> Toks; 1607477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1608477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko lexString(Source, Toks); 1609477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1610477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(3U, Toks.size()); 1611477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1612477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1613477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1614477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1615477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1616477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("*"), Toks[1].getText()); 1617477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1618477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 1619477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko} 1620477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1621477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri GribenkoTEST_F(CommentLexerTest, HTMLCharacterReferences8) { 1622477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko const char *Source = "// *a"; 1623477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1624477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko std::vector<Token> Toks; 1625477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1626477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko lexString(Source, Toks); 1627477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1628477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(4U, Toks.size()); 1629477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1630477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1631477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1632477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1633477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1634477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("*"), Toks[1].getText()); 1635477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1636477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 1637477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("a"), Toks[2].getText()); 1638477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1639477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 1640477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko} 1641477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1642477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri GribenkoTEST_F(CommentLexerTest, HTMLCharacterReferences9) { 1643477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko const char *Source = "// &#x"; 1644477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1645477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko std::vector<Token> Toks; 1646477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1647477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko lexString(Source, Toks); 1648477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1649477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(3U, Toks.size()); 1650477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1651477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1652477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1653477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1654477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1655477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("&#x"), Toks[1].getText()); 1656477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1657477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 1658477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko} 1659477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1660477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri GribenkoTEST_F(CommentLexerTest, HTMLCharacterReferences10) { 1661477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko const char *Source = "// &#xz"; 1662477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1663477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko std::vector<Token> Toks; 1664477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1665477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko lexString(Source, Toks); 1666477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1667477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(4U, Toks.size()); 1668477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1669477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1670477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1671477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1672477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1673477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("&#x"), Toks[1].getText()); 1674477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1675477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 1676477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("z"), Toks[2].getText()); 1677477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1678477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 1679477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko} 1680477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1681477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri GribenkoTEST_F(CommentLexerTest, HTMLCharacterReferences11) { 1682477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko const char *Source = "// «"; 1683477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1684477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko std::vector<Token> Toks; 1685477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1686477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko lexString(Source, Toks); 1687477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1688477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(3U, Toks.size()); 1689477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1690477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1691477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1692477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1693477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1694477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("«"), Toks[1].getText()); 1695477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1696477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 1697477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko} 1698477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1699477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri GribenkoTEST_F(CommentLexerTest, HTMLCharacterReferences12) { 1700477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko const char *Source = "// «z"; 1701477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1702477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko std::vector<Token> Toks; 1703477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1704477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko lexString(Source, Toks); 1705477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1706477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(4U, Toks.size()); 1707477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1708477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1709477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1710477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1711477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1712477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("«"), Toks[1].getText()); 1713477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1714477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 1715477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("z"), Toks[2].getText()); 1716477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1717477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 1718477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko} 1719477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1720477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri GribenkoTEST_F(CommentLexerTest, HTMLCharacterReferences13) { 1721477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko const char *Source = "// &"; 1722477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1723477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko std::vector<Token> Toks; 1724477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1725477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko lexString(Source, Toks); 1726477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1727477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(3U, Toks.size()); 1728477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1729477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1730477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1731477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1732477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1733477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("&"), Toks[1].getText()); 1734477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1735477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 1736477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko} 1737477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1738477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri GribenkoTEST_F(CommentLexerTest, HTMLCharacterReferences14) { 1739477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko const char *Source = "// &<"; 1740477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1741477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko std::vector<Token> Toks; 1742477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1743477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko lexString(Source, Toks); 1744477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1745477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(4U, Toks.size()); 1746477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1747477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1748477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1749477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1750477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1751477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("&"), Toks[1].getText()); 1752477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1753477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 1754477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("<"), Toks[2].getText()); 1755477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1756477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 1757477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko} 1758477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1759477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri GribenkoTEST_F(CommentLexerTest, HTMLCharacterReferences15) { 1760477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko const char *Source = "// & meow"; 1761477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1762477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko std::vector<Token> Toks; 1763477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1764477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko lexString(Source, Toks); 1765477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1766477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(4U, Toks.size()); 1767477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1768477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1769477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1770477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1771477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1772477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("&"), Toks[1].getText()); 1773477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1774477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 1775477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef(" meow"), Toks[2].getText()); 1776477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1777477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 1778477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko} 1779477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1780477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri GribenkoTEST_F(CommentLexerTest, HTMLCharacterReferences16) { 1781477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko const char *Sources[] = { 1782477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko "// =", 1783477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko "// =", 178444a3ddbf7d2f46a002b5e85b240359c435509b4eDmitri Gribenko "// =", 178544a3ddbf7d2f46a002b5e85b240359c435509b4eDmitri Gribenko "// =" 1786477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko }; 1787477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1788477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko for (size_t i = 0, e = array_lengthof(Sources); i != e; i++) { 1789477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko std::vector<Token> Toks; 1790477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1791477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko lexString(Sources[i], Toks); 1792477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1793477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(3U, Toks.size()); 1794477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1795477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 1796477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef(" "), Toks[0].getText()); 1797477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1798477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::text, Toks[1].getKind()); 1799477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(StringRef("="), Toks[1].getText()); 1800477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 1801477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko ASSERT_EQ(tok::newline, Toks[2].getKind()); 1802477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko } 1803477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko} 1804477a9f58c1b197f315befd03b42a8a0b3a2f0ff9Dmitri Gribenko 18052d44d77fed3200e2eff289f55493317e90d3398cDmitri GribenkoTEST_F(CommentLexerTest, MultipleComments) { 18062d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko const char *Source = 18072d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "// Aaa\n" 18082d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/// Bbb\n" 18092d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/* Ccc\n" 18102d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko " * Ddd*/\n" 18112d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko "/** Eee*/"; 18122d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 18132d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko std::vector<Token> Toks; 18142d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 18152d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko lexString(Source, Toks); 18162d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 18172d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(12U, Toks.size()); 18182d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 18192d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[0].getKind()); 18202d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Aaa"), Toks[0].getText()); 18212d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[1].getKind()); 18222d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 18232d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[2].getKind()); 18242d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Bbb"), Toks[2].getText()); 18252d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[3].getKind()); 18262d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 18272d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[4].getKind()); 18282d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Ccc"), Toks[4].getText()); 18292d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[5].getKind()); 18302d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 18312d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[6].getKind()); 18322d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Ddd"), Toks[6].getText()); 18332d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[7].getKind()); 18342d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[8].getKind()); 18352d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 18362d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::text, Toks[9].getKind()); 18372d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(StringRef(" Eee"), Toks[9].getText()); 18382d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 18392d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[10].getKind()); 18402d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko ASSERT_EQ(tok::newline, Toks[11].getKind()); 18412d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} 18422d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 18432d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} // end namespace comments 18442d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko} // end namespace clang 18452d44d77fed3200e2eff289f55493317e90d3398cDmitri Gribenko 1846