From 24207c3bd894fd7e7857785fd0884a61cc44dafa Mon Sep 17 00:00:00 2001 From: Marja van Aken Date: Thu, 2 Mar 2023 16:11:03 +0100 Subject: [PATCH] -#360: Removed the name from the seq in until to avoid duplicate names. Adjusted the test accordingly. The difference shows that we parse the terminator twice and it has the same name. Co-authored-by: jvdb --- .../java/io/parsingdata/metal/Shorthand.java | 2 +- .../io/parsingdata/metal/token/UntilTest.java | 18 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) 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()); }