Newer
Older
process_podcast / segment / tests / test_frame_segment.py
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)