Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ public final class QueryVersionExtractor {
private static final int MINIMUM_PLAUSIBLE_JAVA_RELEASE = 8;
private static final Pattern EXPLICIT_VERSION_PATTERN =
Pattern.compile("\\b(?:java\\s*se|javase|java|jdk)[\\s-]*(\\d{1,3})\\b", Pattern.CASE_INSENSITIVE);
private static final Pattern EXPLICIT_QUANTITY_SUFFIX_PATTERN =
Pattern.compile("[\\s-]+(?:days?|hours?|minutes?|seconds?|times|lines?)\\b", Pattern.CASE_INSENSITIVE);
private static final Pattern EXPLICIT_QUANTITY_SUFFIX_PATTERN = Pattern.compile(
"[\\s-]+(?:days?|hours?|minutes?|seconds?|times|lines?|weeks?|months?|years?)\\b",
Pattern.CASE_INSENSITIVE);
private static final Pattern SHORTHAND_VERSION_PATTERN = Pattern.compile(
"^\\s*(?:,|and\\b|vs(?:\\.|\\b)|versus\\b|\\+|/|&)\\s*(\\d{1,3})\\b", Pattern.CASE_INSENSITIVE);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ void ignoresUnprefixedNumbersOutsideAComparisonChain() {
@Test
void rejectsExplicitQuantityPhrasesWithoutSuppressingReleaseRequests() {
for (String quantityNoun : List.of(
"day", "days", "hour", "hours", "minute", "minutes", "second", "seconds", "times", "line", "lines")) {
"day", "days", "hour", "hours", "minute", "minutes", "second", "seconds", "times", "line", "lines",
"week", "weeks", "month", "months", "year", "years")) {
assertEquals(
List.of(),
QueryVersionExtractor.extractVersionNumbers("Java 100 " + quantityNoun + " of practice"));
Expand All @@ -50,6 +51,28 @@ void rejectsExplicitQuantityPhrasesWithoutSuppressingReleaseRequests() {
assertEquals(List.of("21"), QueryVersionExtractor.extractVersionNumbers("Java 21 time API"));
assertEquals(List.of("25"), QueryVersionExtractor.extractVersionNumbers("Java 25 examples"));
assertEquals(List.of("21"), QueryVersionExtractor.extractVersionNumbers("Java 100 days of code in Java 21"));
assertEquals(List.of("21"), QueryVersionExtractor.extractVersionNumbers("Java 100 months of code in Java 21"));
}

@Test
void rejectsTemporalQuantityPhrasingsWhereJavaPrecedesTheDigits() {
assertEquals(List.of(), QueryVersionExtractor.extractVersionNumbers("switched to Java 6 months ago"));
assertEquals(List.of(), QueryVersionExtractor.extractVersionNumbers("I have Java 5 years of experience"));
assertEquals(List.of(), QueryVersionExtractor.extractVersionNumbers("Java 5 years experience"));
assertEquals(List.of(), QueryVersionExtractor.extractVersionNumbers("been on Java 8 months"));
assertEquals(List.of(), QueryVersionExtractor.extractVersionNumbers("learned Java 4 weeks ago"));
assertEquals(List.of(), QueryVersionExtractor.extractVersionNumbers("ran Java 11 hours straight"));
assertEquals(List.of(), QueryVersionExtractor.extractVersionNumbers("practiced Java 3 years on the side"));
}

@Test
void extractsReleaseRequestsAdjacentToNonQuantitySuffixWords() {
assertEquals(List.of("25"), QueryVersionExtractor.extractVersionNumbers("Java 25 monthly cadence"));
assertEquals(List.of("25"), QueryVersionExtractor.extractVersionNumbers("Java 25 yearly release schedule"));
assertEquals(List.of("25"), QueryVersionExtractor.extractVersionNumbers("Java 25 weekly digest"));
assertEquals(List.of("21"), QueryVersionExtractor.extractVersionNumbers("Java 21 API"));
assertEquals(
List.of("25", "21"), QueryVersionExtractor.extractVersionNumbers("Java 25 examples and Java 21 notes"));
}

@Test
Expand Down