Skip to content
Merged
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
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ buildscript {

plugins {
id "ca.coglinc.javacc" version "2.4.0"
id "org.sonarqube" version "4.0.0.2929"
id "org.sonarqube" version "6.2.0.5505"
}

// Apply the java plugin to add support for Java
Expand Down
13 changes: 6 additions & 7 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=03ec176d388f2aa99defcadc3ac6adf8dd2bce5145a129659537c0874dea5ad1
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
34 changes: 25 additions & 9 deletions src/main/java/ch/poole/openinghoursparser/DateWithOffset.java
Original file line number Diff line number Diff line change
Expand Up @@ -82,16 +82,23 @@ public boolean undefinedDay() {
return day == UNDEFINED_MONTH_DAY && nthWeekDay == null && weekDayOffset == null && varDate == null;
}

/**
* Check for an undefined year value
*
* @return true if the year is undefined
*/
public boolean undefinedYear() {
return year == YearRange.UNDEFINED_YEAR;
}

@Override
public String toString() {
StringBuilder b = new StringBuilder();
if (year != YearRange.UNDEFINED_YEAR) {
if (!undefinedYear()) {
b.append(year);
}
if (month != null) {
if (year != YearRange.UNDEFINED_YEAR) {
b.append(" ");
}
addSpaceIfYearisPresent(b);
b.append(month);
}
if (nthWeekDay != null) {
Expand All @@ -104,14 +111,12 @@ public String toString() {
b.append(']');
}
if (day != UNDEFINED_MONTH_DAY) {
if (year != YearRange.UNDEFINED_YEAR || month != null) {
if (!undefinedYear() || month != null) {
b.append(" ");
}
b.append(String.format(Locale.US, "%02d",day));
b.append(String.format(Locale.US, "%02d", day));
} else if (varDate != null) {
if (year != YearRange.UNDEFINED_YEAR) {
b.append(" ");
}
addSpaceIfYearisPresent(b);
b.append(varDate);
}
// offsets
Expand All @@ -137,6 +142,17 @@ public String toString() {
return b.toString();
}

/**
* Add a space to separate a year value from the following data
*
* @param b the StringBuilder
*/
private void addSpaceIfYearisPresent(@NotNull StringBuilder b) {
if (!undefinedYear()) {
b.append(" ");
}
}

@Override
public boolean equals(Object other) {
if (other instanceof DateWithOffset) {
Expand Down
23 changes: 12 additions & 11 deletions src/main/java/ch/poole/openinghoursparser/OpeningHoursParser.jj
Original file line number Diff line number Diff line change
Expand Up @@ -917,32 +917,33 @@ DateRange date_range() :
)
(
endDate = datewithoffset(startDate.undefinedDay())
(
mdr.interval = interval()
{
if (startDate.day != DateWithOffset.UNDEFINED_MONTH_DAY || endDate.day != DateWithOffset.UNDEFINED_MONTH_DAY || startDate.varDate!=null || endDate.varDate!=null) {
throw new OpeningHoursParseException(tr("interval_not_allowed_here"), token != null ? token.next : null);
}
}
)?
{
if (strict && to != null) {
throw new OpeningHoursParseException(tr("to_instead_of_dash"), token != null ? token.next : null);
}
if ((startDate.undefinedDay() && !endDate.undefinedDay()) || (!startDate.undefinedDay() && endDate.undefinedDay())) {
if ((startDate.undefinedDay() || endDate.undefinedDay()) && mdr.interval == 0 && (!startDate.undefinedYear() || !endDate.undefinedYear())) {
if (strict) {
throw new OpeningHoursParseException(tr("missing_day_in_range", startDate.toString(), endDate.toString()), token != null ? token.next : null);
} else {
// fix this
// fix this up
if (startDate.undefinedDay()) {
startDate.setDay(1);
} else {
}
if (endDate.undefinedDay()) {
endDate.setDay(Month.lastDay(endDate.getYear(), endDate.getMonth()));
}
}
}
mdr.endDate = endDate;
}
(
mdr.interval = interval()
{
if (startDate.day != DateWithOffset.UNDEFINED_MONTH_DAY || endDate.day != DateWithOffset.UNDEFINED_MONTH_DAY || startDate.varDate!=null || endDate.varDate!=null) {
throw new OpeningHoursParseException(tr("interval_not_allowed_here"), token != null ? token.next : null);
}
}
)?
)
|
< PLUS >
Expand Down
57 changes: 57 additions & 0 deletions src/test/java/ch/poole/openinghoursparser/UnitTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -814,6 +814,63 @@ public void dateRange() {
fail(pex.getMessage());
}
}

@Test
public void dateRange2() {
OpeningHoursParser parser = new OpeningHoursParser(new ByteArrayInputStream("1999 Jun -2001 Jul".getBytes()));
try {
List<Rule> rules = parser.rules(false);
assertEquals(1, rules.size());
Rule r = rules.get(0);
assertEquals(1, r.dates.size());
DateRange range = r.dates.get(0);
DateWithOffset start = range.getStartDate();
assertNotNull(start);
assertEquals(1999, start.getYear());
assertEquals(Month.JUN, start.getMonth());
assertEquals(1, start.getDay());
DateWithOffset end = range.getEndDate();
assertNotNull(end);
assertEquals(2001, end.getYear());
assertEquals(Month.JUL, end.getMonth());
assertEquals(31, end.getDay());
} catch (ParseException pex) {
fail(pex.getMessage());
}
}

@Test
public void dateRange3() {
OpeningHoursParser parser = new OpeningHoursParser(new ByteArrayInputStream("1999 Jun -2001 Jul".getBytes()));
try {
List<Rule> rules = parser.rules(true);
fail("this should have thrown an exception");
} catch (ParseException pex) {
//
}
}

@Test
public void dateRange4() {
OpeningHoursParser parser = new OpeningHoursParser(new ByteArrayInputStream("1999 Jun -2001 Jul/7".getBytes()));
try {
List<Rule> rules = parser.rules(false);
assertEquals(1, rules.size());
Rule r = rules.get(0);
assertEquals(1, r.dates.size());
DateRange range = r.dates.get(0);
DateWithOffset start = range.getStartDate();
assertNotNull(start);
assertEquals(1999, start.getYear());
assertEquals(Month.JUN, start.getMonth());
DateWithOffset end = range.getEndDate();
assertEquals(2001, end.getYear());
assertEquals(Month.JUL, end.getMonth());
assertEquals(7, range.getInterval());
} catch (ParseException pex) {
fail(pex.getMessage());
}
}

@Test
public void invalidDateRange() {
Expand Down
30 changes: 15 additions & 15 deletions test-data/oh.txt-result
Original file line number Diff line number Diff line change
Expand Up @@ -5870,7 +5870,7 @@
0 11:30-17:00,18:00-21:00
0 11:30-17:00,18:00-22:30
0 11:30-17:00; Fr-Sa 11:30-21:00; Su 12:00-15:30
0 11:30-17:00; Sep 03-Jun 30 Mo-Fr off; Sep 19-Apr 29 off
0 11:30-17:00; Sep 03-Jun Mo-Fr off; Sep 19-Apr 29 off
0 11:30-17:00; Su off
0 11:30-17:00; We-Sa 11:30-16:00,18:00-24:00; Su off
0 11:30-17:30
Expand Down Expand Up @@ -8612,7 +8612,7 @@
0 2010 Dec 16,2011 Jan 20,Feb 24,Mar 17: 19:00+
0 2010 Jul 03-Aug 01: open
0 2011 Jan 07 Tu-Fr 15:00-18:00
0 2011 Jul-Aug: Mo-Su 10:00-17:00
0 2011 Jul 01-Aug 31: Mo-Su 10:00-17:00
0 2013
1
1
Expand Down Expand Up @@ -13345,7 +13345,7 @@
0 Apr 15-30 08:30-15:00, Sa-Su off; May 01-31 08:30-17:00; Jun 01-Aug 20 08:30-18:00; Aug 21-Sep 30 08:30-17:00; Oct 01-Oct 15 08:30-17:00, Sa-Su off
0 Apr 15-Jun 30 10:00-16:30; Jul 01-Aug 31 10:00-17:30; Sep 01-Oct 31 10:00-16:30
0 Apr 15-Oct 03: Tu-We 14:00-18:00; Th-Su 11:00-18:00 || "Individuelle Öffnungszeiten nach Absprache"
0 Apr 15-Oct 31 13:30-22:00
0 Apr 15-Oct 13:30-22:00
0 Apr 15-Oct 14 06:00-22:30; Oct 15-Apr 14 06:30-20:30
0 Apr 15-Oct 14 06:30-22:30; Oct 15-Apr 14 06:30-20:30
0 Apr 15-Oct 14 06:30-22:30; Oct 15-Apr 14 06:30-20:30
Expand Down Expand Up @@ -13531,7 +13531,7 @@
0 Apr-Nov 11:00-22:00; We off
0 Apr-Nov 11:00-23:00
0 Apr-Nov 13:00-23:00
0 Apr 01-Nov 15
0 Apr-Nov 15
0 Apr-Nov: Fr-Su 14:00-17:00
0 Apr-Nov: Mo-Fr 10:00-18:00; Sa 09:00-12:00; Dec-Mar: Mo 13:00-18:00; Tu-Su 09:00-12:00,13:00-18:00
0 Apr-Nov: Mo-Fr 11:00-sunset; Sa,Su 10:00-sunset
Expand Down Expand Up @@ -15173,13 +15173,13 @@
0 easter -3 days-easter +1 day 11:00-21:00; May 29-Aug 30 11:00-23:00; Sep 06-Dec 20 Th 17:30-21:00, Fr-Sa 11:30-21:00, Su 11:30-16:00
0 easter -42 days
0 easter -60 days-easter -2 days,Oct 25-Dec 24: "je ca. 2 Monate vor Ostern und Weihnachten, siehe www.rk-schoko.de"
0 easter-Aug 31 10:00-16:00
0 easter-Aug 10:00-16:00
0 easter-Dec 31 12:00-22:00; Mo off; Jun-Sep 12:00-22:00
0 easter-Nov 01 10:00-19:00; Nov 01-easter 10:00-17:00
0 easter-Nov 01: Mo-Su 11:00-19:00
0 easter-Nov Su[1]: Su 13:00-17:00; Su[1,3] 13:00-17:00 "Schmiedevorführung"
0 easter-Oct 31
0 easter-Oct 31 09:00-20:00
0 easter-Oct
0 easter-Oct 09:00-20:00
0 easter-Oct 01 12:00-20:00 "circa season"
0 easter-Oct 15: Tu-Sa 11:00-17:00, Su,PH 14:00-17:00 || "Sonderöffnungen und Führungen nach telefonischer Vereinbarung"
0 easter-Oct 26: Sa,Su,PH 10:00-12:00,13:30-17:00
Expand All @@ -15188,7 +15188,7 @@
0 easter-Oct 31: Mo-Sa 13:00-18:00
0 easter-Oct 03 "only Su 14:00-16:00"
0 easter-Oct Su[2]: Su,PH 11:00-17:00; "außerdem nach Vereinbarung"
0 easter-Sep 30
0 easter-Sep
0 easter sunset+
0 "easter to winter"
1
Expand Down Expand Up @@ -19542,8 +19542,8 @@
1
0 Mar-Nov 12:30-22:30
0 Mar-Nov 13:00-22:00
0 Mar 01-Nov 15
0 Mar 01-Nov 02
0 Mar-Nov 15
0 Mar-Nov 02
0 Mar-Nov 06:00-23:00
0 Mar-Nov: Fr 14:00-18:00; Mar-Nov: Sa 10:00-16:00
0 Mar-Nov: Fr 14:00-18:00, Sa 09:00-15:00; Dec-Feb: Sa 09:00-15:00
Expand Down Expand Up @@ -19953,7 +19953,7 @@
0 May 02-Oct 31 Tu-Su 11:00-19:00; "Announce visit at other times"
0 May 02-Oct 05 Mo-Su,PH 10:00-13:00,14:00-18:00
0 May 02-Sep 30: Mo-Fr 10:00-24:00, Sa-Su 08:30-24:00
0 May 02-Sep 30 Mo-Fr 09:00-23:00
0 May 02-Sep Mo-Fr 09:00-23:00
0 May 30-Nov 15: 00:00-24:00
0 May 03-Nov 08: Sa 08:00-12:00
0 May 03-Oct 25: Tu 08:00-12:00
Expand Down Expand Up @@ -58654,7 +58654,7 @@
0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH 09:00-16:00
0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH off
0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH off
0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH off; 2016 Feb-Mar off "Wasserschaden"
0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; PH off; 2016 Feb 01-Mar 31 off "Wasserschaden"
0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; Su 09:00-14:00
0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; Su 09:00-14:00
0 Mo-Fr 09:00-18:00; Sa 09:00-16:00; Su 09:00-15:00
Expand Down Expand Up @@ -83599,7 +83599,7 @@
0 Mo off; Tu-Th 15:00-19:00; Fr 13:00-20:00; Sa 10:00-15:00
0 Mo off; Tu,Th 15:00-19:00; We,Fr,Su off; Sa 10:00-14:00
0 Mo off; Tu-Th 15:00-21:00; Fr 15:00-22:00; Sa 13:00-22:00; Su,PH 13:00-21:00; "Zavírací doba dle návštěvosti."
0 Mo off; Tu-Th 15:00-22:00; Fr 15:00-23:00; Sa 18:00-23:00; Su,PH off; 2016 Jun-Aug Sa off; 2016 Jun-Aug Mo-Fr 11:00-22:00; 2016 Jul 18-31 off
0 Mo off; Tu-Th 15:00-22:00; Fr 15:00-23:00; Sa 18:00-23:00; Su,PH off; 2016 Jun 01-Aug 31 Sa off; 2016 Jun 01-Aug 31 Mo-Fr 11:00-22:00; 2016 Jul 18-31 off
0 Mo off; Tu-Th 15:00-23:00; Fr 15:00-03:00; Sa 12:00-03:00; Su off
0 Mo off; Tu-Th 15:00-23:00, Fr-Su 13:00-01:00
0 Mo off; Tu,Th 15:30-18:30; We,Fr 09:30-12:00
Expand Down Expand Up @@ -98665,7 +98665,7 @@
0 Mo-Su 09:00-13:00,15:00-18:00
0 Mo-Su 09:00-13:00,15:00-19:00
0 Mo-Su 09:00-13:00,15:00-19:00
0 Mo-Su 09:00-13:00,15:00-19:00; Nov 15-Apr 30 off
0 Mo-Su 09:00-13:00,15:00-19:00; Nov 15-Apr off
0 Mo-Su 09:00-13:00,15:30-18:00
0 Mo-Su 09:00-13:00,15:30-19:30
0 Mo-Su 09:00-13:00,15:30-19:30
Expand Down Expand Up @@ -131780,7 +131780,7 @@
0 Oct-Feb off
0 Oct-Jan,Apr-Jul: Mo,Th 21:00-01:00, We[1],We[3],We[5] 18:00-01:00
0 Oct-Jun
0 Oct 01-Jun 30: Mo,Sa 09:00-12:00; Tu,Th,Fr 09:00-12:00,14:00-18:00; Su,We off; Jul,Aug: Mo-Sa 10:00-12:30,15:00-19:00; Su 10:00-12:30; Jun 20-Jun 30: Mo,Tu,Th,Fr 09:00-12:00,14:00-18:00; Sa 09:00-12:00,14:00-17:00, We 09:00-12:00, Su off; Sep: Mo,Tu,Th,Fr 00:00
0 Oct-Jun 30: Mo,Sa 09:00-12:00; Tu,Th,Fr 09:00-12:00,14:00-18:00; Su,We off; Jul,Aug: Mo-Sa 10:00-12:30,15:00-19:00; Su 10:00-12:30; Jun 20-Jun 30: Mo,Tu,Th,Fr 09:00-12:00,14:00-18:00; Sa 09:00-12:00,14:00-17:00, We 09:00-12:00, Su off; Sep: Mo,Tu,Th,Fr 00:00
0 Oct-Jun Mo-Fr 09:30-19:00; Jul-Sep Mo-Fr 10:30-17:00
0 Oct-Jun: We 20:00-01:00; Mo[1] 20:00-01:00
0 Oct-Mar
Expand Down
Loading