runUnitTests static method
void
runUnitTests()
Implementation
static void runUnitTests() {
Lexer lex = Lexer("42 * 3.14158");
check(lex.dequeue(), TokenType.number, "42");
checkLineNum(lex.lineNum, 1);
check(lex.dequeue(), TokenType.opTimes);
check(lex.dequeue(), TokenType.number, "3.14158");
UnitTest.errorIf(!lex.atEnd, "AtEnd not set when it should be", 1);
checkLineNum(lex.lineNum, 1);
lex = Lexer("6*(.1-foo) end if // and a comment!");
check(lex.dequeue(), TokenType.number, "6");
checkLineNum(lex.lineNum, 1);
check(lex.dequeue(), TokenType.opTimes);
check(lex.dequeue(), TokenType.lParen);
check(lex.dequeue(), TokenType.number, ".1");
check(lex.dequeue(), TokenType.opMinus);
check(lex.peek(), TokenType.identifier, "foo");
check(lex.peek(), TokenType.identifier, "foo");
check(lex.dequeue(), TokenType.identifier, "foo");
check(lex.dequeue(), TokenType.rParen);
check(lex.dequeue(), TokenType.keyword, "end if");
check(lex.dequeue(), TokenType.eol);
UnitTest.errorIf(!lex.atEnd, "AtEnd not set when it should be", 2);
checkLineNum(lex.lineNum, 1);
lex = Lexer("\"foo\" \"isn't \"\"real\"\"\" \"now \"\"\"\" double!\"");
check(lex.dequeue(), TokenType.string, "foo");
check(lex.dequeue(), TokenType.string, "isn't \"real\"");
check(lex.dequeue(), TokenType.string, "now \"\" double!");
UnitTest.errorIf(!lex.atEnd, "AtEnd not set when it should be", 3);
lex = Lexer("foo\nbar\rbaz\r\nbamf");
check(lex.dequeue(), TokenType.identifier, "foo");
checkLineNum(lex.lineNum, 1);
check(lex.dequeue(), TokenType.eol);
check(lex.dequeue(), TokenType.identifier, "bar");
checkLineNum(lex.lineNum, 2);
check(lex.dequeue(), TokenType.eol);
check(lex.dequeue(), TokenType.identifier, "baz");
checkLineNum(lex.lineNum, 3);
check(lex.dequeue(), TokenType.eol);
check(lex.dequeue(), TokenType.identifier, "bamf");
checkLineNum(lex.lineNum, 4);
check(lex.dequeue(), TokenType.eol);
UnitTest.errorIf(!lex.atEnd, "AtEnd not set when it should be", 4);
lex = Lexer("x += 42");
check(lex.dequeue(), TokenType.identifier, "x");
checkLineNum(lex.lineNum, 1);
check(lex.dequeue(), TokenType.opAssignPlus);
check(lex.dequeue(), TokenType.number, "42");
UnitTest.errorIf(!lex.atEnd, "AtEnd not set when it should be", 5);
check(lastToken("x=42 // foo"), TokenType.number, "42");
check(lastToken("x = [1, 2, // foo"), TokenType.comma);
check(lastToken("x = [1, 2 // foo"), TokenType.number, "2");
check(
lastToken("x = [1, 2 // foo // and \"more\" foo"),
TokenType.number,
"2",
);
check(lastToken("x = [\"foo\", \"//bar\"]"), TokenType.rSquare);
check(lastToken("print 1 // line 1\nprint 2"), TokenType.number, "2");
check(
lastToken("print \"Hi\"\"Quote\" // foo bar"),
TokenType.string,
"Hi\"Quote",
);
}