@@ -108,6 +108,64 @@ main(int argc, char** argv)
108
108
assertEqual (result[1 ].value , cl1.value );
109
109
});
110
110
111
+ tests.add_test (
112
+ " test_find_children_stack" , [] {
113
+ using namespace otio ;
114
+
115
+ SerializableObject::Retainer<Stack> stack = new Stack ();
116
+ SerializableObject::Retainer<Track> track = new Track;
117
+ SerializableObject::Retainer<Clip> clip = new Clip;
118
+ stack->append_child (track);
119
+ track->append_child (clip);
120
+
121
+ // Simple find.
122
+ clip->set_source_range (
123
+ TimeRange (RationalTime (0.0 , 24.0 ), RationalTime (3.0 , 24.0 )));
124
+ otio::ErrorStatus err;
125
+ auto items = stack->find_children (
126
+ &err,
127
+ TimeRange (RationalTime (0.0 , 24.0 ), RationalTime (1.0 , 24.0 )));
128
+ assertFalse (is_error (err));
129
+ assertEqual (items.size (), 2 );
130
+ assertTrue (
131
+ std::find (items.begin (), items.end (), track.value ) != items.end ());
132
+ assertTrue (
133
+ std::find (items.begin (), items.end (), clip.value ) != items.end ());
134
+
135
+ // Set a short source range on the track.
136
+ track->set_source_range (
137
+ TimeRange (RationalTime (0.0 , 24.0 ), RationalTime (2.0 , 24.0 )));
138
+ items = stack->find_children (
139
+ &err,
140
+ TimeRange (RationalTime (2.0 , 24.0 ), RationalTime (1.0 , 24.0 )));
141
+ assertFalse (is_error (err));
142
+ assertEqual (items.size (), 0 );
143
+
144
+ // Set a source range with a positive offset on the track.
145
+ track->set_source_range (
146
+ TimeRange (RationalTime (3.0 , 24.0 ), RationalTime (3.0 , 24.0 )));
147
+ items = stack->find_children (
148
+ &err,
149
+ TimeRange (RationalTime (2.0 , 24.0 ), RationalTime (1.0 , 24.0 )));
150
+ assertFalse (is_error (err));
151
+ assertEqual (items.size (), 1 );
152
+ assertTrue (
153
+ std::find (items.begin (), items.end (), track.value ) != items.end ());
154
+
155
+ // Set a source range with a negative offset on the track.
156
+ track->set_source_range (
157
+ TimeRange (RationalTime (-1.0 , 24.0 ), RationalTime (3.0 , 24.0 )));
158
+ items = stack->find_children (
159
+ &err,
160
+ TimeRange (RationalTime (1.0 , 24.0 ), RationalTime (1.0 , 24.0 )));
161
+ assertFalse (is_error (err));
162
+ assertEqual (items.size (), 2 );
163
+ assertTrue (
164
+ std::find (items.begin (), items.end (), track.value ) != items.end ());
165
+ assertTrue (
166
+ std::find (items.begin (), items.end (), clip.value ) != items.end ());
167
+ });
168
+
111
169
tests.run (argc, argv);
112
170
return 0 ;
113
171
}
0 commit comments