]> git.sesse.net Git - casparcg/blob - test/core/renderer/layer_test.cpp
2.0.0.2:
[casparcg] / test / core / renderer / layer_test.cpp
1 #include <gtest/gtest.h>\r
2 \r
3 #include "../mock/mock_frame_producer.h"\r
4 \r
5 #include <core/frame/gpu_frame.h>\r
6 #include <core/renderer/layer.h>\r
7 #include <core/producer/frame_producer.h>\r
8 #include <common/exception/exceptions.h>\r
9 \r
10 using namespace caspar;\r
11 using namespace caspar::core;\r
12 \r
13 TEST(layer_test, load_nullptr) \r
14 {\r
15         core::renderer::layer layer;\r
16 \r
17         ASSERT_THROW(layer.load(nullptr), null_argument);\r
18 }\r
19 \r
20 TEST(layer_test, load)\r
21 {       \r
22         core::renderer::layer layer;\r
23         auto background = std::make_shared<mock_frame_producer>();\r
24 \r
25         layer.load(background);\r
26         \r
27         ASSERT_TRUE(layer.get_frame() == nullptr);\r
28         ASSERT_TRUE(layer.active() == nullptr);\r
29         ASSERT_TRUE(layer.background() == background);\r
30 }\r
31 \r
32 TEST(layer_test, load_auto_play)\r
33 {       \r
34         core::renderer::layer layer;\r
35         auto active = std::make_shared<mock_frame_producer>();\r
36 \r
37         layer.load(active, renderer::load_option::auto_play);\r
38                 \r
39         ASSERT_TRUE(layer.get_frame() != nullptr);\r
40         ASSERT_TRUE(layer.active() == active);\r
41         ASSERT_TRUE(layer.background() == nullptr);\r
42 }\r
43 \r
44 TEST(layer_test, load_active)\r
45 {       \r
46         core::renderer::layer layer;\r
47         auto active = std::make_shared<mock_frame_producer>();\r
48         auto background = std::make_shared<mock_frame_producer>();\r
49 \r
50         layer.load(active, renderer::load_option::auto_play);\r
51         layer.load(background);\r
52         \r
53         ASSERT_TRUE(layer.get_frame() != nullptr);\r
54         ASSERT_TRUE(layer.active() == active);\r
55         ASSERT_TRUE(layer.background() == background);\r
56 }\r
57 \r
58 TEST(layer_test, load_preview)\r
59 {       \r
60         core::renderer::layer layer;\r
61         auto background = std::make_shared<mock_frame_producer>();\r
62 \r
63         layer.load(background, renderer::load_option::preview);\r
64 \r
65         auto frame = layer.get_frame();\r
66         \r
67         ASSERT_TRUE(frame != nullptr);\r
68         ASSERT_TRUE(layer.get_frame() == frame);\r
69         ASSERT_TRUE(layer.active() == nullptr);\r
70         ASSERT_TRUE(layer.background() == background);\r
71         ASSERT_TRUE(frame->audio_data().empty());\r
72 }\r
73 \r
74 TEST(layer_test, load_preview_active)\r
75 {       \r
76         core::renderer::layer layer;\r
77         auto active = std::make_shared<mock_frame_producer>();\r
78         auto background = std::make_shared<mock_frame_producer>();\r
79 \r
80         layer.load(active, renderer::load_option::auto_play);\r
81         layer.load(background, renderer::load_option::preview);\r
82                 \r
83         auto frame = layer.get_frame();\r
84 \r
85         ASSERT_TRUE(frame != nullptr);\r
86         ASSERT_TRUE(layer.get_frame() == frame);\r
87         ASSERT_TRUE(layer.active() == nullptr);\r
88         ASSERT_TRUE(layer.background() == background);\r
89 }\r
90 \r
91 TEST(layer_test, load_play)\r
92 {       \r
93         core::renderer::layer layer;\r
94         auto active = std::make_shared<mock_frame_producer>();\r
95 \r
96         layer.load(active);\r
97         layer.play();\r
98         \r
99         ASSERT_TRUE(layer.get_frame() != nullptr);\r
100         ASSERT_TRUE(layer.active() == active);\r
101         ASSERT_TRUE(layer.background() == nullptr);\r
102 }\r
103 \r
104 \r
105 TEST(layer_test, load_play2)\r
106 {       \r
107         core::renderer::layer layer;\r
108         layer.play();\r
109 \r
110         auto frame = layer.get_frame();\r
111 \r
112         ASSERT_TRUE(frame == nullptr);\r
113 }\r
114 \r
115 TEST(layer_test, pause)\r
116 {\r
117         core::renderer::layer layer;\r
118         auto active = std::make_shared<mock_frame_producer>();\r
119 \r
120         layer.load(active, renderer::load_option::auto_play);\r
121         \r
122         auto frame = layer.get_frame();\r
123 \r
124         layer.pause();\r
125         \r
126         ASSERT_TRUE(layer.active() == active);\r
127         ASSERT_TRUE(layer.get_frame() == frame);\r
128 \r
129         layer.play();\r
130         \r
131         ASSERT_TRUE(layer.active() == active);\r
132         ASSERT_TRUE(layer.get_frame() != frame);\r
133 }\r
134 \r
135 TEST(layer_test, stop)\r
136 {\r
137         core::renderer::layer layer;\r
138         auto active = std::make_shared<mock_frame_producer>();\r
139         auto background = std::make_shared<mock_frame_producer>();\r
140 \r
141         layer.load(active, renderer::load_option::auto_play);\r
142         layer.load(background, renderer::load_option::preview);\r
143         layer.get_frame();\r
144 \r
145         layer.stop();\r
146                 \r
147         ASSERT_TRUE(layer.get_frame() == nullptr);\r
148         ASSERT_TRUE(layer.active() == nullptr);\r
149         ASSERT_TRUE(layer.background() == background);;\r
150 }\r
151 \r
152 TEST(layer_test, clear)\r
153 {\r
154         core::renderer::layer layer;\r
155         auto active = std::make_shared<mock_frame_producer>();\r
156         auto background = std::make_shared<mock_frame_producer>();\r
157 \r
158         layer.load(active, renderer::load_option::auto_play);\r
159         layer.load(background, renderer::load_option::preview);\r
160         layer.clear();\r
161                 \r
162         ASSERT_TRUE(layer.get_frame() == nullptr);\r
163         ASSERT_TRUE(layer.active() == nullptr);\r
164         ASSERT_TRUE(layer.background() == nullptr);\r
165 }\r
166 \r
167 TEST(layer_test, following_producer)\r
168 {\r
169         core::renderer::layer layer;\r
170         auto active = std::make_shared<mock_frame_producer>(true);\r
171         auto following = std::make_shared<mock_frame_producer>();\r
172         layer.load(active, renderer::load_option::auto_play);\r
173                 \r
174         ASSERT_TRUE(layer.get_frame() == nullptr);\r
175         ASSERT_TRUE(layer.active() == nullptr);\r
176                 \r
177         layer.load(active, renderer::load_option::auto_play);\r
178         active->set_following_producer(following);\r
179         \r
180         ASSERT_TRUE(layer.get_frame() != nullptr);\r
181         ASSERT_TRUE(layer.active() == following);\r
182 }\r
183 \r
184 TEST(layer_test, leading_producer)\r
185 {\r
186         core::renderer::layer layer;\r
187         auto active = std::make_shared<mock_frame_producer>();\r
188         auto active2 = std::make_shared<mock_frame_producer>();\r
189         layer.load(active, renderer::load_option::auto_play);\r
190                 \r
191         ASSERT_TRUE(layer.get_frame() != nullptr);\r
192         ASSERT_TRUE(layer.active() == active);\r
193                 \r
194         layer.load(active2, renderer::load_option::auto_play);\r
195         \r
196         ASSERT_TRUE(layer.get_frame() != nullptr);\r
197         ASSERT_TRUE(layer.active() == active2);\r
198 }\r
199 \r
200 TEST(layer_test, get_frame_exception)\r
201 {\r
202         core::renderer::layer layer;\r
203         auto active = std::make_shared<mock_frame_producer>(false, true);\r
204         layer.load(active, renderer::load_option::auto_play);\r
205                         \r
206         ASSERT_TRUE(layer.get_frame() == nullptr);\r
207         ASSERT_TRUE(layer.active() == nullptr);\r
208 }