blob: 4a11324e1c9ddd7bb812c28fcd9417a50c376935 [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2015, 2021 Stephan Wahlbrink and others.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
package org.eclipse.statet.r.core.rsource;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.eclipse.statet.r.core.rsource.RSourceConstants.STATUS12_SYNTAX_TOKEN_NOT_CLOSED;
import org.junit.jupiter.api.Test;
import org.eclipse.statet.jcommons.lang.NonNullByDefault;
import org.eclipse.statet.jcommons.text.core.input.StringParserInput;
import org.eclipse.statet.r.core.rlang.RTerminal;
@NonNullByDefault
public class RLexerTest {
private final StringParserInput input= new StringParserInput();
public RLexerTest() {
}
protected int getConfig() {
return 0;
}
@Test
public void empty() {
final RLexer lexer= new RLexer(getConfig());
lexer.reset(this.input.reset("").init());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchWhitespace() {
final RLexer lexer= new RLexer(getConfig());
lexer.reset(this.input.reset(" \t").init());
assertEquals(RTerminal.BLANK, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(0, lexer.getOffset());
assertEquals(2, lexer.getLength());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void skipWhitespace() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" \t").init());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchLinebreak() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" \n ").init());
assertEquals(RTerminal.LINEBREAK, lexer.next());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchComment() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" # comment").init());
assertEquals(RTerminal.COMMENT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchComment_Linebreak() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" # comment\n ").init());
assertEquals(RTerminal.COMMENT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.LINEBREAK, lexer.next());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchRoxygenComment() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset("#' comment").init());
assertEquals(RTerminal.ROXYGEN_COMMENT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void skipComment() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE | RLexer.SKIP_COMMENT);
lexer.reset(this.input.reset(" # comment\n ").init());
assertEquals(RTerminal.LINEBREAK, lexer.next());
assertEquals(RTerminal.EOF, lexer.next());
lexer.reset(this.input.reset(" #' comment").init());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchBlockOpen() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" { ").init());
assertEquals(RTerminal.BLOCK_OPEN, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchBlockClose() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" } ").init());
assertEquals(RTerminal.BLOCK_CLOSE, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchGroupOpen() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" ( ").init());
assertEquals(RTerminal.GROUP_OPEN, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchGroupClose() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" ) ").init());
assertEquals(RTerminal.GROUP_CLOSE, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchSubIndexedSOpen() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" [ ").init());
assertEquals(RTerminal.SUB_INDEXED_S_OPEN, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchSubIndexedDOpen() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" [[ ").init());
assertEquals(RTerminal.SUB_INDEXED_D_OPEN, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchSubIndexedClose() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" ] ").init());
assertEquals(RTerminal.SUB_INDEXED_CLOSE, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchSubNamedPart() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" $ ").init());
assertEquals(RTerminal.SUB_NAMED_PART, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchSubSlotPart() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" @ ").init());
assertEquals(RTerminal.SUB_NAMED_SLOT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNsGet() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" :: ").init());
assertEquals(RTerminal.NS_GET, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNsGetInt() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" ::: ").init());
assertEquals(RTerminal.NS_GET_INT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchPlus() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" + ").init());
assertEquals(RTerminal.PLUS, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchMinus() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" - ").init());
assertEquals(RTerminal.MINUS, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchMult() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" * ").init());
assertEquals(RTerminal.MULT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchDiv() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" / ").init());
assertEquals(RTerminal.DIV, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchOr() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" | ").init());
assertEquals(RTerminal.OR, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchOrD() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" || ").init());
assertEquals(RTerminal.OR_D, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchAnd() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" & ").init());
assertEquals(RTerminal.AND, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchAndD() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" && ").init());
assertEquals(RTerminal.AND_D, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchNot() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" ! ").init());
assertEquals(RTerminal.NOT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchPower() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" ^ ").init());
assertEquals(RTerminal.POWER, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchSeq() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" : ").init());
assertEquals(RTerminal.SEQ, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchSpecial() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" %/% ").init());
assertEquals(RTerminal.SPECIAL, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("/", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchSpecial_empty() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" %% ").init());
assertEquals(RTerminal.SPECIAL, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals("", lexer.getText());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchSpecial_notClosed() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" %/ ").init());
assertEquals(RTerminal.SPECIAL, lexer.next());
assertEquals(STATUS12_SYNTAX_TOKEN_NOT_CLOSED, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
lexer.reset(this.input.reset(" %/ \n%").init());
assertEquals(RTerminal.SPECIAL, lexer.next());
assertEquals(STATUS12_SYNTAX_TOKEN_NOT_CLOSED, lexer.getFlags());
assertEquals(RTerminal.LINEBREAK, lexer.next());
}
@Test
public void matchQuestionmark() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" ? ").init());
assertEquals(RTerminal.QUESTIONMARK, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchComma() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" , ").init());
assertEquals(RTerminal.COMMA, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchSemi() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" ; ").init());
assertEquals(RTerminal.SEMI, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchArrowLeftS() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" <- ").init());
assertEquals(RTerminal.ARROW_LEFT_S, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchArrowLeftD() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" <<- ").init());
assertEquals(RTerminal.ARROW_LEFT_D, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchArrowRightS() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" -> ").init());
assertEquals(RTerminal.ARROW_RIGHT_S, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchArrowRightD() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" ->> ").init());
assertEquals(RTerminal.ARROW_RIGHT_D, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchEqual() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" = ").init());
assertEquals(RTerminal.EQUAL, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchColonEqual() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE | RLexer.ENABLE_COLON_EQUAL);
lexer.reset(this.input.reset(" := ").init());
assertEquals(RTerminal.COLON_EQUAL, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchColonEqual_disabled() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" := ").init());
assertEquals(RTerminal.SEQ, lexer.next());
assertEquals(RTerminal.EQUAL, lexer.next());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchTilde() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" ~ ").init());
assertEquals(RTerminal.TILDE, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchRelNE() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" != ").init());
assertEquals(RTerminal.REL_NE, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchRelEQ() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" == ").init());
assertEquals(RTerminal.REL_EQ, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchRelLT() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" < ").init());
assertEquals(RTerminal.REL_LT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchRelLE() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" <= ").init());
assertEquals(RTerminal.REL_LE, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchRelGT() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" > ").init());
assertEquals(RTerminal.REL_GT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchRelGE() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" >= ").init());
assertEquals(RTerminal.REL_GE, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_if() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" if ").init());
assertEquals(RTerminal.IF, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_else() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" else ").init());
assertEquals(RTerminal.ELSE, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_for() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" for ").init());
assertEquals(RTerminal.FOR, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_in() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" in ").init());
assertEquals(RTerminal.IN, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_while() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" while ").init());
assertEquals(RTerminal.WHILE, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_repeat() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" repeat ").init());
assertEquals(RTerminal.REPEAT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_next() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" next ").init());
assertEquals(RTerminal.NEXT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_break() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" break ").init());
assertEquals(RTerminal.BREAK, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_function() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" function ").init());
assertEquals(RTerminal.FUNCTION, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_TRUE() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" TRUE ").init());
assertEquals(RTerminal.TRUE, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_FALSE() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" FALSE ").init());
assertEquals(RTerminal.FALSE, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_NA() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" NA ").init());
assertEquals(RTerminal.NA, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_NA_real() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" NA_real_ ").init());
assertEquals(RTerminal.NA_REAL, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_NA_integer() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" NA_integer_ ").init());
assertEquals(RTerminal.NA_INT, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_NA_complex() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" NA_complex_ ").init());
assertEquals(RTerminal.NA_CPLX, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_NA_character() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" NA_character_ ").init());
assertEquals(RTerminal.NA_CHAR, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_NULL() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" NULL ").init());
assertEquals(RTerminal.NULL, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_NaN() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" NaN ").init());
assertEquals(RTerminal.NAN, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
@Test
public void matchKey_Inf() {
final RLexer lexer= new RLexer(getConfig() | RLexer.SKIP_WHITESPACE);
lexer.reset(this.input.reset(" Inf ").init());
assertEquals(RTerminal.INF, lexer.next());
assertEquals(0, lexer.getFlags());
assertEquals(RTerminal.EOF, lexer.next());
}
}