Пример #1
0
 def setUp(self):
     self.t = Transcription(self.LENGTHMS)
Пример #2
0
class TestTranscription(unittest.TestCase):
    LENGTHMS = 5000

    def setUp(self):
        self.t = Transcription(self.LENGTHMS)

    def test_create(self):
        self.assertEqual(self.t.list, [
            {'start': 0, 'data': ""}
            ])
        self.assertEqual(self.t.signalEnd, self.LENGTHMS)

    def test_split(self):
        # Raise errors for invalid times
        self.assertRaises(ValueError, self.t.split, -13)
        self.assertRaises(ValueError, self.t.split, 0)
        self.assertRaises(ValueError, self.t.split, 5000)
        self.assertRaises(ValueError, self.t.split, 5004)
        # Valid splits
        self.t.split(300)
        self.t.split(700)
        self.t.split(1700)
        self.t.split(500)
        self.t.split(1000)
        self.t.split(4)
        # Cannot split on a segment break
        self.assertRaises(ValueError, self.t.split, 700)
        self.assertEqual(self.t.list[0], {
            'start': 0,
            'data': ""
            })
        self.assertEqual(self.t.list[1], {
            'start': 4,
            'data': ""
            })
        self.assertEqual(self.t.list[2], {
            'start': 300,
            'data': ""
            })
        self.assertEqual(self.t.list[3], {
            'start': 500,
            'data': ""
            })
        self.assertEqual(self.t.list[4], {
            'start': 700,
            'data': ""
            })
        self.assertEqual(self.t.list[5], {
            'start': 1000,
            'data': ""
            })
        self.assertEqual(self.t.list[6], {
            'start': 1700,
            'data': ""
            })
        # Splitting the data between two segments
        self.t.edit("Hello World", index=5)
        self.t.split(1400, 4)
        self.assertEqual(self.t.list[5], {
            'start': 1000,
            'data': "Hell"
            })
        self.assertEqual(self.t.list[6], {
            'start': 1400,
            'data': "o World"
            })
        # Splitting without specifying data split point
        # (default behavior is leaving all data in "left" segment)
        self.t.split(1100)
        self.assertEqual(self.t.list[5], {
            'start': 1000,
            'data': "Hell"
            })
        self.assertEqual(self.t.list[6], {
            'start': 1100,
            'data': ""
            })
        # Splitting and placing all data into right segment
        self.t.split(1500, 0)
        self.assertEqual(self.t.list[7], {
            'start': 1400,
            'data': ""
            })
        self.assertEqual(self.t.list[8], {
            'start': 1500,
            'data': "o World"
            })

    def test_edit(self):
        self.assertRaises(IndexError, self.t.edit, "data", index=1)
        self.assertRaises(ValueError, self.t.edit, "data", time=-2)
        self.assertRaises(ValueError, self.t.edit, "data", time=5010)
        self.t.split(300)
        self.t.split(700)
        self.t.split(500)
        self.t.edit("Segment 0", index=0)
        self.t.edit("Segment 2", time=650)
        self.assertEqual(self.t.list[0], {
            'start': 0,
            'data': "Segment 0"
            })
        self.assertEqual(self.t.list[1], {
            'start': 300,
            'data': ""
            })
        self.assertEqual(self.t.list[2], {
            'start': 500,
            'data': "Segment 2"
            })
        self.assertEqual(self.t.list[3], {
            'start': 700,
            'data': ""
            })
        self.t.edit("Last Segment", index=-1)
        self.assertEqual(self.t.list[3], {
            'start': 700,
            'data': "Last Segment"
            })
        self.t.edit("Before segment 1", time=299)
        self.t.edit("Start of segment 1", time=300)
        self.assertEqual(self.t.list[0], {
            'start': 0,
            'data': "Before segment 1"
            })
        self.assertEqual(self.t.list[1], {
            'start': 300,
            'data': "Start of segment 1"
            })

    def test_join(self):
        self.t.split(300)
        self.t.split(700)
        self.t.split(500)
        self.t.split(4000)
        self.t.split(2000)
        self.t.edit("Segment 0", index=0)
        self.t.edit("Segment 1", index=1)
        self.t.edit("Segment 2", index=2)
        self.t.edit("Segment 3", index=3)
        self.t.edit("Segment 4", index=4)
        self.t.edit("Segment 5", index=5)
        self.assertRaises(ValueError, self.t.joinPrev, index=0)
        self.assertRaises(ValueError, self.t.joinNext, index=5)
        self.t.joinPrev(time=400)
        self.t.joinNext(index=2)
        self.assertEqual(self.t.list[0], {
            'start': 0,
            'data': "Segment 0Segment 1"
            })
        self.assertEqual(self.t.list[1], {
            'start': 500,
            'data': "Segment 2"
            })
        self.assertEqual(self.t.list[2], {
            'start': 700,
            'data': "Segment 3Segment 4"
            })
        self.assertEqual(self.t.list[3], {
            'start': 4000,
            'data': "Segment 5"
            })
        self.t.joinPrev(time=5000)
        self.t.joinNext(time=0)
        self.assertEqual(self.t.list[0], {
            'start': 0,
            'data': "Segment 0Segment 1Segment 2"
            })
        self.assertEqual(self.t.list[1], {
            'start': 700,
            'data': "Segment 3Segment 4Segment 5"
            })

    def test_shift(self):
        self.t.split(300)
        self.t.split(700)
        self.t.split(500)
        self.t.split(4000)
        self.t.split(2000)
        # Cannot shift a boundary past the edges of the signal
        self.assertRaises(ValueError, self.t.shiftPrev, -1, index=0)
        self.assertRaises(ValueError, self.t.shiftNext, 1, index=5)
        # Cannot shift a boundary so as to eliminate the last or next segment
        self.assertRaises(ValueError, self.t.shiftPrev, -200, index=2)
        self.assertRaises(ValueError, self.t.shiftNext, 2000, index=3)
        # Cannot shift a boundary so as to eliminate the current segment
        self.assertRaises(ValueError, self.t.shiftPrev, 200, index=2)
        self.assertRaises(ValueError, self.t.shiftNext, -2002, index=4)
        self.assertRaises(ValueError, self.t.shiftPrev, 303, time=0)
        self.assertRaises(ValueError, self.t.shiftNext, -1001, time=5000)
        # Valid shifts
        self.t.shiftPrev(-50, time=350)
        self.t.shiftNext(-25, time=3000)
        self.t.shiftPrev(75, time=650)
        self.t.shiftNext(100, time=1050)
        self.assertEqual(0, self.t.list[0]['start'])
        self.assertEqual(250, self.t.list[1]['start'])
        self.assertEqual(575, self.t.list[2]['start'])
        self.assertEqual(700, self.t.list[3]['start'])
        self.assertEqual(2100, self.t.list[4]['start'])
        self.assertEqual(3975, self.t.list[5]['start'])
        # Can shift a boundary on the signal edge *inward*
        # This action creates a new segment in the empty space on the edge.
        # The new segment should have no data.
        self.t.edit("Old first segment", index=0)
        self.t.edit("Old last segment", index=5)
        self.t.shiftPrev(20, index=0)
        self.t.shiftNext(-20, index=6)
        self.assertEqual(0, self.t.list[0]['start'])
        self.assertEqual(20, self.t.list[1]['start'])
        self.assertEqual("", self.t.list[0]['data'])
        self.assertEqual("Old first segment", self.t.list[1]['data'])
        self.assertEqual(3975, self.t.list[6]['start'])
        self.assertEqual(4980, self.t.list[7]['start'])
        self.assertEqual("Old last segment", self.t.list[6]['data'])
        self.assertEqual("", self.t.list[7]['data'])