Skip to content

Commit 9dcf4bf

Browse files
committed
add method to get play index
1 parent bb0afb2 commit 9dcf4bf

File tree

6 files changed

+131
-4
lines changed

6 files changed

+131
-4
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ name: Continuous Integration
33
on: [push]
44

55
jobs:
6-
build-library:
7-
name: "Build library"
6+
build:
7+
name: "Build"
88
runs-on: ubuntu-latest
99
steps:
1010
- uses: actions/checkout@v3

src/show/Show.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ void Show::play(unsigned long currentMicros) {
5454
void Show::playSingle(byte index, unsigned long currentMicros) {
5555
Animation *animation = this->animations[index];
5656

57-
if (animation == nullptr || !this->modeIsIn(2, MODE_DEFAULT, MODE_PAUSE)) {
57+
if (animation == nullptr || !this->modeIsIn(2, MODE_DEFAULT, MODE_PAUSE) ||
58+
(this->mode == MODE_PAUSE && playIndex != index)) {
5859
return;
5960
}
6061

@@ -138,6 +139,10 @@ byte Show::getMode() {
138139
return this->mode;
139140
}
140141

142+
byte Show::getPlayIndex() {
143+
return this->playIndex;
144+
}
145+
141146
void Show::run(unsigned long currentMicros) {
142147
switch (this->mode) {
143148
case MODE_PLAY:

src/show/Show.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class Show {
3939
static const byte MODE_LIVE = 7;
4040

4141
byte getMode();
42+
byte getPlayIndex();
4243
byte countAnimations();
4344

4445
void addAnimation(Animation &animation);
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
#include "BlenderServoAnimation.h"
2+
#include <unity.h>
3+
4+
using namespace BlenderServoAnimation;
5+
6+
#define FPS 60
7+
#define FRAMES 5
8+
9+
int prevMode = -1;
10+
int newMode = -1;
11+
12+
void setUp(void) {
13+
prevMode = -1;
14+
newMode = -1;
15+
}
16+
17+
void onModeChange(byte prevArg, byte newArg) {
18+
prevMode = prevArg;
19+
newMode = newArg;
20+
}
21+
22+
void test_different_mode(void) {
23+
Show show;
24+
Animation animationA(FPS, FRAMES);
25+
Animation animationB(FPS, FRAMES);
26+
show.addAnimation(animationA);
27+
show.addAnimation(animationB);
28+
show.onModeChange(onModeChange);
29+
30+
TEST_ASSERT_EQUAL(-1, prevMode);
31+
TEST_ASSERT_EQUAL(-1, newMode);
32+
show.playSingle(1, 0);
33+
TEST_ASSERT_EQUAL(Show::MODE_DEFAULT, prevMode);
34+
TEST_ASSERT_EQUAL(Show::MODE_PLAY_SINGLE, newMode);
35+
TEST_ASSERT_EQUAL(1, show.getPlayIndex());
36+
show.pause();
37+
TEST_ASSERT_EQUAL(Show::MODE_PLAY_SINGLE, prevMode);
38+
TEST_ASSERT_EQUAL(Show::MODE_PAUSE, newMode);
39+
}
40+
41+
void test_same_mode(void) {
42+
Show show;
43+
Animation animation(FPS, FRAMES);
44+
show.addAnimation(animation);
45+
show.onModeChange(onModeChange);
46+
47+
show.loop(0);
48+
TEST_ASSERT_EQUAL(Show::MODE_DEFAULT, prevMode);
49+
TEST_ASSERT_EQUAL(Show::MODE_LOOP, newMode);
50+
show.loop(0);
51+
TEST_ASSERT_EQUAL(Show::MODE_DEFAULT, prevMode);
52+
TEST_ASSERT_EQUAL(Show::MODE_LOOP, newMode);
53+
}
54+
55+
void test_all_modes(void) {
56+
Serial_ mock;
57+
Show show;
58+
Animation animation(FPS, FRAMES);
59+
show.addAnimation(animation);
60+
show.onModeChange(onModeChange);
61+
62+
show.play(0);
63+
TEST_ASSERT_EQUAL(Show::MODE_DEFAULT, prevMode);
64+
TEST_ASSERT_EQUAL(Show::MODE_PLAY, newMode);
65+
TEST_ASSERT_EQUAL(0, show.getPlayIndex());
66+
show.pause();
67+
TEST_ASSERT_EQUAL(Show::MODE_PLAY, prevMode);
68+
TEST_ASSERT_EQUAL(Show::MODE_PAUSE, newMode);
69+
TEST_ASSERT_EQUAL(0, show.getPlayIndex());
70+
show.playRandom(0);
71+
TEST_ASSERT_EQUAL(Show::MODE_PAUSE, prevMode);
72+
TEST_ASSERT_EQUAL(Show::MODE_PLAY_RANDOM, newMode);
73+
TEST_ASSERT_EQUAL(0, show.getPlayIndex());
74+
show.pause();
75+
show.playSingle(0, 0);
76+
TEST_ASSERT_EQUAL(Show::MODE_PAUSE, prevMode);
77+
TEST_ASSERT_EQUAL(Show::MODE_PLAY_SINGLE, newMode);
78+
TEST_ASSERT_EQUAL(0, show.getPlayIndex());
79+
show.pause();
80+
show.loop(0);
81+
TEST_ASSERT_EQUAL(Show::MODE_PAUSE, prevMode);
82+
TEST_ASSERT_EQUAL(Show::MODE_LOOP, newMode);
83+
TEST_ASSERT_EQUAL(0, show.getPlayIndex());
84+
show.stop();
85+
TEST_ASSERT_EQUAL(Show::MODE_LOOP, prevMode);
86+
TEST_ASSERT_EQUAL(Show::MODE_STOP, newMode);
87+
TEST_ASSERT_EQUAL(0, show.getPlayIndex());
88+
show.run(0);
89+
TEST_ASSERT_EQUAL(Show::MODE_STOP, prevMode);
90+
TEST_ASSERT_EQUAL(Show::MODE_DEFAULT, newMode);
91+
TEST_ASSERT_EQUAL(0, show.getPlayIndex());
92+
show.live(mock);
93+
TEST_ASSERT_EQUAL(Show::MODE_DEFAULT, prevMode);
94+
TEST_ASSERT_EQUAL(Show::MODE_LIVE, newMode);
95+
TEST_ASSERT_EQUAL(0, show.getPlayIndex());
96+
}
97+
98+
int main(int argc, char **argv) {
99+
UNITY_BEGIN();
100+
RUN_TEST(test_different_mode);
101+
RUN_TEST(test_same_mode);
102+
RUN_TEST(test_all_modes);
103+
UNITY_END();
104+
}

test/show/test_pause/test_pause.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ void test_pause(byte mode) {
6060
show.play(0);
6161
break;
6262
case Show::MODE_PLAY_SINGLE:
63-
show.playSingle(1, 0);
63+
show.playSingle(0, 0);
6464
break;
6565
case Show::MODE_PLAY_RANDOM:
6666
show.playRandom(0);

test/show/test_play_single/test_play_single.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,28 @@ void test_allowed(void) {
9191
TEST_ASSERT_EQUAL(Show::MODE_PLAY_SINGLE, show.getMode());
9292
}
9393

94+
void test_prevent_sudden_index_change(void) {
95+
Show show;
96+
Animation animationA(FPS, FRAMES);
97+
Animation animationB(FPS, FRAMES);
98+
show.addAnimation(animationA);
99+
show.addAnimation(animationB);
100+
101+
show.play(0);
102+
TEST_ASSERT_EQUAL(Show::MODE_PLAY, show.getMode());
103+
show.run(FRAME_MICROS);
104+
show.pause();
105+
TEST_ASSERT_EQUAL(Show::MODE_PAUSE, show.getMode());
106+
show.playSingle(1, 0);
107+
TEST_ASSERT_EQUAL(Show::MODE_PAUSE, show.getMode());
108+
}
109+
94110
int main(int argc, char **argv) {
95111
UNITY_BEGIN();
96112
RUN_TEST(test_play_single);
97113
RUN_TEST(test_without_animations);
98114
RUN_TEST(test_prevented);
99115
RUN_TEST(test_allowed);
116+
RUN_TEST(test_prevent_sudden_index_change);
100117
UNITY_END();
101118
}

0 commit comments

Comments
 (0)