From 02af075e89fbdeb22575f235a3acb2607e0b4edf Mon Sep 17 00:00:00 2001 From: Ben Culkin Date: Tue, 27 Sep 2022 19:18:09 -0400 Subject: Minor changes --- .../test/java/bjc/test/pratt/PrattParserTest.java | 58 ++++++++++++++++++++++ JPratt/src/test/java/bjc/test/pratt/TestUtils.java | 15 ++++++ .../test/pratt/tokens/StringTokenStreamTest.java | 39 +++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 JPratt/src/test/java/bjc/test/pratt/PrattParserTest.java create mode 100644 JPratt/src/test/java/bjc/test/pratt/TestUtils.java create mode 100644 JPratt/src/test/java/bjc/test/pratt/tokens/StringTokenStreamTest.java (limited to 'JPratt/src/test/java/bjc') diff --git a/JPratt/src/test/java/bjc/test/pratt/PrattParserTest.java b/JPratt/src/test/java/bjc/test/pratt/PrattParserTest.java new file mode 100644 index 0000000..608a137 --- /dev/null +++ b/JPratt/src/test/java/bjc/test/pratt/PrattParserTest.java @@ -0,0 +1,58 @@ +package bjc.test.pratt; + +import static org.junit.Assert.*; +import static bjc.test.pratt.TestUtils.*; + +import java.util.Iterator; + +import org.junit.Test; + +import bjc.data.ArrayIterator; +import bjc.data.SimpleTree; +import bjc.data.Tree; +import bjc.pratt.PrattParser; +import bjc.pratt.commands.CommandResult; +import bjc.pratt.commands.impls.InitialCommands; +import bjc.pratt.commands.impls.NonInitialCommands; +import bjc.pratt.tokens.StringTokenStream; +import bjc.pratt.tokens.Token; +import bjc.utils.parserutils.ParserException; + +@SuppressWarnings("javadoc") +public class PrattParserTest { + + @Test + public void test() { + Iterator> iter = new ArrayIterator<>(token("(int)", "1"), token("+"), + token("(int)", "2")); + StringTokenStream tokens = new StringTokenStream(iter); + + PrattParser parser = new PrattParser<>(); + + parser.addInitialCommand("(int)", InitialCommands.leaf()); + parser.addNonInitialCommand("+", NonInitialCommands.infixLeft(1)); + + try { + TestState state = new TestState(); + + tokens.mark(); + CommandResult result = parser.parseExpression(0, tokens, state, false); + tokens.rollback(); + + assertEquals(CommandResult.Status.SUCCESS, result.status); + Tree> actualTree = result.success(); + + Tree> expectedTree = new SimpleTree<>(token("+"), + new SimpleTree<>(token("(int)", "1")), new SimpleTree<>(token("(int)", "2"))); + + assertEquals(expectedTree, actualTree); + } catch (ParserException e) { + e.printStackTrace(); + } + } + +} + +class TestState { + +} diff --git a/JPratt/src/test/java/bjc/test/pratt/TestUtils.java b/JPratt/src/test/java/bjc/test/pratt/TestUtils.java new file mode 100644 index 0000000..a32349f --- /dev/null +++ b/JPratt/src/test/java/bjc/test/pratt/TestUtils.java @@ -0,0 +1,15 @@ +package bjc.test.pratt; + +import bjc.pratt.tokens.StringToken; +import bjc.pratt.tokens.Token; + +public class TestUtils { + + public static Token token(String val) { + return token(val, val); + } + + public static Token token(String key, String val) { + return new StringToken(key, val); + } +} diff --git a/JPratt/src/test/java/bjc/test/pratt/tokens/StringTokenStreamTest.java b/JPratt/src/test/java/bjc/test/pratt/tokens/StringTokenStreamTest.java new file mode 100644 index 0000000..5bacac7 --- /dev/null +++ b/JPratt/src/test/java/bjc/test/pratt/tokens/StringTokenStreamTest.java @@ -0,0 +1,39 @@ +package bjc.test.pratt.tokens; + +import static org.junit.Assert.*; +import static bjc.test.pratt.TestUtils.*; + +import java.util.Iterator; + +import org.junit.Test; + +import bjc.data.ArrayIterator; +import bjc.pratt.tokens.StringTokenStream; +import bjc.pratt.tokens.Token; + +@SuppressWarnings("javadoc") +public class StringTokenStreamTest { + + @Test + public void test() { + Token tokenA = token("a"); + Token tokenB = token("b"); + Token tokenC = token("c"); + Token tokenD = token("d"); + + Iterator> itr = new ArrayIterator<>(tokenA, tokenB, tokenC, tokenD); + StringTokenStream strm = new StringTokenStream(itr); + + assertNull(strm.current()); + assertEquals(tokenA, strm.next()); + assertEquals(tokenB, strm.next()); + strm.mark(); + assertEquals(tokenC, strm.next()); + assertEquals(tokenD, strm.next()); + strm.rollback(); + assertEquals(tokenC, strm.next()); + assertEquals(tokenD, strm.next()); + assertEquals(token("(end)"), strm.next()); + } + +} -- cgit v1.2.3