1 #include <gtest/gtest.h>
\r
3 #include "../mock/mock_frame_producer.h"
\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
10 using namespace caspar;
\r
11 using namespace caspar::core;
\r
13 TEST(layer_test, load_nullptr)
\r
15 core::renderer::layer layer;
\r
17 ASSERT_THROW(layer.load(nullptr), null_argument);
\r
20 TEST(layer_test, load)
\r
22 core::renderer::layer layer;
\r
23 auto background = std::make_shared<mock_frame_producer>();
\r
25 layer.load(background);
\r
27 ASSERT_TRUE(layer.get_frame() == nullptr);
\r
28 ASSERT_TRUE(layer.active() == nullptr);
\r
29 ASSERT_TRUE(layer.background() == background);
\r
32 TEST(layer_test, load_auto_play)
\r
34 core::renderer::layer layer;
\r
35 auto active = std::make_shared<mock_frame_producer>();
\r
37 layer.load(active, renderer::load_option::auto_play);
\r
39 ASSERT_TRUE(layer.get_frame() != nullptr);
\r
40 ASSERT_TRUE(layer.active() == active);
\r
41 ASSERT_TRUE(layer.background() == nullptr);
\r
44 TEST(layer_test, load_active)
\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
50 layer.load(active, renderer::load_option::auto_play);
\r
51 layer.load(background);
\r
53 ASSERT_TRUE(layer.get_frame() != nullptr);
\r
54 ASSERT_TRUE(layer.active() == active);
\r
55 ASSERT_TRUE(layer.background() == background);
\r
58 TEST(layer_test, load_preview)
\r
60 core::renderer::layer layer;
\r
61 auto background = std::make_shared<mock_frame_producer>();
\r
63 layer.load(background, renderer::load_option::preview);
\r
65 auto frame = layer.get_frame();
\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
74 TEST(layer_test, load_preview_active)
\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
80 layer.load(active, renderer::load_option::auto_play);
\r
81 layer.load(background, renderer::load_option::preview);
\r
83 auto frame = layer.get_frame();
\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
91 TEST(layer_test, load_play)
\r
93 core::renderer::layer layer;
\r
94 auto active = std::make_shared<mock_frame_producer>();
\r
99 ASSERT_TRUE(layer.get_frame() != nullptr);
\r
100 ASSERT_TRUE(layer.active() == active);
\r
101 ASSERT_TRUE(layer.background() == nullptr);
\r
105 TEST(layer_test, load_play2)
\r
107 core::renderer::layer layer;
\r
110 auto frame = layer.get_frame();
\r
112 ASSERT_TRUE(frame == nullptr);
\r
115 TEST(layer_test, pause)
\r
117 core::renderer::layer layer;
\r
118 auto active = std::make_shared<mock_frame_producer>();
\r
120 layer.load(active, renderer::load_option::auto_play);
\r
122 auto frame = layer.get_frame();
\r
126 ASSERT_TRUE(layer.active() == active);
\r
127 ASSERT_TRUE(layer.get_frame() == frame);
\r
131 ASSERT_TRUE(layer.active() == active);
\r
132 ASSERT_TRUE(layer.get_frame() != frame);
\r
135 TEST(layer_test, stop)
\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
141 layer.load(active, renderer::load_option::auto_play);
\r
142 layer.load(background, renderer::load_option::preview);
\r
147 ASSERT_TRUE(layer.get_frame() == nullptr);
\r
148 ASSERT_TRUE(layer.active() == nullptr);
\r
149 ASSERT_TRUE(layer.background() == background);;
\r
152 TEST(layer_test, clear)
\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
158 layer.load(active, renderer::load_option::auto_play);
\r
159 layer.load(background, renderer::load_option::preview);
\r
162 ASSERT_TRUE(layer.get_frame() == nullptr);
\r
163 ASSERT_TRUE(layer.active() == nullptr);
\r
164 ASSERT_TRUE(layer.background() == nullptr);
\r
167 TEST(layer_test, following_producer)
\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
174 ASSERT_TRUE(layer.get_frame() == nullptr);
\r
175 ASSERT_TRUE(layer.active() == nullptr);
\r
177 layer.load(active, renderer::load_option::auto_play);
\r
178 active->set_following_producer(following);
\r
180 ASSERT_TRUE(layer.get_frame() != nullptr);
\r
181 ASSERT_TRUE(layer.active() == following);
\r
184 TEST(layer_test, leading_producer)
\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
191 ASSERT_TRUE(layer.get_frame() != nullptr);
\r
192 ASSERT_TRUE(layer.active() == active);
\r
194 layer.load(active2, renderer::load_option::auto_play);
\r
196 ASSERT_TRUE(layer.get_frame() != nullptr);
\r
197 ASSERT_TRUE(layer.active() == active2);
\r
200 TEST(layer_test, get_frame_exception)
\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
206 ASSERT_TRUE(layer.get_frame() == nullptr);
\r
207 ASSERT_TRUE(layer.active() == nullptr);
\r