/*
Ousía
Copyright (C) 2014 Benjamin Paaßen, Andreas Stöckel
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
#include
#include
namespace ousia {
TEST(TokenizedData, dataWhitespacePreserve)
{
TokenizedData data;
ASSERT_EQ(16U, data.append(" test1 test2 "));
// 0123456789012345
// 0 1
Token token;
ASSERT_TRUE(data.next(token, WhitespaceMode::PRESERVE));
EXPECT_EQ(Tokens::Data, token.id);
EXPECT_EQ(" test1 test2 ", token.content);
EXPECT_EQ(0U, token.getLocation().getStart());
EXPECT_EQ(16U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.next(token, WhitespaceMode::PRESERVE));
}
TEST(TokenizedData, dataWhitespaceTrim)
{
TokenizedData data;
ASSERT_EQ(16U, data.append(" test1 test2 "));
// 0123456789012345
// 0 1
Token token;
ASSERT_TRUE(data.next(token, WhitespaceMode::TRIM));
EXPECT_EQ(Tokens::Data, token.id);
EXPECT_EQ("test1 test2", token.content);
EXPECT_EQ(1U, token.getLocation().getStart());
EXPECT_EQ(14U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.next(token, WhitespaceMode::TRIM));
}
TEST(TokenizedData, dataWhitespaceCollapse)
{
TokenizedData data;
ASSERT_EQ(16U, data.append(" test1 test2 "));
// 0123456789012345
// 0 1
Token token;
ASSERT_TRUE(data.next(token, WhitespaceMode::COLLAPSE));
EXPECT_EQ(Tokens::Data, token.id);
EXPECT_EQ("test1 test2", token.content);
EXPECT_EQ(1U, token.getLocation().getStart());
EXPECT_EQ(14U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.next(token, WhitespaceMode::COLLAPSE));
}
TEST(TokenizedData, singleToken)
{
TokenizedData data;
ASSERT_EQ(2U, data.append("$$"));
data.mark(5, 0, 2);
data.enableToken(5);
Token token;
ASSERT_TRUE(data.next(token, WhitespaceMode::PRESERVE));
EXPECT_EQ(5U, token.id);
EXPECT_EQ("$$", token.content);
EXPECT_EQ(0U, token.getLocation().getStart());
EXPECT_EQ(2U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.next(token, WhitespaceMode::PRESERVE));
}
TEST(TokenizedData, singleDisabledToken)
{
TokenizedData data;
ASSERT_EQ(2U, data.append("$$"));
data.mark(5, 0, 2);
Token token;
ASSERT_TRUE(data.next(token, WhitespaceMode::PRESERVE));
EXPECT_EQ(Tokens::Data, token.id);
EXPECT_EQ("$$", token.content);
EXPECT_EQ(0U, token.getLocation().getStart());
EXPECT_EQ(2U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.next(token, WhitespaceMode::PRESERVE));
}
TEST(TokenizedData, dualToken)
{
TokenizedData data;
ASSERT_EQ(2U, data.append("$$"));
data.mark(6, 0, 1);
data.mark(5, 0, 2);
data.mark(6, 1, 1);
data.enableToken(5);
data.enableToken(6);
Token token;
ASSERT_TRUE(data.next(token, WhitespaceMode::PRESERVE));
EXPECT_EQ(5U, token.id);
EXPECT_EQ("$$", token.content);
EXPECT_EQ(0U, token.getLocation().getStart());
EXPECT_EQ(2U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.next(token, WhitespaceMode::PRESERVE));
}
TEST(TokenizedData, dualTokenShorterEnabled)
{
TokenizedData data;
ASSERT_EQ(2U, data.append("$$"));
data.mark(6, 0, 1);
data.mark(5, 0, 2);
data.mark(6, 1, 1);
data.enableToken(6);
Token token;
ASSERT_TRUE(data.next(token, WhitespaceMode::PRESERVE));
EXPECT_EQ(6U, token.id);
EXPECT_EQ("$", token.content);
EXPECT_EQ(0U, token.getLocation().getStart());
EXPECT_EQ(1U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_TRUE(data.next(token, WhitespaceMode::PRESERVE));
EXPECT_EQ(6U, token.id);
EXPECT_EQ("$", token.content);
EXPECT_EQ(1U, token.getLocation().getStart());
EXPECT_EQ(2U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.next(token, WhitespaceMode::PRESERVE));
}
TEST(TokenizedData, dualTokenLongerEnabled)
{
TokenizedData data;
ASSERT_EQ(2U, data.append("$$"));
data.mark(5, 0, 2);
data.enableToken(5);
Token token;
ASSERT_TRUE(data.next(token, WhitespaceMode::PRESERVE));
EXPECT_EQ(5U, token.id);
EXPECT_EQ("$$", token.content);
EXPECT_EQ(0U, token.getLocation().getStart());
EXPECT_EQ(2U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.next(token, WhitespaceMode::PRESERVE));
}
TEST(TokenizedData, tokensAndDataPreserveWhitespace)
{
TokenizedData data;
ASSERT_EQ(10U, data.append("$$ test $$"));
// 0123456789
data.mark(5, 0, 2);
data.mark(5, 2);
data.enableToken(5);
Token token;
ASSERT_TRUE(data.next(token, WhitespaceMode::PRESERVE));
EXPECT_EQ(5U, token.id);
EXPECT_EQ("$$", token.content);
EXPECT_EQ(0U, token.getLocation().getStart());
EXPECT_EQ(2U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_TRUE(data.next(token, WhitespaceMode::PRESERVE));
EXPECT_EQ(Tokens::Data, token.id);
EXPECT_EQ(" test ", token.content);
EXPECT_EQ(2U, token.getLocation().getStart());
EXPECT_EQ(8U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_TRUE(data.next(token, WhitespaceMode::PRESERVE));
EXPECT_EQ(5U, token.id);
EXPECT_EQ("$$", token.content);
EXPECT_EQ(8U, token.getLocation().getStart());
EXPECT_EQ(10U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.next(token, WhitespaceMode::PRESERVE));
}
TEST(TokenizedData, tokensAndDataTrimWhitespace)
{
TokenizedData data;
ASSERT_EQ(10U, data.append("$$ test $$"));
// 0123456789
data.mark(5, 0, 2);
data.mark(5, 2);
data.enableToken(5);
Token token;
ASSERT_TRUE(data.next(token, WhitespaceMode::TRIM));
EXPECT_EQ(5U, token.id);
EXPECT_EQ("$$", token.content);
EXPECT_EQ(0U, token.getLocation().getStart());
EXPECT_EQ(2U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_TRUE(data.next(token, WhitespaceMode::TRIM));
EXPECT_EQ(Tokens::Data, token.id);
EXPECT_EQ("test", token.content);
EXPECT_EQ(3U, token.getLocation().getStart());
EXPECT_EQ(7U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_TRUE(data.next(token, WhitespaceMode::TRIM));
EXPECT_EQ(5U, token.id);
EXPECT_EQ("$$", token.content);
EXPECT_EQ(8U, token.getLocation().getStart());
EXPECT_EQ(10U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.next(token, WhitespaceMode::TRIM));
}
TEST(TokenizedData, tokensAndDataCollapseWhitespace)
{
TokenizedData data;
ASSERT_EQ(10U, data.append("$$ test $$"));
// 0123456789
data.mark(5, 0, 2);
data.mark(5, 2);
data.enableToken(5);
Token token;
ASSERT_TRUE(data.next(token, WhitespaceMode::COLLAPSE));
EXPECT_EQ(5U, token.id);
EXPECT_EQ("$$", token.content);
EXPECT_EQ(0U, token.getLocation().getStart());
EXPECT_EQ(2U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_TRUE(data.next(token, WhitespaceMode::COLLAPSE));
EXPECT_EQ(Tokens::Data, token.id);
EXPECT_EQ("test", token.content);
EXPECT_EQ(3U, token.getLocation().getStart());
EXPECT_EQ(7U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_TRUE(data.next(token, WhitespaceMode::COLLAPSE));
EXPECT_EQ(5U, token.id);
EXPECT_EQ("$$", token.content);
EXPECT_EQ(8U, token.getLocation().getStart());
EXPECT_EQ(10U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.next(token, WhitespaceMode::COLLAPSE));
}
TEST(TokenizedData, tokensAndWhitespacePreserveWhitespace)
{
TokenizedData data;
ASSERT_EQ(10U, data.append("$$ $$"));
// 0123456789
data.mark(5, 0, 2);
data.mark(5, 2);
data.enableToken(5);
Token token;
ASSERT_TRUE(data.next(token, WhitespaceMode::PRESERVE));
EXPECT_EQ(0U, token.getLocation().getStart());
EXPECT_EQ(2U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_TRUE(data.next(token, WhitespaceMode::PRESERVE));
EXPECT_EQ(Tokens::Data, token.id);
EXPECT_EQ(" ", token.content);
EXPECT_EQ(2U, token.getLocation().getStart());
EXPECT_EQ(8U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_TRUE(data.next(token, WhitespaceMode::PRESERVE));
EXPECT_EQ(5U, token.id);
EXPECT_EQ("$$", token.content);
EXPECT_EQ(8U, token.getLocation().getStart());
EXPECT_EQ(10U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.next(token, WhitespaceMode::PRESERVE));
}
TEST(TokenizedData, tokensAndWhitespaceTrimWhitespace)
{
TokenizedData data;
ASSERT_EQ(10U, data.append("$$ $$"));
// 0123456789
data.mark(5, 0, 2);
data.mark(5, 2);
data.enableToken(5);
Token token;
ASSERT_TRUE(data.next(token, WhitespaceMode::TRIM));
EXPECT_EQ(0U, token.getLocation().getStart());
EXPECT_EQ(2U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_TRUE(data.next(token, WhitespaceMode::TRIM));
EXPECT_EQ(5U, token.id);
EXPECT_EQ("$$", token.content);
EXPECT_EQ(8U, token.getLocation().getStart());
EXPECT_EQ(10U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.next(token, WhitespaceMode::TRIM));
}
TEST(TokenizedData, tokensAndWhitespaceCollapseWhitespace)
{
TokenizedData data;
ASSERT_EQ(10U, data.append("$$ $$"));
// 0123456789
data.mark(5, 0, 2);
data.mark(5, 2);
data.enableToken(5);
Token token;
ASSERT_TRUE(data.next(token, WhitespaceMode::COLLAPSE));
EXPECT_EQ(0U, token.getLocation().getStart());
EXPECT_EQ(2U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_TRUE(data.next(token, WhitespaceMode::COLLAPSE));
EXPECT_EQ(5U, token.id);
EXPECT_EQ("$$", token.content);
EXPECT_EQ(8U, token.getLocation().getStart());
EXPECT_EQ(10U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.next(token, WhitespaceMode::COLLAPSE));
}
TEST(TokenizedData, textPreserveWhitespace)
{
TokenizedData data;
ASSERT_EQ(6U, data.append(" $$ "));
// 012345
data.mark(5, 2, 2);
data.enableToken(5);
Token token;
ASSERT_TRUE(data.text(token, WhitespaceMode::PRESERVE));
EXPECT_EQ(Tokens::Data, token.id);
EXPECT_EQ(" ", token.content);
EXPECT_EQ(0U, token.getLocation().getStart());
EXPECT_EQ(2U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_TRUE(data.next(token, WhitespaceMode::PRESERVE));
EXPECT_EQ(5U, token.id);
EXPECT_EQ("$$", token.content);
EXPECT_EQ(2U, token.getLocation().getStart());
EXPECT_EQ(4U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_TRUE(data.text(token, WhitespaceMode::PRESERVE));
EXPECT_EQ(Tokens::Data, token.id);
EXPECT_EQ(" ", token.content);
EXPECT_EQ(4U, token.getLocation().getStart());
EXPECT_EQ(6U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.text(token, WhitespaceMode::PRESERVE));
ASSERT_FALSE(data.next(token, WhitespaceMode::PRESERVE));
}
TEST(TokenizedData, textTrimWhitespace)
{
TokenizedData data;
ASSERT_EQ(6U, data.append(" $$ "));
// 012345
data.mark(5, 2, 2);
data.enableToken(5);
Token token;
ASSERT_FALSE(data.text(token, WhitespaceMode::TRIM));
ASSERT_TRUE(data.next(token, WhitespaceMode::TRIM));
EXPECT_EQ(5U, token.id);
EXPECT_EQ("$$", token.content);
EXPECT_EQ(2U, token.getLocation().getStart());
EXPECT_EQ(4U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.text(token, WhitespaceMode::TRIM));
ASSERT_FALSE(data.next(token, WhitespaceMode::TRIM));
}
TEST(TokenizedData, textCollapseWhitespace)
{
TokenizedData data;
ASSERT_EQ(6U, data.append(" $$ "));
// 012345
data.mark(5, 2, 2);
data.enableToken(5);
Token token;
ASSERT_FALSE(data.text(token, WhitespaceMode::COLLAPSE));
ASSERT_TRUE(data.next(token, WhitespaceMode::COLLAPSE));
EXPECT_EQ(5U, token.id);
EXPECT_EQ("$$", token.content);
EXPECT_EQ(2U, token.getLocation().getStart());
EXPECT_EQ(4U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.text(token, WhitespaceMode::COLLAPSE));
ASSERT_FALSE(data.next(token, WhitespaceMode::COLLAPSE));
}
TEST(TokenizedData, appendChars)
{
TokenizedData data;
ASSERT_EQ(1U, data.append('t', 5, 7));
ASSERT_EQ(2U, data.append('e', 7, 8));
ASSERT_EQ(3U, data.append('s', 8, 10));
ASSERT_EQ(4U, data.append('t', 10, 12));
Token token;
ASSERT_TRUE(data.text(token, WhitespaceMode::COLLAPSE));
EXPECT_EQ(Tokens::Data, token.id);
EXPECT_EQ("test", token.content);
EXPECT_EQ(5U, token.getLocation().getStart());
EXPECT_EQ(12U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.text(token, WhitespaceMode::COLLAPSE));
ASSERT_FALSE(data.next(token, WhitespaceMode::COLLAPSE));
}
TEST(TokenizedData, copy)
{
TokenizedData data;
ASSERT_EQ(7U, data.append(" a $ b "));
// 0123456
data.mark(6, 3, 1);
data.enableToken(6);
Token token;
ASSERT_TRUE(data.text(token, WhitespaceMode::COLLAPSE));
EXPECT_EQ(Tokens::Data, token.id);
EXPECT_EQ("a", token.content);
EXPECT_EQ(1U, token.getLocation().getStart());
EXPECT_EQ(2U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.text(token, WhitespaceMode::COLLAPSE));
TokenizedData dataCopy = data;
ASSERT_TRUE(data.next(token, WhitespaceMode::COLLAPSE));
EXPECT_EQ(6U, token.id);
EXPECT_EQ("$", token.content);
EXPECT_EQ(3U, token.getLocation().getStart());
EXPECT_EQ(4U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_TRUE(dataCopy.next(token, WhitespaceMode::COLLAPSE));
EXPECT_EQ(6U, token.id);
EXPECT_EQ("$", token.content);
EXPECT_EQ(3U, token.getLocation().getStart());
EXPECT_EQ(4U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_TRUE(data.text(token, WhitespaceMode::PRESERVE));
EXPECT_EQ(Tokens::Data, token.id);
EXPECT_EQ(" b ", token.content);
EXPECT_EQ(4U, token.getLocation().getStart());
EXPECT_EQ(7U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(data.next(token));
ASSERT_TRUE(dataCopy.text(token, WhitespaceMode::COLLAPSE));
EXPECT_EQ(Tokens::Data, token.id);
EXPECT_EQ("b", token.content);
EXPECT_EQ(5U, token.getLocation().getStart());
EXPECT_EQ(6U, token.getLocation().getEnd());
EXPECT_EQ(InvalidSourceId, token.getLocation().getSourceId());
ASSERT_FALSE(dataCopy.next(token));
}
}