diff --git a/core/src/main/java/io/parsingdata/metal/Shorthand.java b/core/src/main/java/io/parsingdata/metal/Shorthand.java index 11a106dd..94ea1291 100644 --- a/core/src/main/java/io/parsingdata/metal/Shorthand.java +++ b/core/src/main/java/io/parsingdata/metal/Shorthand.java @@ -215,7 +215,7 @@ private Shorthand() {} /** "DEFinition": Instantiates a {@link Until} and its terminator nested in a {@link Seq}. */ - public static Token until(final String name, final ValueExpression initialSize, final ValueExpression stepSize, final ValueExpression maxSize, final Token terminator, final Encoding encoding) { return seq(name, def(name, initialSize, stepSize, maxSize, terminator, encoding), terminator); } + public static Token until(final String name, final ValueExpression initialSize, final ValueExpression stepSize, final ValueExpression maxSize, final Token terminator, final Encoding encoding) { return seq(def(name, initialSize, stepSize, maxSize, terminator, encoding), terminator); } /** "DEFinition": Instantiates a {@link Until} and its terminator nested in a {@link Seq} with {@code encoding = null}. */ public static Token until(final String name, final ValueExpression initialSize, final ValueExpression stepSize, final ValueExpression maxSize, final Token terminator) { return until(name, initialSize, stepSize, maxSize, terminator, null); } diff --git a/core/src/test/java/io/parsingdata/metal/token/UntilTest.java b/core/src/test/java/io/parsingdata/metal/token/UntilTest.java index 483b2c35..e4e47729 100644 --- a/core/src/test/java/io/parsingdata/metal/token/UntilTest.java +++ b/core/src/test/java/io/parsingdata/metal/token/UntilTest.java @@ -43,6 +43,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Optional; +import java.util.function.Function; import io.parsingdata.metal.data.ImmutableList; import io.parsingdata.metal.data.ParseState; @@ -165,23 +166,20 @@ void errorNegativeSize() { @Test public void nameScopeWithUntil() { - final Token terminator = def("terminator", con(1), eq(con(0x00))); - final Token token = seq("struct", until("value", terminator), terminator); - final Optional parse = token.parse(env(stream('d', 'a', 't', 'a', 0, 0))); - assertTrue(parse.isPresent()); - assertEquals(1, getAllValues(parse.get().order, "struct.terminator").size); - assertEquals(1, getAllValues(parse.get().order, "struct.value.value").size); - assertEquals(1, getAllValues(parse.get().order, "struct.value.terminator").size); - assertEquals("data", getAllValues(parse.get().order, "struct.value.value").head.asString()); + assertNameScope(terminator -> until("value", terminator), 2); } @Test public void nameScopeWithDef() { + assertNameScope(terminator -> def("value", terminator), 1); + } + + private static void assertNameScope(final Function tokenProvider, int terminatorCount) { final Token terminator = def("terminator", con(1), eq(con(0x00))); - final Token token = seq("struct", def("value", terminator), terminator); + final Token token = seq("struct", tokenProvider.apply(terminator), terminator); final Optional parse = token.parse(env(stream('d', 'a', 't', 'a', 0, 0))); assertTrue(parse.isPresent()); - assertEquals(1, getAllValues(parse.get().order, "struct.terminator").size); + assertEquals(terminatorCount, getAllValues(parse.get().order, "struct.terminator").size); assertEquals(1, getAllValues(parse.get().order, "struct.value").size); assertEquals("data", getAllValues(parse.get().order, "struct.value").head.asString()); }