]> git.sesse.net Git - casparcg/blob - test/producer/transition/transition_producer_test.cpp
2.0.0.2:
[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/frame/frame_format.h>\r
7 #include <core/frame/gpu_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 frame_format_desc test_format = frame_format_desc::format_descs[frame_format::pal];\r
15 \r
16 TEST(transition_producer, constructor_dest_nullptr) \r
17 {\r
18         ASSERT_THROW(transition_producer(nullptr, transition_info(), test_format);\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(), test_format);\r
27 \r
28         ASSERT_TRUE(producer.get_following_producer() == dest);\r
29 }\r
30 \r
31 TEST(transition_producer, get_frame_format_desc) \r
32 {\r
33         auto dest = std::make_shared<mock_frame_producer>();\r
34         \r
35         transition_producer producer(dest, transition_info(), test_format);\r
36 \r
37         ASSERT_TRUE(producer.get_frame_format_desc() == test_format);\r
38 }\r
39 \r
40 TEST(transition_producer, null_dest_get_frame) \r
41 {\r
42         auto source = std::make_shared<mock_frame_producer>();\r
43         \r
44         transition_producer producer(nullptr, transition_info(), test_format);\r
45         producer.set_leading_producer(source);\r
46 \r
47         ASSERT_TRUE(producer.get_frame() == nullptr);\r
48 }\r
49 \r
50 TEST(transition_producer, null_source_get_frame_cut) \r
51 {\r
52         auto dest = std::make_shared<mock_frame_producer>();\r
53         \r
54         transition_info info;\r
55         info.type = transition_type::cut;\r
56 \r
57         transition_producer producer(dest, info, test_format);\r
58 \r
59         ASSERT_TRUE(producer.get_frame() == nullptr);\r
60 }\r
61 \r
62 TEST(transition_producer, initialize) \r
63 {\r
64         auto dest = std::make_shared<mock_frame_producer>();\r
65         \r
66         transition_producer producer(dest, transition_info(), test_format);\r
67         producer.initialize(nullptr);\r
68         \r
69         ASSERT_TRUE(dest->is_initialized());\r
70 }\r
71 \r
72 TEST(transition_producer, duration) \r
73 {\r
74         auto dest = std::make_shared<mock_frame_producer>();\r
75         auto source = std::make_shared<mock_frame_producer>();\r
76         \r
77         transition_info info;\r
78         info.type = transition_type::cut;\r
79         info.duration = 3;\r
80 \r
81         transition_producer producer(dest, info, test_format);\r
82         producer.set_leading_producer(source);\r
83 \r
84         for(int n = 0; n < info.duration; ++n)\r
85         {\r
86                 auto frame = producer.get_frame();\r
87                 ASSERT_TRUE(std::static_pointer_cast<mock_frame>(frame)->tag == source.get());\r
88         }\r
89         ASSERT_TRUE(producer.get_frame() == nullptr);\r
90 }