/*
* Copyright 2015 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.rf.ide.core.testdata.text.reader.recognizer;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.List;
import java.util.regex.Pattern;
import org.junit.After;
import org.junit.Test;
import org.rf.ide.core.test.helpers.ClassFieldCleaner;
import org.rf.ide.core.test.helpers.CombinationGenerator;
import org.rf.ide.core.testdata.text.read.recognizer.ATokenRecognizer;
import org.rf.ide.core.testdata.text.read.recognizer.RobotToken;
import org.rf.ide.core.testdata.text.read.recognizer.RobotTokenType;
@SuppressWarnings("PMD.MethodNamingConventions")
public class ATokenRecognizerTest {
@Test
public void test_hasNextAndNextGetting_twoTimesForFoobar() {
// prepare
Pattern p = Pattern.compile("foobar");
RobotTokenType type = RobotTokenType.EMPTY_CELL;
ATokenRecognizer rec = new DummyTokenRecognizer(p, type);
StringBuilder text = new StringBuilder("foobarfoobar");
// execute & verify
assertThat(rec.hasNext(text, 0, 0)).isTrue();
RobotToken one = rec.next();
assertThat(one.getStartColumn()).isEqualTo(0);
assertThat(one.getText().toString()).isEqualTo("foobar");
assertThat(one.getEndColumn()).isEqualTo("foobar".length());
assertThat(one.getTypes()).containsExactly(type);
assertThat(rec.hasNext(text, 0, 0)).isTrue();
RobotToken two = rec.next();
assertThat(two.getStartColumn()).isEqualTo(6);
assertThat(two.getText().toString()).isEqualTo("foobar");
assertThat(two.getEndColumn()).isEqualTo(6 + "foobar".length());
assertThat(two.getTypes()).containsExactly(type);
}
@Test
public void test_hasNextAndNextGetting_oneTimeForFoobar() {
// prepare
Pattern p = Pattern.compile("foobar");
RobotTokenType type = RobotTokenType.EMPTY_CELL;
ATokenRecognizer rec = new DummyTokenRecognizer(p, type);
StringBuilder text = new StringBuilder("foobar");
// execute & verify
assertThat(rec.hasNext(text, 0, 0)).isTrue();
RobotToken one = rec.next();
assertThat(one.getStartColumn()).isEqualTo(0);
assertThat(one.getText().toString()).isEqualTo(text.toString());
assertThat(one.getEndColumn()).isEqualTo(text.length());
assertThat(one.getTypes()).containsExactly(type);
assertThat(rec.hasNext(new StringBuilder(""), 0, 0)).isFalse();
}
@Test
public void test_createUpperLowerCaseWord_textIsFoobar1AllPossibleCombinations() {
// prepare
String text = "foobar1";
// verify & execute
List<String> combinations = new CombinationGenerator().combinations(text);
for (String comb : combinations) {
assertThat(ATokenRecognizer.createUpperLowerCaseWord(comb)).isEqualTo("[F|f][O|o][O|o][B|b][A|a][R|r][1]");
}
}
@Test
public void test_createUpperLowerCaseWord_textIs1FoobarAllPossibleCombinations() {
// prepare
String text = "1foobar";
// verify & execute
List<String> combinations = new CombinationGenerator().combinations(text);
for (String comb : combinations) {
assertThat(ATokenRecognizer.createUpperLowerCaseWord(comb)).isEqualTo("[1][F|f][O|o][O|o][B|b][A|a][R|r]");
}
}
@Test
public void test_createUpperLowerCaseWord_textIsFoo1barAllPossibleCombinations() {
// prepare
String text = "foo1bar";
// verify & execute
List<String> combinations = new CombinationGenerator().combinations(text);
for (String comb : combinations) {
assertThat(ATokenRecognizer.createUpperLowerCaseWord(comb)).isEqualTo("[F|f][O|o][O|o][1][B|b][A|a][R|r]");
}
}
@Test
public void test_createUpperLowerCaseWord_textIsFoobarAllPossibleCombinations() {
// prepare
String text = "foobar";
// verify & execute
List<String> combinations = new CombinationGenerator().combinations(text);
for (String comb : combinations) {
assertThat(ATokenRecognizer.createUpperLowerCaseWord(comb)).isEqualTo("[F|f][O|o][O|o][B|b][A|a][R|r]");
}
}
@Test
public void test_createUpperLowerCaseWord_textIsFoobar() {
// prepare
String text = "foobar";
// verify & execute
assertThat(ATokenRecognizer.createUpperLowerCaseWord(text)).isEqualTo("[F|f][O|o][O|o][B|b][A|a][R|r]");
}
@Test
public void test_createUpperLowerCaseWord_textIsThreeTimesAmpersand() {
// prepare
String text = "&&&";
String expectedOneIteration = "[&]";
// verify & execute
assertThat(ATokenRecognizer.createUpperLowerCaseWord(text))
.isEqualTo(expectedOneIteration + expectedOneIteration + expectedOneIteration);
}
@Test
public void test_createUpperLowerCaseWord_textIsAmpersand() {
// prepare
String text = "&";
// verify & execute
assertThat(ATokenRecognizer.createUpperLowerCaseWord(text)).isEqualTo("[" + text + "]");
}
@Test
public void test_createUpperLowerCaseWord_textIsThreeTimesNumber() {
// prepare
String text = "111";
String expectedOneIteration = "[1]";
// verify & execute
assertThat(ATokenRecognizer.createUpperLowerCaseWord(text))
.isEqualTo(expectedOneIteration + expectedOneIteration + expectedOneIteration);
}
@Test
public void test_createUpperLowerCaseWord_textIsNumber() {
// prepare
String text = "1";
// verify & execute
assertThat(ATokenRecognizer.createUpperLowerCaseWord(text)).isEqualTo("[" + text + "]");
}
@Test
public void test_createUpperLowerCaseWord_textIsSpace() {
// prepare
String text = " ";
// verify & execute
assertThat(ATokenRecognizer.createUpperLowerCaseWord(text)).isEqualTo("[" + text + "]");
}
@Test
public void test_createUpperLowerCaseWord_textIsEmpty() {
// prepare
String text = "";
// verify & execute
assertThat(ATokenRecognizer.createUpperLowerCaseWord(text)).isEmpty();
}
@Test
public void test_createUpperLowerCaseWord_textIsNull() {
// prepare
String text = null;
// verify & execute
assertThat(ATokenRecognizer.createUpperLowerCaseWord(text)).isEmpty();
}
@Test
public void test_retrieveTypeAndPattern() {
// prepare
Pattern p = Pattern.compile("foobar");
RobotTokenType type = RobotTokenType.EMPTY_CELL;
ATokenRecognizer rec = new DummyTokenRecognizer(p, type);
// execute & verify
assertThat(rec.getProducedType()).isEqualTo(type);
assertThat(rec.getPattern()).isEqualTo(p);
}
@Test
public void test_getProducedType() {
// prepare
Pattern p = Pattern.compile("foobar");
RobotTokenType type = RobotTokenType.EMPTY_CELL;
ATokenRecognizer rec = new DummyTokenRecognizer(p, type);
// execute & verify
assertThat(rec.getProducedType()).isEqualTo(type);
}
@Test
public void test_getPattern() {
// prepare
Pattern p = Pattern.compile("foobar");
RobotTokenType type = RobotTokenType.EMPTY_CELL;
ATokenRecognizer rec = new DummyTokenRecognizer(p, type);
// execute & verify
assertThat(rec.getPattern()).isEqualTo(p);
}
@After
public void tearDown() throws Exception {
ClassFieldCleaner.init(this);
}
private static class DummyTokenRecognizer extends ATokenRecognizer {
public DummyTokenRecognizer(Pattern p, RobotTokenType type) {
super(p, type);
}
@Override
public ATokenRecognizer newInstance() {
// added only for compile
return null;
}
}
}