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'])