#include <gtest/gtest.h>\r
\r
+#include "../mock/mock_frame_producer.h"\r
+\r
#include <core/frame/gpu_frame.h>\r
#include <core/renderer/layer.h>\r
#include <core/producer/frame_producer.h>\r
using namespace caspar;\r
using namespace caspar::core;\r
\r
-struct mock_frame_producer : public frame_producer\r
-{\r
- gpu_frame_ptr get_frame()\r
- { return std::make_shared<gpu_frame>(0, 0); }\r
- std::shared_ptr<frame_producer> get_following_producer() const \r
- { return nullptr; }\r
- void set_leading_producer(const std::shared_ptr<frame_producer>&) \r
- {}\r
- const frame_format_desc& get_frame_format_desc() const\r
- {return frame_format_desc();}\r
- void initialize(const frame_factory_ptr& factory)\r
- {}\r
-};\r
-\r
TEST(layer_test, load_nullptr) \r
{\r
core::renderer::layer layer;\r
auto background = std::make_shared<mock_frame_producer>();\r
\r
layer.load(background);\r
-\r
- auto frame = layer.get_frame();\r
-\r
+ \r
+ ASSERT_TRUE(layer.get_frame() == nullptr);\r
ASSERT_TRUE(layer.active() == nullptr);\r
ASSERT_TRUE(layer.background() == background);\r
- ASSERT_TRUE(frame == nullptr);\r
}\r
\r
TEST(layer_test, load_auto_play)\r
auto active = std::make_shared<mock_frame_producer>();\r
\r
layer.load(active, renderer::load_option::auto_play);\r
- \r
- auto frame = layer.get_frame();\r
-\r
+ \r
+ ASSERT_TRUE(layer.get_frame() != nullptr);\r
ASSERT_TRUE(layer.active() == active);\r
ASSERT_TRUE(layer.background() == nullptr);\r
- ASSERT_TRUE(frame != nullptr);\r
}\r
\r
TEST(layer_test, load_active)\r
layer.load(active, renderer::load_option::auto_play);\r
layer.load(background);\r
\r
- auto frame = layer.get_frame();\r
-\r
+ ASSERT_TRUE(layer.get_frame() != nullptr);\r
ASSERT_TRUE(layer.active() == active);\r
ASSERT_TRUE(layer.background() == background);\r
- ASSERT_TRUE(frame != nullptr);\r
}\r
\r
TEST(layer_test, load_preview)\r
layer.load(background, renderer::load_option::preview);\r
\r
auto frame = layer.get_frame();\r
-\r
+ \r
+ ASSERT_TRUE(frame != nullptr);\r
+ ASSERT_TRUE(layer.get_frame() == frame);\r
ASSERT_TRUE(layer.active() == nullptr);\r
ASSERT_TRUE(layer.background() == background);\r
- ASSERT_TRUE(frame != nullptr);\r
ASSERT_TRUE(frame->audio_data().empty());\r
}\r
\r
\r
layer.load(active, renderer::load_option::auto_play);\r
layer.load(background, renderer::load_option::preview);\r
- \r
+ \r
auto frame = layer.get_frame();\r
\r
+ ASSERT_TRUE(frame != nullptr);\r
+ ASSERT_TRUE(layer.get_frame() == frame);\r
ASSERT_TRUE(layer.active() == nullptr);\r
ASSERT_TRUE(layer.background() == background);\r
- ASSERT_TRUE(frame != nullptr);\r
}\r
\r
TEST(layer_test, load_play)\r
\r
layer.load(active);\r
layer.play();\r
+ \r
+ ASSERT_TRUE(layer.get_frame() != nullptr);\r
+ ASSERT_TRUE(layer.active() == active);\r
+ ASSERT_TRUE(layer.background() == nullptr);\r
+}\r
+\r
+\r
+TEST(layer_test, load_play2)\r
+{ \r
+ core::renderer::layer layer;\r
+ layer.play();\r
+\r
+ auto frame = layer.get_frame();\r
+\r
+ ASSERT_TRUE(frame == nullptr);\r
+}\r
+\r
+TEST(layer_test, pause)\r
+{\r
+ core::renderer::layer layer;\r
+ auto active = std::make_shared<mock_frame_producer>();\r
\r
+ layer.load(active, renderer::load_option::auto_play);\r
+ \r
auto frame = layer.get_frame();\r
\r
+ layer.pause();\r
+ \r
+ ASSERT_TRUE(layer.active() == active);\r
+ ASSERT_TRUE(layer.get_frame() == frame);\r
+\r
+ layer.play();\r
+ \r
ASSERT_TRUE(layer.active() == active);\r
+ ASSERT_TRUE(layer.get_frame() != frame);\r
+}\r
+\r
+TEST(layer_test, stop)\r
+{\r
+ core::renderer::layer layer;\r
+ auto active = std::make_shared<mock_frame_producer>();\r
+ auto background = std::make_shared<mock_frame_producer>();\r
+\r
+ layer.load(active, renderer::load_option::auto_play);\r
+ layer.load(background, renderer::load_option::preview);\r
+ layer.get_frame();\r
+\r
+ layer.stop();\r
+ \r
+ ASSERT_TRUE(layer.get_frame() == nullptr);\r
+ ASSERT_TRUE(layer.active() == nullptr);\r
+ ASSERT_TRUE(layer.background() == background);;\r
+}\r
+\r
+TEST(layer_test, clear)\r
+{\r
+ core::renderer::layer layer;\r
+ auto active = std::make_shared<mock_frame_producer>();\r
+ auto background = std::make_shared<mock_frame_producer>();\r
+\r
+ layer.load(active, renderer::load_option::auto_play);\r
+ layer.load(background, renderer::load_option::preview);\r
+ layer.clear();\r
+ \r
+ ASSERT_TRUE(layer.get_frame() == nullptr);\r
+ ASSERT_TRUE(layer.active() == nullptr);\r
ASSERT_TRUE(layer.background() == nullptr);\r
- ASSERT_TRUE(frame != nullptr);\r
}\r
+\r
+TEST(layer_test, following_producer)\r
+{\r
+ core::renderer::layer layer;\r
+ auto active = std::make_shared<mock_frame_producer>(true);\r
+ auto following = std::make_shared<mock_frame_producer>();\r
+ layer.load(active, renderer::load_option::auto_play);\r
+ \r
+ ASSERT_TRUE(layer.get_frame() == nullptr);\r
+ ASSERT_TRUE(layer.active() == nullptr);\r
+ \r
+ layer.load(active, renderer::load_option::auto_play);\r
+ active->set_following_producer(following);\r
+ \r
+ ASSERT_TRUE(layer.get_frame() != nullptr);\r
+ ASSERT_TRUE(layer.active() == following);\r
+}\r
+\r
+TEST(layer_test, leading_producer)\r
+{\r
+ core::renderer::layer layer;\r
+ auto active = std::make_shared<mock_frame_producer>();\r
+ auto active2 = std::make_shared<mock_frame_producer>();\r
+ layer.load(active, renderer::load_option::auto_play);\r
+ \r
+ ASSERT_TRUE(layer.get_frame() != nullptr);\r
+ ASSERT_TRUE(layer.active() == active);\r
+ \r
+ layer.load(active2, renderer::load_option::auto_play);\r
+ \r
+ ASSERT_TRUE(layer.get_frame() != nullptr);\r
+ ASSERT_TRUE(layer.active() == active2);\r
+}\r
+\r
+TEST(layer_test, get_frame_exception)\r
+{\r
+ core::renderer::layer layer;\r
+ auto active = std::make_shared<mock_frame_producer>(false, true);\r
+ layer.load(active, renderer::load_option::auto_play);\r
+ \r
+ ASSERT_TRUE(layer.get_frame() == nullptr);\r
+ ASSERT_TRUE(layer.active() == nullptr);\r
+}
\ No newline at end of file