diff --git a/OsmAnd-java/src/main/java/net/osmand/util/OpeningHoursParser.java b/OsmAnd-java/src/main/java/net/osmand/util/OpeningHoursParser.java index 4af114b427..44e4efab04 100644 --- a/OsmAnd-java/src/main/java/net/osmand/util/OpeningHoursParser.java +++ b/OsmAnd-java/src/main/java/net/osmand/util/OpeningHoursParser.java @@ -1,8 +1,6 @@ package net.osmand.util; /* Can be commented out in order to run the main function separately */ -import gnu.trove.list.array.TIntArrayList; - import java.io.Serializable; import java.text.DateFormatSymbols; import java.util.ArrayList; @@ -15,6 +13,8 @@ import java.util.Locale; import java.util.Map; import java.util.Set; +import gnu.trove.list.array.TIntArrayList; + /** * Class used to parse opening hours *
diff --git a/OsmAnd-java/src/test/java/net/osmand/util/OpeningHoursParserTest.java b/OsmAnd-java/src/test/java/net/osmand/util/OpeningHoursParserTest.java index fb843e4e60..5a3ffb29b5 100644 --- a/OsmAnd-java/src/test/java/net/osmand/util/OpeningHoursParserTest.java +++ b/OsmAnd-java/src/test/java/net/osmand/util/OpeningHoursParserTest.java @@ -113,343 +113,344 @@ public class OpeningHoursParserTest { // 0. not properly supported // hours = parseOpenedHours("Mo-Su (sunrise-00:30)-(sunset+00:30)"); - Locale locale = Locale.getDefault(); - try { - Locale.setDefault(Locale.forLanguageTag("en-US")); - OpeningHours hours = parseOpenedHours("Apr 05-Oct 24: Fr 08:00-16:00"); - System.out.println(hours); - testOpened("26.08.2018 15:00", hours, false); - testOpened("29.03.2019 15:00", hours, false); - testOpened("05.04.2019 11:00", hours, true); + Locale locale = Locale.getDefault(); + try { + Locale.setDefault(Locale.forLanguageTag("en-US")); + OpeningHours hours = parseOpenedHours("Apr 05-Oct 24: Fr 08:00-16:00"); + System.out.println(hours); + testOpened("26.08.2018 15:00", hours, false); + testOpened("29.03.2019 15:00", hours, false); + testOpened("05.04.2019 11:00", hours, true); - hours = parseOpenedHours("Oct 24-Apr 05: Fr 08:00-16:00"); - System.out.println(hours); - testOpened("26.08.2018 15:00", hours, false); - testOpened("29.03.2019 15:00", hours, true); - testOpened("26.04.2019 11:00", hours, false); + hours = parseOpenedHours("Oct 24-Apr 05: Fr 08:00-16:00"); + System.out.println(hours); + testOpened("26.08.2018 15:00", hours, false); + testOpened("29.03.2019 15:00", hours, true); + testOpened("26.04.2019 11:00", hours, false); - hours = parseOpenedHours("Oct 24-Apr 05, Jun 10-Jun 20, Jul 6-12: Fr 08:00-16:00"); - System.out.println(hours); - testOpened("26.08.2018 15:00", hours, false); - testOpened("02.01.2019 15:00", hours, false); - testOpened("29.03.2019 15:00", hours, true); - testOpened("26.04.2019 11:00", hours, false); + hours = parseOpenedHours("Oct 24-Apr 05, Jun 10-Jun 20, Jul 6-12: Fr 08:00-16:00"); + System.out.println(hours); + testOpened("26.08.2018 15:00", hours, false); + testOpened("02.01.2019 15:00", hours, false); + testOpened("29.03.2019 15:00", hours, true); + testOpened("26.04.2019 11:00", hours, false); - hours = parseOpenedHours("Apr 05-24: Fr 08:00-16:00"); - System.out.println(hours); - testOpened("12.10.2018 11:00", hours, false); - testOpened("12.04.2019 15:00", hours, true); - testOpened("27.04.2019 15:00", hours, false); + hours = parseOpenedHours("Apr 05-24: Fr 08:00-16:00"); + System.out.println(hours); + testOpened("12.10.2018 11:00", hours, false); + testOpened("12.04.2019 15:00", hours, true); + testOpened("27.04.2019 15:00", hours, false); - hours = parseOpenedHours("Apr 5: Fr 08:00-16:00"); - System.out.println(hours); - testOpened("05.04.2019 15:00", hours, true); - testOpened("06.04.2019 15:00", hours, false); + hours = parseOpenedHours("Apr 5: Fr 08:00-16:00"); + System.out.println(hours); + testOpened("05.04.2019 15:00", hours, true); + testOpened("06.04.2019 15:00", hours, false); - hours = parseOpenedHours("Apr 24-05: Fr 08:00-16:00"); - System.out.println(hours); - testOpened("12.10.2018 11:00", hours, false); - testOpened("12.04.2018 15:00", hours, false); + hours = parseOpenedHours("Apr 24-05: Fr 08:00-16:00"); + System.out.println(hours); + testOpened("12.10.2018 11:00", hours, false); + testOpened("12.04.2018 15:00", hours, false); - hours = parseOpenedHours("Apr: Fr 08:00-16:00"); - System.out.println(hours); - testOpened("12.10.2018 11:00", hours, false); - testOpened("12.04.2019 15:00", hours, true); + hours = parseOpenedHours("Apr: Fr 08:00-16:00"); + System.out.println(hours); + testOpened("12.10.2018 11:00", hours, false); + testOpened("12.04.2019 15:00", hours, true); - hours = parseOpenedHours("Apr-Oct: Fr 08:00-16:00"); - System.out.println(hours); - testOpened("09.11.2018 11:00", hours, false); - testOpened("12.10.2018 11:00", hours, true); - testOpened("24.08.2018 15:00", hours, true); - testOpened("09.03.2018 15:00", hours, false); + hours = parseOpenedHours("Apr-Oct: Fr 08:00-16:00"); + System.out.println(hours); + testOpened("09.11.2018 11:00", hours, false); + testOpened("12.10.2018 11:00", hours, true); + testOpened("24.08.2018 15:00", hours, true); + testOpened("09.03.2018 15:00", hours, false); - hours = parseOpenedHours("Apr, Oct: Fr 08:00-16:00"); - System.out.println(hours); - testOpened("09.11.2018 11:00", hours, false); - testOpened("12.10.2018 11:00", hours, true); - testOpened("24.08.2018 15:00", hours, false); - testOpened("12.04.2019 15:00", hours, true); + hours = parseOpenedHours("Apr, Oct: Fr 08:00-16:00"); + System.out.println(hours); + testOpened("09.11.2018 11:00", hours, false); + testOpened("12.10.2018 11:00", hours, true); + testOpened("24.08.2018 15:00", hours, false); + testOpened("12.04.2019 15:00", hours, true); + // test basic case + hours = parseOpenedHours("Mo-Fr 08:30-14:40"); //$NON-NLS-1$ + System.out.println(hours); + testOpened("09.08.2012 11:00", hours, true); + testOpened("09.08.2012 16:00", hours, false); + hours = parseOpenedHours("mo-fr 07:00-19:00; sa 12:00-18:00"); - // test basic case - hours = parseOpenedHours("Mo-Fr 08:30-14:40"); //$NON-NLS-1$ - System.out.println(hours); - testOpened("09.08.2012 11:00", hours, true); - testOpened("09.08.2012 16:00", hours, false); - hours = parseOpenedHours("mo-fr 07:00-19:00; sa 12:00-18:00"); + String string = "Mo-Fr 11:30-15:00, 17:30-23:00; Sa, Su, PH 11:30-23:00"; + hours = parseOpenedHours(string); + testParsedAndAssembledCorrectly(string, hours); + System.out.println(hours); + testOpened("7.09.2015 14:54", hours, true); // monday + testOpened("7.09.2015 15:05", hours, false); + testOpened("6.09.2015 16:05", hours, true); - String string = "Mo-Fr 11:30-15:00, 17:30-23:00; Sa, Su, PH 11:30-23:00"; - hours = parseOpenedHours(string); - testParsedAndAssembledCorrectly(string, hours); - System.out.println(hours); - testOpened("7.09.2015 14:54", hours, true); // monday - testOpened("7.09.2015 15:05", hours, false); - testOpened("6.09.2015 16:05", hours, true); + // two time and date ranges + hours = parseOpenedHours("Mo-We, Fr 08:30-14:40,15:00-19:00"); //$NON-NLS-1$ + System.out.println(hours); + testOpened("08.08.2012 14:00", hours, true); + testOpened("08.08.2012 14:50", hours, false); + testOpened("10.08.2012 15:00", hours, true); + // test exception on general schema + hours = parseOpenedHours("Mo-Sa 08:30-14:40; Tu 08:00 - 14:00"); //$NON-NLS-1$ + System.out.println(hours); + testOpened("07.08.2012 14:20", hours, false); + testOpened("07.08.2012 08:15", hours, true); // Tuesday - // two time and date ranges - hours = parseOpenedHours("Mo-We, Fr 08:30-14:40,15:00-19:00"); //$NON-NLS-1$ - System.out.println(hours); - testOpened("08.08.2012 14:00", hours, true); - testOpened("08.08.2012 14:50", hours, false); - testOpened("10.08.2012 15:00", hours, true); + // test off value + hours = parseOpenedHours("Mo-Sa 09:00-18:25; Th off"); //$NON-NLS-1$ + System.out.println(hours); + testOpened("08.08.2012 12:00", hours, true); + testOpened("09.08.2012 12:00", hours, false); - // test exception on general schema - hours = parseOpenedHours("Mo-Sa 08:30-14:40; Tu 08:00 - 14:00"); //$NON-NLS-1$ - System.out.println(hours); - testOpened("07.08.2012 14:20", hours, false); - testOpened("07.08.2012 08:15", hours, true); // Tuesday + // test 24/7 + hours = parseOpenedHours("24/7"); //$NON-NLS-1$ + System.out.println(hours); + testOpened("08.08.2012 23:59", hours, true); + testOpened("08.08.2012 12:23", hours, true); + testOpened("08.08.2012 06:23", hours, true); - // test off value - hours = parseOpenedHours("Mo-Sa 09:00-18:25; Th off"); //$NON-NLS-1$ - System.out.println(hours); - testOpened("08.08.2012 12:00", hours, true); - testOpened("09.08.2012 12:00", hours, false); + // some people seem to use the following syntax: + hours = parseOpenedHours("Sa-Su 24/7"); + System.out.println(hours); + hours = parseOpenedHours("Mo-Fr 9-19"); + System.out.println(hours); + hours = parseOpenedHours("09:00-17:00"); + System.out.println(hours); + hours = parseOpenedHours("sunrise-sunset"); + System.out.println(hours); + hours = parseOpenedHours("10:00+"); + System.out.println(hours); + hours = parseOpenedHours("Su-Th sunset-24:00, 04:00-sunrise; Fr-Sa sunset-sunrise"); + System.out.println(hours); + testOpened("12.08.2012 04:00", hours, true); + testOpened("12.08.2012 23:00", hours, true); + testOpened("08.08.2012 12:00", hours, false); + testOpened("08.08.2012 05:00", hours, true); - // test 24/7 - hours = parseOpenedHours("24/7"); //$NON-NLS-1$ - System.out.println(hours); - testOpened("08.08.2012 23:59", hours, true); - testOpened("08.08.2012 12:23", hours, true); - testOpened("08.08.2012 06:23", hours, true); + // test simple day wrap + hours = parseOpenedHours("Mo 20:00-02:00"); + System.out.println(hours); + testOpened("05.05.2013 10:30", hours, false); + testOpened("05.05.2013 23:59", hours, false); + testOpened("06.05.2013 10:30", hours, false); + testOpened("06.05.2013 20:30", hours, true); + testOpened("06.05.2013 23:59", hours, true); + testOpened("07.05.2013 00:00", hours, true); + testOpened("07.05.2013 00:30", hours, true); + testOpened("07.05.2013 01:59", hours, true); + testOpened("07.05.2013 20:30", hours, false); - // some people seem to use the following syntax: - hours = parseOpenedHours("Sa-Su 24/7"); - System.out.println(hours); - hours = parseOpenedHours("Mo-Fr 9-19"); - System.out.println(hours); - hours = parseOpenedHours("09:00-17:00"); - System.out.println(hours); - hours = parseOpenedHours("sunrise-sunset"); - System.out.println(hours); - hours = parseOpenedHours("10:00+"); - System.out.println(hours); - hours = parseOpenedHours("Su-Th sunset-24:00, 04:00-sunrise; Fr-Sa sunset-sunrise"); - System.out.println(hours); - testOpened("12.08.2012 04:00", hours, true); - testOpened("12.08.2012 23:00", hours, true); - testOpened("08.08.2012 12:00", hours, false); - testOpened("08.08.2012 05:00", hours, true); + // test maximum day wrap + hours = parseOpenedHours("Su 10:00-10:00"); + System.out.println(hours); + testOpened("05.05.2013 09:59", hours, false); + testOpened("05.05.2013 10:00", hours, true); + testOpened("05.05.2013 23:59", hours, true); + testOpened("06.05.2013 00:00", hours, true); + testOpened("06.05.2013 09:59", hours, true); + testOpened("06.05.2013 10:00", hours, false); - // test simple day wrap - hours = parseOpenedHours("Mo 20:00-02:00"); - System.out.println(hours); - testOpened("05.05.2013 10:30", hours, false); - testOpened("05.05.2013 23:59", hours, false); - testOpened("06.05.2013 10:30", hours, false); - testOpened("06.05.2013 20:30", hours, true); - testOpened("06.05.2013 23:59", hours, true); - testOpened("07.05.2013 00:00", hours, true); - testOpened("07.05.2013 00:30", hours, true); - testOpened("07.05.2013 01:59", hours, true); - testOpened("07.05.2013 20:30", hours, false); + // test day wrap as seen on OSM + hours = parseOpenedHours("Tu-Th 07:00-2:00; Fr 17:00-4:00; Sa 18:00-05:00; Su,Mo off"); + System.out.println(hours); + testOpened("05.05.2013 04:59", hours, true); // sunday 05.05.2013 + testOpened("05.05.2013 05:00", hours, false); + testOpened("05.05.2013 12:30", hours, false); + testOpened("06.05.2013 10:30", hours, false); + testOpened("07.05.2013 01:00", hours, false); + testOpened("07.05.2013 20:25", hours, true); + testOpened("07.05.2013 23:59", hours, true); + testOpened("08.05.2013 00:00", hours, true); + testOpened("08.05.2013 02:00", hours, false); - // test maximum day wrap - hours = parseOpenedHours("Su 10:00-10:00"); - System.out.println(hours); - testOpened("05.05.2013 09:59", hours, false); - testOpened("05.05.2013 10:00", hours, true); - testOpened("05.05.2013 23:59", hours, true); - testOpened("06.05.2013 00:00", hours, true); - testOpened("06.05.2013 09:59", hours, true); - testOpened("06.05.2013 10:00", hours, false); + // test day wrap as seen on OSM + hours = parseOpenedHours("Mo-Th 09:00-03:00; Fr-Sa 09:00-04:00; Su off"); + testOpened("11.05.2015 08:59", hours, false); + testOpened("11.05.2015 09:01", hours, true); + testOpened("12.05.2015 02:59", hours, true); + testOpened("12.05.2015 03:00", hours, false); + testOpened("16.05.2015 03:59", hours, true); + testOpened("16.05.2015 04:01", hours, false); + testOpened("17.05.2015 01:00", hours, true); + testOpened("17.05.2015 04:01", hours, false); - // test day wrap as seen on OSM - hours = parseOpenedHours("Tu-Th 07:00-2:00; Fr 17:00-4:00; Sa 18:00-05:00; Su,Mo off"); - System.out.println(hours); - testOpened("05.05.2013 04:59", hours, true); // sunday 05.05.2013 - testOpened("05.05.2013 05:00", hours, false); - testOpened("05.05.2013 12:30", hours, false); - testOpened("06.05.2013 10:30", hours, false); - testOpened("07.05.2013 01:00", hours, false); - testOpened("07.05.2013 20:25", hours, true); - testOpened("07.05.2013 23:59", hours, true); - testOpened("08.05.2013 00:00", hours, true); - testOpened("08.05.2013 02:00", hours, false); + hours = parseOpenedHours("Tu-Th 07:00-2:00; Fr 17:00-4:00; Sa 18:00-05:00; Su,Mo off"); + testOpened("11.05.2015 08:59", hours, false); + testOpened("11.05.2015 09:01", hours, false); + testOpened("12.05.2015 01:59", hours, false); + testOpened("12.05.2015 02:59", hours, false); + testOpened("12.05.2015 03:00", hours, false); + testOpened("13.05.2015 01:59", hours, true); + testOpened("13.05.2015 02:59", hours, false); + testOpened("16.05.2015 03:59", hours, true); + testOpened("16.05.2015 04:01", hours, false); + testOpened("17.05.2015 01:00", hours, true); + testOpened("17.05.2015 05:01", hours, false); - // test day wrap as seen on OSM - hours = parseOpenedHours("Mo-Th 09:00-03:00; Fr-Sa 09:00-04:00; Su off"); - testOpened("11.05.2015 08:59", hours, false); - testOpened("11.05.2015 09:01", hours, true); - testOpened("12.05.2015 02:59", hours, true); - testOpened("12.05.2015 03:00", hours, false); - testOpened("16.05.2015 03:59", hours, true); - testOpened("16.05.2015 04:01", hours, false); - testOpened("17.05.2015 01:00", hours, true); - testOpened("17.05.2015 04:01", hours, false); + // tests single month value + hours = parseOpenedHours("May: 07:00-19:00"); + System.out.println(hours); + testOpened("05.05.2013 12:00", hours, true); + testOpened("05.05.2013 05:00", hours, false); + testOpened("05.05.2013 21:00", hours, false); + testOpened("05.01.2013 12:00", hours, false); + testOpened("05.01.2013 05:00", hours, false); - hours = parseOpenedHours("Tu-Th 07:00-2:00; Fr 17:00-4:00; Sa 18:00-05:00; Su,Mo off"); - testOpened("11.05.2015 08:59", hours, false); - testOpened("11.05.2015 09:01", hours, false); - testOpened("12.05.2015 01:59", hours, false); - testOpened("12.05.2015 02:59", hours, false); - testOpened("12.05.2015 03:00", hours, false); - testOpened("13.05.2015 01:59", hours, true); - testOpened("13.05.2015 02:59", hours, false); - testOpened("16.05.2015 03:59", hours, true); - testOpened("16.05.2015 04:01", hours, false); - testOpened("17.05.2015 01:00", hours, true); - testOpened("17.05.2015 05:01", hours, false); + // tests multi month value + hours = parseOpenedHours("Apr-Sep 8:00-22:00; Oct-Mar 10:00-18:00"); + System.out.println(hours); + testOpened("05.03.2013 15:00", hours, true); + testOpened("05.03.2013 20:00", hours, false); - // tests single month value - hours = parseOpenedHours("May: 07:00-19:00"); - System.out.println(hours); - testOpened("05.05.2013 12:00", hours, true); - testOpened("05.05.2013 05:00", hours, false); - testOpened("05.05.2013 21:00", hours, false); - testOpened("05.01.2013 12:00", hours, false); - testOpened("05.01.2013 05:00", hours, false); + testOpened("05.05.2013 20:00", hours, true); + testOpened("05.05.2013 23:00", hours, false); - // tests multi month value - hours = parseOpenedHours("Apr-Sep 8:00-22:00; Oct-Mar 10:00-18:00"); - System.out.println(hours); - testOpened("05.03.2013 15:00", hours, true); - testOpened("05.03.2013 20:00", hours, false); + testOpened("05.10.2013 15:00", hours, true); + testOpened("05.10.2013 20:00", hours, false); - testOpened("05.05.2013 20:00", hours, true); - testOpened("05.05.2013 23:00", hours, false); + // Test time with breaks + hours = parseOpenedHours("Mo-Fr: 9:00-13:00, 14:00-18:00"); + System.out.println(hours); + testOpened("02.12.2015 12:00", hours, true); + testOpened("02.12.2015 13:30", hours, false); + testOpened("02.12.2015 16:00", hours, true); - testOpened("05.10.2013 15:00", hours, true); - testOpened("05.10.2013 20:00", hours, false); + testOpened("05.12.2015 16:00", hours, false); - // Test time with breaks - hours = parseOpenedHours("Mo-Fr: 9:00-13:00, 14:00-18:00"); - System.out.println(hours); - testOpened("02.12.2015 12:00", hours, true); - testOpened("02.12.2015 13:30", hours, false); - testOpened("02.12.2015 16:00", hours, true); + hours = parseOpenedHours("Mo-Su 07:00-23:00; Dec 25 08:00-20:00"); + System.out.println(hours); + testOpened("25.12.2015 07:00", hours, false); + testOpened("24.12.2015 07:00", hours, true); + testOpened("24.12.2015 22:00", hours, true); + testOpened("25.12.2015 08:00", hours, true); + testOpened("25.12.2015 22:00", hours, false); - testOpened("05.12.2015 16:00", hours, false); - - hours = parseOpenedHours("Mo-Su 07:00-23:00; Dec 25 08:00-20:00"); - System.out.println(hours); - testOpened("25.12.2015 07:00", hours, false); - testOpened("24.12.2015 07:00", hours, true); - testOpened("24.12.2015 22:00", hours, true); - testOpened("25.12.2015 08:00", hours, true); - testOpened("25.12.2015 22:00", hours, false); - - hours = parseOpenedHours("Mo-Su 07:00-23:00; Dec 25 off"); - System.out.println(hours); - testOpened("25.12.2015 14:00", hours, false); - testOpened("24.12.2015 08:00", hours, true); - - // easter itself as public holiday is not supported - hours = parseOpenedHours("Mo-Su 07:00-23:00; Easter off; Dec 25 off"); - System.out.println(hours); - testOpened("25.12.2015 14:00", hours, false); - testOpened("24.12.2015 08:00", hours, true); + hours = parseOpenedHours("Mo-Su 07:00-23:00; Dec 25 off"); + System.out.println(hours); + testOpened("25.12.2015 14:00", hours, false); + testOpened("24.12.2015 08:00", hours, true); - // test time off (not days - hours = parseOpenedHours("Mo-Fr 08:30-17:00; 12:00-12:40 off;"); - System.out.println(hours); - testOpened("07.05.2017 14:00", hours, false); // Sunday - testOpened("06.05.2017 12:15", hours, false); // Saturday - testOpened("05.05.2017 14:00", hours, true); // Friday - testOpened("05.05.2017 12:15", hours, false); - testOpened("05.05.2017 12:00", hours, false); - testOpened("05.05.2017 11:45", hours, true); - - // Test holidays - String hoursString = "mo-fr 11:00-21:00; PH off"; - hours = OpeningHoursParser.parseOpenedHoursHandleErrors(hoursString); - testParsedAndAssembledCorrectly(hoursString, hours); + // easter itself as public holiday is not supported + hours = parseOpenedHours("Mo-Su 07:00-23:00; Easter off; Dec 25 off"); + System.out.println(hours); + testOpened("25.12.2015 14:00", hours, false); + testOpened("24.12.2015 08:00", hours, true); - // test open from/till - hours = parseOpenedHours("Mo-Fr 08:30-17:00; 12:00-12:40 off;"); - System.out.println(hours); - testInfo("15.01.2018 09:00", hours, "Open till 12:00"); - testInfo("15.01.2018 11:00", hours, "Will close at 12:00"); - testInfo("15.01.2018 12:00", hours, "Will open at 12:40"); + // test time off (not days + hours = parseOpenedHours("Mo-Fr 08:30-17:00; 12:00-12:40 off;"); + System.out.println(hours); + testOpened("07.05.2017 14:00", hours, false); // Sunday + testOpened("06.05.2017 12:15", hours, false); // Saturday + testOpened("05.05.2017 14:00", hours, true); // Friday + testOpened("05.05.2017 12:15", hours, false); + testOpened("05.05.2017 12:00", hours, false); + testOpened("05.05.2017 11:45", hours, true); - hours = parseOpenedHours("Mo-Fr: 9:00-13:00, 14:00-18:00"); - System.out.println(hours); - testInfo("15.01.2018 08:00", hours, "Will open at 09:00"); - testInfo("15.01.2018 09:00", hours, "Open till 13:00"); - testInfo("15.01.2018 12:00", hours, "Will close at 13:00"); - testInfo("15.01.2018 13:10", hours, "Will open at 14:00"); - testInfo("15.01.2018 14:00", hours, "Open till 18:00"); - testInfo("15.01.2018 16:00", hours, "Will close at 18:00"); - testInfo("15.01.2018 18:10", hours, "Will open tomorrow at 09:00"); - - hours = parseOpenedHours("Mo-Sa 02:00-10:00; Th off"); - System.out.println(hours); - testInfo("15.01.2018 23:00", hours, "Will open tomorrow at 02:00"); + // Test holidays + String hoursString = "mo-fr 11:00-21:00; PH off"; + hours = OpeningHoursParser.parseOpenedHoursHandleErrors(hoursString); + testParsedAndAssembledCorrectly(hoursString, hours); - hours = parseOpenedHours("Mo-Sa 23:00-02:00; Th off"); - System.out.println(hours); - testInfo("15.01.2018 22:00", hours, "Will open at 23:00"); - testInfo("15.01.2018 23:00", hours, "Open till 02:00"); - testInfo("16.01.2018 00:30", hours, "Will close at 02:00"); - testInfo("16.01.2018 02:00", hours, "Open from 23:00"); + // test open from/till + hours = parseOpenedHours("Mo-Fr 08:30-17:00; 12:00-12:40 off;"); + System.out.println(hours); + testInfo("15.01.2018 09:00", hours, "Open till 12:00"); + testInfo("15.01.2018 11:00", hours, "Will close at 12:00"); + testInfo("15.01.2018 12:00", hours, "Will open at 12:40"); - hours = parseOpenedHours("Mo-Sa 08:30-17:00; Th off"); - System.out.println(hours); - testInfo("17.01.2018 20:00", hours, "Will open on 08:30 Fri."); - testInfo("18.01.2018 05:00", hours, "Will open tomorrow at 08:30"); - testInfo("20.01.2018 05:00", hours, "Open from 08:30"); - testInfo("21.01.2018 05:00", hours, "Will open tomorrow at 08:30"); - testInfo("22.01.2018 02:00", hours, "Open from 08:30"); - testInfo("22.01.2018 04:00", hours, "Open from 08:30"); - testInfo("22.01.2018 07:00", hours, "Will open at 08:30"); - testInfo("23.01.2018 10:00", hours, "Open till 17:00"); - testInfo("23.01.2018 16:00", hours, "Will close at 17:00"); + hours = parseOpenedHours("Mo-Fr: 9:00-13:00, 14:00-18:00"); + System.out.println(hours); + testInfo("15.01.2018 08:00", hours, "Will open at 09:00"); + testInfo("15.01.2018 09:00", hours, "Open till 13:00"); + testInfo("15.01.2018 12:00", hours, "Will close at 13:00"); + testInfo("15.01.2018 13:10", hours, "Will open at 14:00"); + testInfo("15.01.2018 14:00", hours, "Open till 18:00"); + testInfo("15.01.2018 16:00", hours, "Will close at 18:00"); + testInfo("15.01.2018 18:10", hours, "Will open tomorrow at 09:00"); - hours = parseOpenedHours("24/7"); - System.out.println(hours); - testInfo("24.01.2018 02:00", hours, "Open 24/7"); - - hours = parseOpenedHours("Mo-Su 07:00-23:00, Fr 08:00-20:00"); - System.out.println(hours); - testOpened("15.01.2018 06:45", hours, false); - testOpened("15.01.2018 07:45", hours, true); - testOpened("15.01.2018 23:45", hours, false); - testOpened("19.01.2018 07:45", hours, false); - testOpened("19.01.2018 08:45", hours, true); - testOpened("19.01.2018 20:45", hours, false); + hours = parseOpenedHours("Mo-Sa 02:00-10:00; Th off"); + System.out.println(hours); + testInfo("15.01.2018 23:00", hours, "Will open tomorrow at 02:00"); - // test fallback case - hours = parseOpenedHours("07:00-01:00 open \"Restaurant\" || Mo 00:00-04:00,07:00-04:00; Tu-Th 07:00-04:00; Fr 07:00-24:00; Sa,Su 00:00-24:00 open \"McDrive\""); - System.out.println(hours); - testOpened("22.01.2018 00:30", hours, true); - testOpened("22.01.2018 08:00", hours, true); - testOpened("22.01.2018 03:30", hours, true); - testOpened("22.01.2018 05:00", hours, false); - testOpened("23.01.2018 05:00", hours, false); - testOpened("27.01.2018 05:00", hours, true); - testOpened("28.01.2018 05:00", hours, true); + hours = parseOpenedHours("Mo-Sa 23:00-02:00; Th off"); + System.out.println(hours); + testInfo("15.01.2018 22:00", hours, "Will open at 23:00"); + testInfo("15.01.2018 23:00", hours, "Open till 02:00"); + testInfo("16.01.2018 00:30", hours, "Will close at 02:00"); + testInfo("16.01.2018 02:00", hours, "Open from 23:00"); - testInfo("22.01.2018 05:00", hours, "Will open at 07:00 - Restaurant", 0); - testInfo("26.01.2018 00:00", hours, "Will close at 01:00 - Restaurant", 0); - testInfo("22.01.2018 05:00", hours, "Will open at 07:00 - McDrive", 1); - testInfo("22.01.2018 00:00", hours, "Open till 04:00 - McDrive", 1); - testInfo("22.01.2018 02:00", hours, "Will close at 04:00 - McDrive", 1); - testInfo("27.01.2018 02:00", hours, "Open till 24:00 - McDrive", 1); - - hours = parseOpenedHours("07:00-03:00 open \"Restaurant\" || 24/7 open \"McDrive\""); - System.out.println(hours); - testOpened("22.01.2018 02:00", hours, true); - testOpened("22.01.2018 17:00", hours, true); - testInfo("22.01.2018 05:00", hours, "Will open at 07:00 - Restaurant", 0); - testInfo("22.01.2018 04:00", hours, "Open 24/7 - McDrive", 1); + hours = parseOpenedHours("Mo-Sa 08:30-17:00; Th off"); + System.out.println(hours); + testInfo("17.01.2018 20:00", hours, "Will open on 08:30 Fri."); + testInfo("18.01.2018 05:00", hours, "Will open tomorrow at 08:30"); + testInfo("20.01.2018 05:00", hours, "Open from 08:30"); + testInfo("21.01.2018 05:00", hours, "Will open tomorrow at 08:30"); + testInfo("22.01.2018 02:00", hours, "Open from 08:30"); + testInfo("22.01.2018 04:00", hours, "Open from 08:30"); + testInfo("22.01.2018 07:00", hours, "Will open at 08:30"); + testInfo("23.01.2018 10:00", hours, "Open till 17:00"); + testInfo("23.01.2018 16:00", hours, "Will close at 17:00"); - hours = parseOpenedHours("Mo-Fr 12:00-15:00, Tu-Fr 17:00-23:00, Sa 12:00-23:00, Su 14:00-23:00"); - System.out.println(hours); - testOpened("16.02.2018 14:00", hours, true); - testOpened("16.02.2018 16:00", hours, false); - testOpened("16.02.2018 17:00", hours, true); - testInfo("16.02.2018 9:45", hours, "Open from 12:00"); - testInfo("16.02.2018 12:00", hours, "Open till 15:00"); - testInfo("16.02.2018 14:00", hours, "Will close at 15:00"); - testInfo("16.02.2018 16:00", hours, "Will open at 17:00"); - testInfo("16.02.2018 18:00", hours, "Open till 23:00"); - - hours = parseOpenedHours("Mo-Fr 10:00-21:00; Sa 12:00-23:00; PH \"Wird auf der Homepage bekannt gegeben.\""); - testParsedAndAssembledCorrectly("Mo-Fr 10:00-21:00; Sa 12:00-23:00; PH - Wird auf der Homepage bekannt gegeben.", hours); - System.out.println(hours); - } finally { - Locale.setDefault(locale); - } + hours = parseOpenedHours("24/7"); + System.out.println(hours); + testInfo("24.01.2018 02:00", hours, "Open 24/7"); + + hours = parseOpenedHours("Mo-Su 07:00-23:00, Fr 08:00-20:00"); + System.out.println(hours); + testOpened("15.01.2018 06:45", hours, false); + testOpened("15.01.2018 07:45", hours, true); + testOpened("15.01.2018 23:45", hours, false); + testOpened("19.01.2018 07:45", hours, false); + testOpened("19.01.2018 08:45", hours, true); + testOpened("19.01.2018 20:45", hours, false); + + // test fallback case + hours = parseOpenedHours( + "07:00-01:00 open \"Restaurant\" || Mo 00:00-04:00,07:00-04:00; Tu-Th 07:00-04:00; Fr 07:00-24:00; Sa,Su 00:00-24:00 open \"McDrive\""); + System.out.println(hours); + testOpened("22.01.2018 00:30", hours, true); + testOpened("22.01.2018 08:00", hours, true); + testOpened("22.01.2018 03:30", hours, true); + testOpened("22.01.2018 05:00", hours, false); + testOpened("23.01.2018 05:00", hours, false); + testOpened("27.01.2018 05:00", hours, true); + testOpened("28.01.2018 05:00", hours, true); + + testInfo("22.01.2018 05:00", hours, "Will open at 07:00 - Restaurant", 0); + testInfo("26.01.2018 00:00", hours, "Will close at 01:00 - Restaurant", 0); + testInfo("22.01.2018 05:00", hours, "Will open at 07:00 - McDrive", 1); + testInfo("22.01.2018 00:00", hours, "Open till 04:00 - McDrive", 1); + testInfo("22.01.2018 02:00", hours, "Will close at 04:00 - McDrive", 1); + testInfo("27.01.2018 02:00", hours, "Open till 24:00 - McDrive", 1); + + hours = parseOpenedHours("07:00-03:00 open \"Restaurant\" || 24/7 open \"McDrive\""); + System.out.println(hours); + testOpened("22.01.2018 02:00", hours, true); + testOpened("22.01.2018 17:00", hours, true); + testInfo("22.01.2018 05:00", hours, "Will open at 07:00 - Restaurant", 0); + testInfo("22.01.2018 04:00", hours, "Open 24/7 - McDrive", 1); + + hours = parseOpenedHours("Mo-Fr 12:00-15:00, Tu-Fr 17:00-23:00, Sa 12:00-23:00, Su 14:00-23:00"); + System.out.println(hours); + testOpened("16.02.2018 14:00", hours, true); + testOpened("16.02.2018 16:00", hours, false); + testOpened("16.02.2018 17:00", hours, true); + testInfo("16.02.2018 9:45", hours, "Open from 12:00"); + testInfo("16.02.2018 12:00", hours, "Open till 15:00"); + testInfo("16.02.2018 14:00", hours, "Will close at 15:00"); + testInfo("16.02.2018 16:00", hours, "Will open at 17:00"); + testInfo("16.02.2018 18:00", hours, "Open till 23:00"); + + hours = parseOpenedHours( + "Mo-Fr 10:00-21:00; Sa 12:00-23:00; PH \"Wird auf der Homepage bekannt gegeben.\""); + testParsedAndAssembledCorrectly( + "Mo-Fr 10:00-21:00; Sa 12:00-23:00; PH - Wird auf der Homepage bekannt gegeben.", hours); + System.out.println(hours); + } finally { + Locale.setDefault(locale); + } }