[editor] Fix parsing of 'off' opening hours #7652

Merged
root merged 2 commits from openhours into master 2024-05-19 21:32:16 +00:00
2 changed files with 26 additions and 2 deletions

View file

@ -352,6 +352,22 @@ UNIT_TEST(OpeningHours2TimeTableSet_off)
TEST_EQUAL(tt.GetExcludeTime()[0].GetStart().GetHourMinutes().GetHoursCount(), 11, ());
TEST_EQUAL(tt.GetExcludeTime()[0].GetEnd().GetHourMinutes().GetHoursCount(), 13, ());
}
{
OpeningHours oh("Mo off; Tu-Su 09:00-17:00");
TEST(oh.IsValid(), ());
TimeTableSet tts;
TEST(MakeTimeTableSet(oh, tts), ());
TEST_EQUAL(tts.Size(), 1, ());
TEST_EQUAL(tts.GetUnhandledDays(), OpeningDays({osmoh::Weekday::Monday}), ());
auto const tt = tts.Get(0);
TEST_EQUAL(tt.GetOpeningTime().GetStart().GetHourMinutes().GetHoursCount(), 9, ());
TEST_EQUAL(tt.GetOpeningTime().GetEnd().GetHourMinutes().GetHoursCount(), 17, ());
}
}
UNIT_TEST(OpeningHours2TimeTableSet_plus)

View file

@ -340,9 +340,9 @@ bool MakeTimeTableSet(osmoh::OpeningHours const & oh, ui::TimeTableSet & tts)
if (rulePart.GetModifier() == osmoh::RuleSequence::Modifier::Closed)
{
// off modifier in the first part in oh is useless.
// Off modifier in the first part in oh is useless. Skip it.
if (first == true)
return false;
continue;
if (!ExcludeRulePart(rulePart, tts))
return false;
@ -376,6 +376,14 @@ bool MakeTimeTableSet(osmoh::OpeningHours const & oh, ui::TimeTableSet & tts)
return false;
}
// Check if no OH rule has been correctly processed.
if (first)
{
// No OH rule has been correctly processed.
// Set OH parsing as invalid.
return false;
}
return true;
}
} // namespace editor