import unittest from segment import Segment, FrameSegment from segment.tests import SegmentSharedTestCase class FrameSegmentTestCase(SegmentSharedTestCase): """Test the FrameSegment class.""" EXPECTED_TYPE = "frame" EXPECTED_TRIM = "trim" EXPECTED_SETPTS = "setpts" EXPECTED_FRAME_NUMBER = 42 def setUp(self): """Set up for test.""" super().setUp() self.segment = FrameSegment( file=self.EXPECTED_INPUT_FILE, punch_in=self.EXPECTED_PUNCH_IN, punch_out=self.EXPECTED_PUNCH_OUT, input_stream=self.EXPECTED_INPUT_STREAM, frame_number=self.EXPECTED_FRAME_NUMBER) self.expected_input_options = [ "-loop", "1", "-t", str(self.EXPECTED_DURATION), "-i", self.EXPECTED_INPUT_FILE, ] self.expected_output_options = [ "-map", "{n}:v".format(n=self.segment.input_stream) ] def test_init(self): """Test segment initialises correctly.""" super().test_init() self.assertEqual( self.segment.frame_number, self.EXPECTED_FRAME_NUMBER, msg="frame number = {v}".format(v=self.EXPECTED_FRAME_NUMBER)) self.assertEqual( Segment._input_files[self.EXPECTED_INPUT_FILE], self.expected_input_options[:4], msg="input file {f}: {v}".format( f=self.EXPECTED_INPUT_FILE, v=self.expected_input_options[:4])) # Tricky to test generate_temp_file() because it uses pexpect. # use_frame() relies on the output from generate_temp_frame() # or generate_frame(). # def test_use_frame(self): # self.segment.use_frame() # pass def test_input_stream_specifier(self): """Test that input stream specifier is correctly generated.""" expected_specifier = "[{n}:v]".format( n=tuple(Segment._input_files).index(self.segment.input_file)) self.assertEqual( self.segment.input_stream_specifier(), expected_specifier) def test_output_stream_specifier(self): """Test that output stream specifier is correctly generated.""" expected_specifier = "[{n}:v]".format( n=tuple(Segment._input_files).index(self.segment.input_file)) self.assertEqual( self.segment.output_stream_specifier(), expected_specifier) def test_trim_filter(self): """Test that the trim filter is correctly generated.""" self.assertEqual(self.segment.trim_filter(), "") # Remove SegmentSharedTestCase from the namespace so we don't run # the shared tests twice. See <https://stackoverflow.com/a/22836015>. del(SegmentSharedTestCase)