Skip to content

Commit 2929d86

Browse files
committed
https://github.com/petitparser/java-petitparser/issues/80
1 parent 6a6cddc commit 2929d86

File tree

2 files changed

+54
-7
lines changed

2 files changed

+54
-7
lines changed

petitparser-core/src/test/java/org/petitparser/Assertions.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,35 @@
66

77
import static org.junit.Assert.assertEquals;
88
import static org.junit.Assert.assertFalse;
9-
import static org.junit.Assert.assertNotNull;
109
import static org.junit.Assert.assertNull;
1110
import static org.junit.Assert.assertTrue;
1211
import static org.junit.Assert.fail;
1312

1413
public class Assertions {
1514

15+
public static void assertAccept(Parser parser, String input) {
16+
assertAccept(parser, input, input.length());
17+
}
18+
19+
public static void assertAccept(Parser parser, String input, int position) {
20+
Result result = parser.parse(input);
21+
String resultToString = result.toString();
22+
assertTrue("Expected parse success, but got " + resultToString, result.isSuccess());
23+
assertEquals("Position", position, result.getPosition());
24+
assertNull("No message expected", result.getMessage());
25+
assertEquals("Fast parse", position, parser.fastParseOn(input, 0));
26+
assertTrue("Accept", parser.accept(input));
27+
}
28+
1629
public static <T> void assertSuccess(Parser parser, String input, T result) {
1730
assertSuccess(parser, input, result, input.length());
1831
}
1932

2033
public static <T> void assertSuccess(
2134
Parser parser, String input, T expected, int position) {
2235
Result result = parser.parse(input);
23-
assertNotNull(result.toString());
24-
assertTrue("Expected parse success", result.isSuccess());
25-
assertFalse("Expected parse success", result.isFailure());
36+
String resultToString = result.toString();
37+
assertTrue("Expected parse success, but got " + resultToString, result.isSuccess());
2638
assertEquals("Position", position, result.getPosition());
2739
assertEquals("Result", expected, result.get());
2840
assertNull("No message expected", result.getMessage());
@@ -47,9 +59,8 @@ public static <T> void assertFailure(
4759
public static <T> void assertFailure(
4860
Parser parser, String input, int position, String message) {
4961
Result result = parser.parse(input);
50-
assertNotNull(result.toString());
51-
assertFalse("Expected parse failure", result.isSuccess());
52-
assertTrue("Expected parse failure", result.isFailure());
62+
String resultToString = result.toString();
63+
assertTrue("Expected parse failure, but got " + resultToString, result.isFailure());
5364
assertEquals("Position", position, result.getPosition());
5465
if (message != null) {
5566
assertEquals("Message expected", message, result.getMessage());

petitparser-core/src/test/java/org/petitparser/RegressionsTest.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
package org.petitparser;
22

33
import org.junit.Test;
4+
import org.petitparser.context.Token;
45
import org.petitparser.parser.Parser;
6+
import org.petitparser.parser.primitive.CharacterParser;
7+
import org.petitparser.parser.primitive.StringParser;
58

9+
import static org.petitparser.Assertions.assertAccept;
10+
import static org.petitparser.Assertions.assertFailure;
611
import static org.petitparser.Assertions.assertSuccess;
712
import static org.petitparser.parser.primitive.CharacterParser.of;
813

@@ -26,4 +31,35 @@ public void testTrimFlatten() {
2631
assertSuccess(parser, " a ", " a ");
2732
assertSuccess(parser, " a ", " a ");
2833
}
34+
35+
// https://github.com/petitparser/java-petitparser/issues/80
36+
Parser createLine(String command) {
37+
return StringParser.of(command + " ")
38+
.seq(CharacterParser.word().plusLazy(Token.NEWLINE_PARSER))
39+
.seq(Token.NEWLINE_PARSER);
40+
}
41+
42+
@Test
43+
public void testGithubIssue80_before() {
44+
Parser parser = createLine("line1")
45+
.seq(createLine("line2").optional())
46+
.seq(createLine("line3"))
47+
.end();
48+
assertAccept(parser, "line1 value\nline3 value\n");
49+
assertAccept(parser, "line1 value\nline2 value\nline3 value\n");
50+
assertFailure(parser, "line1 value\nline2 !\nline3 value\n", 12, "line3 expected");
51+
}
52+
53+
@Test
54+
public void testGithubIssue80_after() {
55+
Parser parser = createLine("line1")
56+
.seq(
57+
createLine("line3")
58+
.or(createLine("line2")
59+
.seq(createLine("line3"))))
60+
.end();
61+
assertAccept(parser, "line1 value\nline3 value\n");
62+
assertAccept(parser, "line1 value\nline2 value\nline3 value\n");
63+
assertFailure(parser, "line1 value\nline2 !\nline3 value\n", 18, "letter or digit expected");
64+
}
2965
}

0 commit comments

Comments
 (0)