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",
  );
}