package org.erlide.ui.editors.erl.scanner; import static org.junit.Assert.assertEquals; import org.eclipse.jface.text.rules.ICharacterScanner; import org.eclipse.jface.text.rules.IToken; import org.eclipse.jface.text.rules.Token; import org.junit.Test; public class ErlangCharRuleTest { public class StringCharacterScanner implements ICharacterScanner { private final String content; private int index; public StringCharacterScanner(final String content) { this.content = content; index = 0; } public String getCurrentContent() { return content.substring(index); } public String getScannedContent() { return content.substring(0, index); } @Override public char[][] getLegalLineDelimiters() { return null; } @Override public int getColumn() { return 0; } @Override public int read() { if (index > content.length() - 1) { return -1; } return content.charAt(index++); } @Override public void unread() { index--; } } private final IToken token = new Token("test"); StringCharacterScanner scanner; @Test public void noChar() { final ErlangCharRule rule = new ErlangCharRule(token); scanner = new StringCharacterScanner("aa"); final IToken tk = rule.evaluate(scanner); assertEquals(Token.UNDEFINED, tk); assertEquals("aa", scanner.getCurrentContent()); assertEquals("", scanner.getScannedContent()); } @Test public void simpleChar() { final ErlangCharRule rule = new ErlangCharRule(token); scanner = new StringCharacterScanner("$z "); final IToken tk = rule.evaluate(scanner); assertEquals(token, tk); assertEquals(" ", scanner.getCurrentContent()); assertEquals("$z", scanner.getScannedContent()); } @Test public void simpleChar_1() { final ErlangCharRule rule = new ErlangCharRule(token); scanner = new StringCharacterScanner("$z"); final IToken tk = rule.evaluate(scanner); assertEquals(token, tk); assertEquals("", scanner.getCurrentContent()); assertEquals("$z", scanner.getScannedContent()); } @Test public void escapedChar() { final ErlangCharRule rule = new ErlangCharRule(token); scanner = new StringCharacterScanner("$\\b"); final IToken tk = rule.evaluate(scanner); assertEquals(token, tk); assertEquals("", scanner.getCurrentContent()); assertEquals("$\\b", scanner.getScannedContent()); } @Test public void octal_1() { final ErlangCharRule rule = new ErlangCharRule(token); scanner = new StringCharacterScanner("$\\123z "); final IToken tk = rule.evaluate(scanner); assertEquals(token, tk); assertEquals("z ", scanner.getCurrentContent()); assertEquals("$\\123", scanner.getScannedContent()); } @Test public void octal_2() { final ErlangCharRule rule = new ErlangCharRule(token); scanner = new StringCharacterScanner("$\\1z23z "); final IToken tk = rule.evaluate(scanner); assertEquals(token, tk); assertEquals("z23z ", scanner.getCurrentContent()); assertEquals("$\\1", scanner.getScannedContent()); } @Test public void octal_3() { final ErlangCharRule rule = new ErlangCharRule(token); scanner = new StringCharacterScanner("$\\12"); final IToken tk = rule.evaluate(scanner); assertEquals(token, tk); assertEquals("", scanner.getCurrentContent()); assertEquals("$\\12", scanner.getScannedContent()); } @Test public void hex_1() { final ErlangCharRule rule = new ErlangCharRule(token); scanner = new StringCharacterScanner("$\\x123z "); final IToken tk = rule.evaluate(scanner); assertEquals(token, tk); assertEquals("3z ", scanner.getCurrentContent()); assertEquals("$\\x12", scanner.getScannedContent()); } @Test public void hex_2() { final ErlangCharRule rule = new ErlangCharRule(token); scanner = new StringCharacterScanner("$\\x{cFE1}23z "); final IToken tk = rule.evaluate(scanner); assertEquals(token, tk); assertEquals("23z ", scanner.getCurrentContent()); assertEquals("$\\x{cFE1}", scanner.getScannedContent()); } @Test public void hex_3() { final ErlangCharRule rule = new ErlangCharRule(token); scanner = new StringCharacterScanner("$\\x{cFzE1}23z "); final IToken tk = rule.evaluate(scanner); assertEquals(token, tk); assertEquals("{cFzE1}23z ", scanner.getCurrentContent()); assertEquals("$\\x", scanner.getScannedContent()); } @Test public void hex_4() { final ErlangCharRule rule = new ErlangCharRule(token); scanner = new StringCharacterScanner("$\\x{cF}"); final IToken tk = rule.evaluate(scanner); assertEquals(token, tk); assertEquals("", scanner.getCurrentContent()); assertEquals("$\\x{cF}", scanner.getScannedContent()); } @Test public void hex_5() { final ErlangCharRule rule = new ErlangCharRule(token); scanner = new StringCharacterScanner("$\\x12"); final IToken tk = rule.evaluate(scanner); assertEquals(token, tk); assertEquals("", scanner.getCurrentContent()); assertEquals("$\\x12", scanner.getScannedContent()); } @Test public void hex_6() { final ErlangCharRule rule = new ErlangCharRule(token); scanner = new StringCharacterScanner("$\\x1"); final IToken tk = rule.evaluate(scanner); assertEquals(token, tk); assertEquals("", scanner.getCurrentContent()); assertEquals("$\\x1", scanner.getScannedContent()); } }