== An Event should * define the needed attributes * support hash initialization * support block initialization * respond to ends_with_transition? with false if outgoing_transition_duration is zero * respond to ends_with_transition? with true if outgoing_transition_duration set above zero * respond to has_timewarp? with false if no timewarp assigned * respond to has_timewarp? with true if a timewarp is assigned * report rec_length as a difference of record timecodes * report rec_length_with_transition as a difference of record timecodes if no transition set * add transition length to rec_length_with_transition if a transition is set * return a default array for comments * respond false to has_transition? if incoming transition is set * respond true to has_transition? if incoming transition is set * respond true to black? if reel is BL * respond true to generator? if reel is BL or AX * report src_length as rec_length_with_transition * support capture_length as an alias to src_length * delegate src_length to the timewarp if it is there * report reverse? and reversed? based on the timewarp == A Parser should * store the passed framerate * return matchers tuned with the passed framerate * create a Timecode from stringified elements * parse from a String * parse from a File/IOish * properly parse a dissolve * return a spliced EDL if the sources allow == A TimewarpMatcher should * not create any extra events when used within a Parser * properly describe a speedup * properly describe a slomo == A reverse timewarp EDL coming from Avid should * be parsed properly == A Final Cut Pro originating reverse should * be interpreted properly == EventMatcher should * produce an Event * produce an Event with dissolve * set flag on the previous event in the stack when a dissolve is encountered (empty) * generate a Wipe * match the widest range of patterns * pass the framerate that it received upon instantiation to the Timecodes being created == CommentMatcher should * match a comment * apply the comment to the last clip on the stack == ClipNameMatcher should * match a clip name * not match a simple comment * apply the name to the last event on the stack == EffectMatcher should * not match a simple comment * match a dissolve name * apply the effect name to the transition of the last event on the stack == A complex EDL passed via Parser should * parse without errors * be properly rewritten from zero == A FinalCutPro speedup with fade at the end should * be parsed cleanly == A FinalCutPro speedup and reverse with fade at the end should * parse cleanly 49 specifications, 1 empty (145 requirements), 0 failures