Skip to content

Commit

Permalink
-#360: Removed the name from the seq in until to avoid duplicate names.
Browse files Browse the repository at this point in the history
Adjusted the test accordingly. The difference shows that we parse the
terminator twice and it has the same name.

Co-authored-by: jvdb <jeroen@infix.ai>
  • Loading branch information
mvanaken and jvdb committed Mar 2, 2023
1 parent 0e6710d commit 24207c3
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 11 deletions.
2 changes: 1 addition & 1 deletion core/src/main/java/io/parsingdata/metal/Shorthand.java
Original file line number Diff line number Diff line change
Expand Up @@ -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); }
Expand Down
18 changes: 8 additions & 10 deletions core/src/test/java/io/parsingdata/metal/token/UntilTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<ParseState> 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<Token, Token> 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<ParseState> 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());
}
Expand Down

0 comments on commit 24207c3

Please sign in to comment.