javatests/de/jflex/testcase/bol/BolTest.java (122 lines of code) (raw):
/*
* Copyright 2020, Google, LLC.
* SPDX-License-Identifier: BSD-3-Clause
*/
package de.jflex.testcase.bol;
import static com.google.common.truth.Truth.assertThat;
import com.google.common.io.CharSource;
import java.io.IOException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/** Tests BOL and EOL operators. */
public class BolTest {
// standard BOL and EOL tests
BolScanner scanner;
// test BOL in absence of char class for NL characters
Bol2Scanner scanner2;
@Before
public void testMustInitializeScanner() {
scanner = null;
scanner2 = null;
}
@After
public void end() throws Exception {
if (scanner != null) {
assertThat(scanner.yylex()).isEqualTo(State.END_OF_FILE);
}
if (scanner2 != null) {
assertThat(scanner2.yylex()).isEqualTo(State.END_OF_FILE);
}
}
@Test
public void initial() throws Exception {
scanner = createScanner("");
assertThat(scanner.state).isEqualTo(State.INITIAL);
}
@Test
public void bolAndEol() throws Exception {
scanner = createScanner("hello\n");
assertThat(scanner.yylex()).isEqualTo(State.HELLO_AT_BOL_AND_EOL);
assertThat(scanner.yylex()).isEqualTo(State.LINE_FEED);
}
@Test
public void bolAndEol2() throws Exception {
scanner = createScanner("hello\r\n");
assertThat(scanner.yylex()).isEqualTo(State.HELLO_AT_BOL_AND_EOL);
assertThat(scanner.yylex()).isEqualTo(State.OTHER);
assertThat(scanner.yylex()).isEqualTo(State.LINE_FEED);
}
@Test
public void bolAndEol3() throws Exception {
scanner = createScanner("\nhello\r\n");
assertThat(scanner.yylex()).isEqualTo(State.LINE_FEED);
assertThat(scanner.yylex()).isEqualTo(State.HELLO_AT_BOL_AND_EOL);
assertThat(scanner.yylex()).isEqualTo(State.OTHER);
assertThat(scanner.yylex()).isEqualTo(State.LINE_FEED);
}
@Test
public void bolAndEof() throws Exception {
// EOF does not count as EOL. Should it?
scanner = createScanner("hello");
assertThat(scanner.yylex()).isEqualTo(State.HELLO_AT_BOL);
}
@Test
public void eol() throws Exception {
scanner = createScanner(" hello\n");
assertThat(scanner.yylex()).isEqualTo(State.SPACE);
assertThat(scanner.yylex()).isEqualTo(State.SPACE);
assertThat(scanner.yylex()).isEqualTo(State.HELLO_AT_EOL);
assertThat(scanner.yylex()).isEqualTo(State.LINE_FEED);
}
@Test
public void hello() throws Exception {
scanner = createScanner(" hello \n");
assertThat(scanner.yylex()).isEqualTo(State.SPACE);
assertThat(scanner.yylex()).isEqualTo(State.SPACE);
assertThat(scanner.yylex()).isEqualTo(State.HELLO_SIMPLY);
assertThat(scanner.yylex()).isEqualTo(State.SPACE);
assertThat(scanner.yylex()).isEqualTo(State.SPACE);
assertThat(scanner.yylex()).isEqualTo(State.LINE_FEED);
}
@Test
public void bol() throws Exception {
scanner = createScanner("hello \n");
assertThat(scanner.yylex()).isEqualTo(State.HELLO_AT_BOL);
assertThat(scanner.yylex()).isEqualTo(State.SPACE);
assertThat(scanner.yylex()).isEqualTo(State.LINE_FEED);
}
@Test
public void space() throws Exception {
scanner = createScanner(" \n");
assertThat(scanner.yylex()).isEqualTo(State.SPACE);
assertThat(scanner.yylex()).isEqualTo(State.LINE_FEED);
}
@Test
public void other() throws Exception {
scanner = createScanner("abc\n");
assertThat(scanner.yylex()).isEqualTo(State.OTHER);
assertThat(scanner.yylex()).isEqualTo(State.OTHER);
assertThat(scanner.yylex()).isEqualTo(State.OTHER);
assertThat(scanner.yylex()).isEqualTo(State.LINE_FEED);
}
@Test
public void bolNoNLCCL() throws Exception {
scanner2 = createScanner2("hello");
assertThat(scanner2.yylex()).isEqualTo(State.HELLO_AT_BOL);
}
@Test
public void bolNoNLCCL2() throws Exception {
scanner2 = createScanner2("hello\n");
assertThat(scanner2.yylex()).isEqualTo(State.HELLO_AT_BOL);
assertThat(scanner2.yylex()).isEqualTo(State.OTHER);
}
@Test
public void noBolNoNLCCL() throws Exception {
scanner2 = createScanner2("\n hello ");
assertThat(scanner2.yylex()).isEqualTo(State.OTHER);
assertThat(scanner2.yylex()).isEqualTo(State.OTHER);
assertThat(scanner2.yylex()).isEqualTo(State.OTHER);
assertThat(scanner2.yylex()).isEqualTo(State.HELLO_SIMPLY);
assertThat(scanner2.yylex()).isEqualTo(State.OTHER);
assertThat(scanner2.yylex()).isEqualTo(State.OTHER);
}
private static BolScanner createScanner(final String content) throws IOException {
return new BolScanner(CharSource.wrap(content).openStream());
}
private static Bol2Scanner createScanner2(final String content) throws IOException {
return new Bol2Scanner(CharSource.wrap(content).openStream());
}
}