Skip to content

Commit

Permalink
Added support for open ended ranges
Browse files Browse the repository at this point in the history
  • Loading branch information
nielsbasjes committed Nov 20, 2018
1 parent d2f5ead commit cccde5f
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 0 deletions.
Expand Up @@ -107,6 +107,8 @@ path : DOT numberRange name=VALUENAME (nextStep=path)? #stepDown
;

numberRange : ( BRACEOPEN rangeStart=NUMBER MINUS rangeEnd=NUMBER BRACECLOSE ) #numberRangeStartToEnd
| ( BRACEOPEN MINUS rangeEnd=NUMBER BRACECLOSE ) #numberRangeOpenStartToEnd
| ( BRACEOPEN rangeStart=NUMBER MINUS BRACECLOSE ) #numberRangeStartToOpenEnd
| ( BRACEOPEN count=NUMBER BRACECLOSE ) #numberRangeSingleValue
| ( BRACEOPEN STAR BRACECLOSE ) #numberRangeAll
| ( ) #numberRangeEmpty
Expand Down
Expand Up @@ -26,8 +26,10 @@
import static nl.basjes.parse.useragent.parser.UserAgentTreeWalkerParser.NumberRangeAllContext;
import static nl.basjes.parse.useragent.parser.UserAgentTreeWalkerParser.NumberRangeContext;
import static nl.basjes.parse.useragent.parser.UserAgentTreeWalkerParser.NumberRangeEmptyContext;
import static nl.basjes.parse.useragent.parser.UserAgentTreeWalkerParser.NumberRangeOpenStartToEndContext;
import static nl.basjes.parse.useragent.parser.UserAgentTreeWalkerParser.NumberRangeSingleValueContext;
import static nl.basjes.parse.useragent.parser.UserAgentTreeWalkerParser.NumberRangeStartToEndContext;
import static nl.basjes.parse.useragent.parser.UserAgentTreeWalkerParser.NumberRangeStartToOpenEndContext;
import static nl.basjes.parse.useragent.parser.UserAgentTreeWalkerParser.StepDownContext;

public final class NumberRangeVisitor extends UserAgentTreeWalkerBaseVisitor<NumberRangeList> {
Expand Down Expand Up @@ -84,6 +86,20 @@ public NumberRangeList visitNumberRangeStartToEnd(NumberRangeStartToEndContext c
Integer.parseInt(ctx.rangeEnd.getText()));
}

@Override
public NumberRangeList visitNumberRangeOpenStartToEnd(NumberRangeOpenStartToEndContext ctx) {
return new NumberRangeList(
1,
Integer.parseInt(ctx.rangeEnd.getText()));
}

@Override
public NumberRangeList visitNumberRangeStartToOpenEnd(NumberRangeStartToOpenEndContext ctx) {
return new NumberRangeList(
Integer.parseInt(ctx.rangeStart.getText()),
getMaxRange(ctx));
}

@Override
public NumberRangeList visitNumberRangeSingleValue(NumberRangeSingleValueContext ctx) {
int value = Integer.parseInt(ctx.count.getText());
Expand Down
Expand Up @@ -52,6 +52,41 @@ public void validateWalkPathSimpleName() {
checkPath(path, expectedHashEntries, expectedWalkList);
}

@Test
public void validateWalkPathSimpleNameOpenStartRange() {
String path = "agent.(-3)product.(1)name";

String[] expectedHashEntries = {
"agent.(1)product.(1)name",
"agent.(2)product.(1)name",
"agent.(3)product.(1)name",
};

String[] expectedWalkList = {
};

checkPath(path, expectedHashEntries, expectedWalkList);
}

@Test
public void validateWalkPathSimpleNameOpenEndRange() {
String path = "agent.(5-)product.(1)name";

String[] expectedHashEntries = {
"agent.(5)product.(1)name",
"agent.(6)product.(1)name",
"agent.(7)product.(1)name",
"agent.(8)product.(1)name",
"agent.(9)product.(1)name",
"agent.(10)product.(1)name",
};

String[] expectedWalkList = {
};

checkPath(path, expectedHashEntries, expectedWalkList);
}

@Test
public void validateWalkPathSimpleNameEquals() {
String path = "agent.(1)product.(1)name=\"Foo\"^.(1-3)version";
Expand Down
2 changes: 2 additions & 0 deletions src/main/docs/Internals-MakingNewRules.md
Expand Up @@ -227,6 +227,8 @@ Previous Sibling | < | agent.(2)product< | agent.(1)product
Down to child | .name | agent.(1)product.version |
Down to specific child | .(2)version | agent.(1)product.(2)version |
Down to specific child range | .(2-3)version | agent.(1)product.(2-3)version |
Down to specific child range | .(2-)version | agent.(1)product.(2-)version |
Down to specific child range | .(-5)version | agent.(1)product.(-5)version |

Comparing values in the tree

Expand Down

0 comments on commit cccde5f

Please sign in to comment.