@@ -108,6 +108,64 @@ main(int argc, char** argv)
108108 assertEqual (result[1 ].value , cl1.value );
109109 });
110110
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+
111169 tests.run (argc, argv);
112170 return 0 ;
113171}
0 commit comments