Add schedule sync and schedule-aware playback
This commit is contained in:
@@ -17,6 +17,7 @@ using radiantwave::scroller::StreamColor;
|
||||
using radiantwave::scroller::buildStreams;
|
||||
using radiantwave::scroller::kDefaultRepeatCount;
|
||||
using radiantwave::scroller::kSelectedRepeatCount;
|
||||
using radiantwave::scroller::minuteInScheduleBlock;
|
||||
|
||||
const std::string kDefaultId = "default";
|
||||
|
||||
@@ -185,6 +186,77 @@ TEST(ScrollerStreamsTest, MissingDefaultStillStreamsSelected)
|
||||
EXPECT_EQ(streams[0].repeat, kSelectedRepeatCount);
|
||||
}
|
||||
|
||||
TEST(ScrollerStreamsTest, MinuteInScheduleBlockDaytime)
|
||||
{
|
||||
// 06:00 (360) to 08:00 (480), half-open.
|
||||
EXPECT_FALSE(minuteInScheduleBlock(359, 360, 480, false));
|
||||
EXPECT_TRUE(minuteInScheduleBlock(360, 360, 480, false));
|
||||
EXPECT_TRUE(minuteInScheduleBlock(479, 360, 480, false));
|
||||
EXPECT_FALSE(minuteInScheduleBlock(480, 360, 480, false));
|
||||
}
|
||||
|
||||
TEST(ScrollerStreamsTest, MinuteInScheduleBlockOvernight)
|
||||
{
|
||||
// 21:00 (1260) to 09:00 (540) wraps past midnight.
|
||||
EXPECT_TRUE(minuteInScheduleBlock(1260, 1260, 540, true));
|
||||
EXPECT_TRUE(minuteInScheduleBlock(1439, 1260, 540, true));
|
||||
EXPECT_TRUE(minuteInScheduleBlock(0, 1260, 540, true));
|
||||
EXPECT_TRUE(minuteInScheduleBlock(539, 1260, 540, true));
|
||||
EXPECT_FALSE(minuteInScheduleBlock(540, 1260, 540, true));
|
||||
EXPECT_FALSE(minuteInScheduleBlock(1259, 1260, 540, true));
|
||||
}
|
||||
|
||||
TEST(ScrollerStreamsTest, ScheduledIdsDriveOrderRegardlessOfSelection)
|
||||
{
|
||||
ProclamationRecord p1;
|
||||
p1.id = "one";
|
||||
p1.title = "One";
|
||||
p1.content = "x";
|
||||
p1.selected = false;
|
||||
|
||||
ProclamationRecord p2;
|
||||
p2.id = "two";
|
||||
p2.title = "Two";
|
||||
p2.content = "y";
|
||||
p2.selected = false;
|
||||
|
||||
ProclamationRecord def;
|
||||
def.id = kDefaultId;
|
||||
def.title = "Default";
|
||||
def.content = "z";
|
||||
|
||||
// Explicit order two -> one, interleaved with the default. Unknown ids are
|
||||
// skipped; the `selected` flag is ignored.
|
||||
std::vector<std::string> scheduled = {"two", "missing", "one"};
|
||||
auto streams = buildStreams({p1, p2, def}, {}, palette(), {}, kDefaultId, &scheduled);
|
||||
|
||||
ASSERT_EQ(streams.size(), 4u);
|
||||
EXPECT_EQ(streams[0].name, "Two");
|
||||
EXPECT_EQ(streams[1].name, "Default");
|
||||
EXPECT_EQ(streams[2].name, "One");
|
||||
EXPECT_EQ(streams[3].name, "Default");
|
||||
}
|
||||
|
||||
TEST(ScrollerStreamsTest, EmptyScheduleFallsBackToDefault)
|
||||
{
|
||||
ProclamationRecord p1;
|
||||
p1.id = "one";
|
||||
p1.title = "One";
|
||||
p1.content = "x";
|
||||
p1.selected = true;
|
||||
|
||||
ProclamationRecord def;
|
||||
def.id = kDefaultId;
|
||||
def.title = "Default";
|
||||
def.content = "y";
|
||||
|
||||
std::vector<std::string> scheduled; // empty block
|
||||
auto streams = buildStreams({p1, def}, {}, palette(), {}, kDefaultId, &scheduled);
|
||||
|
||||
ASSERT_EQ(streams.size(), 1u);
|
||||
EXPECT_EQ(streams[0].name, "Default");
|
||||
}
|
||||
|
||||
TEST(ScrollerStreamsTest, SplitsGluedSentencePunctuation)
|
||||
{
|
||||
ProclamationRecord p1;
|
||||
|
||||
Reference in New Issue
Block a user