]> git.sesse.net Git - casparcg/blob - test/producer/transition/transition_producer_test.cpp
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
[casparcg] / test / producer / transition / transition_producer_test.cpp
1 #include <gtest/gtest.h>\r
2 \r
3 #include "../../mock/mock_frame_producer.h"\r
4 #include "../../mock/mock_frame.h"\r
5 \r
6 #include <core/video/video_format.h>\r
7 #include <core/processor/frame.h>\r
8 #include <core/producer/transition/transition_producer.h>\r
9 #include <common/exception/exceptions.h>\r
10 \r
11 using namespace caspar;\r
12 using namespace caspar::core;\r
13 \r
14 video_format_desc test_format = video_format_desc::format_descs[video_format::pal];\r
15 \r
16 TEST(transition_producer, constructor_dest_nullptr) \r
17 {\r
18         ASSERT_THROW(transition_producer(nullptr, transition_info());\r
19                                         , null_argument);       \r
20 }\r
21 \r
22 TEST(transition_producer, get_following_producer) \r
23 {\r
24         auto dest = std::make_shared<mock_frame_producer>();\r
25         \r
26         transition_producer producer(dest, transition_info());\r
27 \r
28         ASSERT_TRUE(producer.get_following_producer() == dest);\r
29 }\r
30 \r
31 TEST(transition_producer, null_dest_get_frame) \r
32 {\r
33         auto source = std::make_shared<mock_frame_producer>();\r
34         \r
35         transition_producer producer(nullptr, transition_info());\r
36         producer.set_leading_producer(source);\r
37 \r
38         ASSERT_TRUE(producer.render_frame() == nullptr);\r
39 }\r
40 \r
41 TEST(transition_producer, null_source_get_frame_cut) \r
42 {\r
43         auto dest = std::make_shared<mock_frame_producer>();\r
44         \r
45         transition_info info;\r
46         info.type = transition::cut;\r
47 \r
48         transition_producer producer(dest, info);\r
49 \r
50         ASSERT_TRUE(producer.render_frame() == nullptr);\r
51 }\r
52 \r
53 TEST(transition_producer, initialize)\r
54 {\r
55         auto dest = std::make_shared<mock_frame_producer>();\r
56         \r
57         transition_producer producer(dest, transition_info());\r
58         producer.initialize(nullptr);\r
59         \r
60         ASSERT_TRUE(dest->is_initialized());\r
61 }\r
62 \r
63 TEST(transition_producer, duration) \r
64 {\r
65         auto dest = std::make_shared<mock_frame_producer>();\r
66         auto source = std::make_shared<mock_frame_producer>();\r
67         \r
68         transition_info info;\r
69         info.type = transition::cut;\r
70         info.duration = 3;\r
71 \r
72         transition_producer producer(dest, info);\r
73         producer.set_leading_producer(source);\r
74 \r
75         for(int n = 0; n < info.duration; ++n)\r
76         {\r
77                 auto frame = producer.render_frame();\r
78                 ASSERT_TRUE(std::static_pointer_cast<mock_frame>(frame)->tag == source.get());\r
79         }\r
80         ASSERT_TRUE(producer.render_frame() == nullptr);\r
81 }