diff --git a/editor/editor_tests/ui2oh_test.cpp b/editor/editor_tests/ui2oh_test.cpp index 2fd4ec0e65..853c536ab0 100644 --- a/editor/editor_tests/ui2oh_test.cpp +++ b/editor/editor_tests/ui2oh_test.cpp @@ -24,7 +24,7 @@ UNIT_TEST(OpeningHours2TimeTableSt) TimeTableSet tts; - TEST(ConvertOpeningHours(oh, tts), ()); + TEST(MakeTimeTableSet(oh, tts), ()); TEST_EQUAL(tts.Size(), 1, ()); auto const tt = tts.Front(); @@ -39,7 +39,7 @@ UNIT_TEST(OpeningHours2TimeTableSt) TimeTableSet tts; - TEST(ConvertOpeningHours(oh, tts), ()); + TEST(MakeTimeTableSet(oh, tts), ()); TEST_EQUAL(tts.Size(), 1, ()); auto const tt = tts.Front(); @@ -58,7 +58,7 @@ UNIT_TEST(OpeningHours2TimeTableSt) TimeTableSet tts; - TEST(ConvertOpeningHours(oh, tts), ()); + TEST(MakeTimeTableSet(oh, tts), ()); TEST_EQUAL(tts.Size(), 1, ()); auto const tt = tts.Front(); @@ -81,7 +81,7 @@ UNIT_TEST(OpeningHours2TimeTableSt) TimeTableSet tts; - TEST(ConvertOpeningHours(oh, tts), ()); + TEST(MakeTimeTableSet(oh, tts), ()); TEST_EQUAL(tts.Size(), 2, ()); { @@ -102,7 +102,7 @@ UNIT_TEST(OpeningHours2TimeTableSt) TimeTableSet tts; - TEST(!ConvertOpeningHours(oh, tts), ()); + TEST(!MakeTimeTableSet(oh, tts), ()); } { OpeningHours oh("2016 Mo-Fr 08:00-10:00"); @@ -110,7 +110,7 @@ UNIT_TEST(OpeningHours2TimeTableSt) TimeTableSet tts; - TEST(!ConvertOpeningHours(oh, tts), ()); + TEST(!MakeTimeTableSet(oh, tts), ()); } { OpeningHours oh("week 30 Mo-Fr 08:00-10:00"); @@ -118,7 +118,7 @@ UNIT_TEST(OpeningHours2TimeTableSt) TimeTableSet tts; - TEST(!ConvertOpeningHours(oh, tts), ()); + TEST(!MakeTimeTableSet(oh, tts), ()); } { OpeningHours oh("Mo-Su 11:00-24:00"); @@ -126,7 +126,7 @@ UNIT_TEST(OpeningHours2TimeTableSt) TimeTableSet tts; - TEST(ConvertOpeningHours(oh, tts), ()); + TEST(MakeTimeTableSet(oh, tts), ()); TEST_EQUAL(tts.Size(), 1, ()); auto const tt = tts.Front(); @@ -141,7 +141,7 @@ UNIT_TEST(OpeningHours2TimeTableSt) TimeTableSet tts; - TEST(ConvertOpeningHours(oh, tts), ()); + TEST(MakeTimeTableSet(oh, tts), ()); TEST_EQUAL(tts.Size(), 2, ()); { @@ -162,7 +162,7 @@ UNIT_TEST(OpeningHours2TimeTableSt) TimeTableSet tts; - TEST(ConvertOpeningHours(oh, tts), ()); + TEST(MakeTimeTableSet(oh, tts), ()); TEST_EQUAL(tts.Size(), 2, ()); { @@ -195,7 +195,7 @@ UNIT_TEST(TimeTableSt2OpeningHours) TEST(tt.SetOpeningTime({8_h, 22_h}), ()); TEST(tt.Commit(), ()); - TEST_EQUAL(ToString(ConvertOpeningHours(tts)), "Mo-Fr 08:00-22:00", ()); + TEST_EQUAL(ToString(MakeOpeningHours(tts)), "Mo-Fr 08:00-22:00", ()); } { TimeTableSet tts; @@ -213,7 +213,7 @@ UNIT_TEST(TimeTableSt2OpeningHours) TEST(tt.AddExcludeTime({12_h, 13_h}), ()); TEST(tt.Commit(), ()); - TEST_EQUAL(ToString(ConvertOpeningHours(tts)), "Mo-Fr 08:00-12:00, 13:00-22:00", ()); + TEST_EQUAL(ToString(MakeOpeningHours(tts)), "Mo-Fr 08:00-12:00, 13:00-22:00", ()); } { TimeTableSet tts; @@ -232,7 +232,7 @@ UNIT_TEST(TimeTableSt2OpeningHours) TEST(tt.AddExcludeTime({12_h + 30_min, 13_h}), ()); TEST(tt.Commit(), ()); - TEST_EQUAL(ToString(ConvertOpeningHours(tts)), "Mo-Fr 08:00-10:00, 11:00-12:30, 13:00-22:00", ()); + TEST_EQUAL(ToString(MakeOpeningHours(tts)), "Mo-Fr 08:00-10:00, 11:00-12:30, 13:00-22:00", ()); } { TimeTableSet tts; @@ -240,12 +240,10 @@ UNIT_TEST(TimeTableSt2OpeningHours) { auto tt = tts.Front(); TEST(tt.SetOpeningDays({ - osmoh::Weekday::Monday, osmoh::Weekday::Tuesday, osmoh::Weekday::Wednesday, osmoh::Weekday::Thursday}), ()); - tt.SetTwentyFourHours(false); TEST(tt.SetOpeningTime({8_h, 10_h}), ()); TEST(tt.Commit(), ()); @@ -253,6 +251,7 @@ UNIT_TEST(TimeTableSt2OpeningHours) { TimeTable tt; TEST(tt.SetOpeningDays({ + osmoh::Weekday::Monday, osmoh::Weekday::Friday, osmoh::Weekday::Saturday, osmoh::Weekday::Sunday}), ()); @@ -262,7 +261,7 @@ UNIT_TEST(TimeTableSt2OpeningHours) TEST(tts.Append(tt), ()); } - TEST_EQUAL(ToString(ConvertOpeningHours(tts)), "Mo-Th 08:00-10:00; Fr-Su 13:00-22:00", ()); + TEST_EQUAL(ToString(MakeOpeningHours(tts)), "Tu-Th 08:00-10:00; Fr-Mo 13:00-22:00", ()); } { TimeTableSet tts; @@ -289,7 +288,7 @@ UNIT_TEST(TimeTableSt2OpeningHours) TEST(tts.Append(tt), ()); } - TEST_EQUAL(ToString(ConvertOpeningHours(tts)), "Mo, We, Fr 08:00-10:00; Sa-Su 13:00-22:00", ()); + TEST_EQUAL(ToString(MakeOpeningHours(tts)), "Mo, We, Fr 08:00-10:00; Sa-Su 13:00-22:00", ()); } { TimeTableSet tts; @@ -308,7 +307,7 @@ UNIT_TEST(TimeTableSt2OpeningHours) TEST(tt.SetOpeningTime({11_h, 24_h}), ()); TEST(tt.Commit(), ()); - TEST_EQUAL(ToString(ConvertOpeningHours(tts)), "Mo-Su 11:00-24:00", ()); + TEST_EQUAL(ToString(MakeOpeningHours(tts)), "Mo-Su 11:00-24:00", ()); } { TimeTableSet tts; @@ -336,7 +335,7 @@ UNIT_TEST(TimeTableSt2OpeningHours) TEST(tts.Append(tt), ()); } - TEST_EQUAL(ToString(ConvertOpeningHours(tts)), + TEST_EQUAL(ToString(MakeOpeningHours(tts)), "Mo, We-Th 08:00-13:00, 14:00-20:00; " "Sa 09:00-13:00, 14:00-18:00", ()); } diff --git a/editor/ui2oh.cpp b/editor/ui2oh.cpp index 87ea976694..3e22e2561a 100644 --- a/editor/ui2oh.cpp +++ b/editor/ui2oh.cpp @@ -55,27 +55,40 @@ void SetUpTimeTable(osmoh::TTimespans spans, editor::ui::TimeTable & tt) int32_t WeekdayNumber(osmoh::Weekday const wd) { return static_cast(wd); } constexpr uint32_t kDaysInWeek = 7; + +// Shifts values from 1 to 7 like this: 1 2 3 4 5 6 7 -> 2 3 4 5 6 7 1 int32_t NextWeekdayNumber(osmoh::Weekday const wd) { auto dayNumber = WeekdayNumber(wd); - return (dayNumber + kDaysInWeek) % kDaysInWeek + 1; + // If first element of the gourp would be evaluated to 0 + // the resulting formula whould be (dayNumber + 1) % kDaysInWeek. + // Since the first one evaluates to 1 + // the formula is: + return dayNumber % kDaysInWeek + 1; } +// Returns a vector of Weekdays with no gaps and with Sunday as the last day. +// Exampls: +// su, mo, we -> mo, we, su; +// su, mo, fr, sa -> fr, sa, su, mo. vector RemoveInversion(editor::ui::TOpeningDays const & days) { vector result(begin(days), end(days)); - if (NextWeekdayNumber(result.back()) != WeekdayNumber(result.front())) + if ((NextWeekdayNumber(result.back()) != WeekdayNumber(result.front()) && + result.back() != osmoh::Weekday::Sunday) || result.size() < 2) return result; auto inversion = adjacent_find(begin(result), end(result), [](osmoh::Weekday const a, osmoh::Weekday const b) { - return NextWeekdayNumber(a) != WeekdayNumber(b) || - a == osmoh::Weekday::Sunday; + return NextWeekdayNumber(a) != WeekdayNumber(b); }); - if (inversion != end(result) && ++inversion != end(result)) - rotate(begin(result), inversion, end(result)); + if (inversion != end(result)) + rotate(begin(result), ++inversion, end(result)); + + if (result.front() == osmoh::Weekday::Sunday) + rotate(begin(result), begin(result) + 1, end(result)); return result; } @@ -141,7 +154,7 @@ osmoh::TTimespans MakeTimespans(editor::ui::TimeTable const & tt) namespace editor { -osmoh::OpeningHours ConvertOpeningHours(ui::TimeTableSet const & tts) +osmoh::OpeningHours MakeOpeningHours(ui::TimeTableSet const & tts) { osmoh::TRuleSequences rule; for (auto const & tt : tts) @@ -155,7 +168,7 @@ osmoh::OpeningHours ConvertOpeningHours(ui::TimeTableSet const & tts) return rule; } -bool ConvertOpeningHours(osmoh::OpeningHours const & oh, ui::TimeTableSet & tts) +bool MakeTimeTableSet(osmoh::OpeningHours const & oh, ui::TimeTableSet & tts) { if (!oh.IsValid()) return false; diff --git a/editor/ui2oh.hpp b/editor/ui2oh.hpp index 8255d73069..1cf223514c 100644 --- a/editor/ui2oh.hpp +++ b/editor/ui2oh.hpp @@ -11,7 +11,6 @@ class OpeningHours; namespace editor { -osmoh::OpeningHours ConvertOpeningHours(ui::TimeTableSet const & tts); -bool ConvertOpeningHours(osmoh::OpeningHours const & oh, ui::TimeTableSet & tts); -bool ConvertOpeningHours(string oh, ui::TimeTableSet & tts); +osmoh::OpeningHours MakeOpeningHours(ui::TimeTableSet const & tts); +bool MakeTimeTableSet(osmoh::OpeningHours const & oh, ui::TimeTableSet & tts); } // namespace editor