package.path = '../common/libs/?.lua;../common/vendor/?.lua;' .. package.path app = {} local lu = require('luaunit') require('mock_reaper') require('Polo') require('source/SRTWriter') require('source/Transcript') -- reaper.GetMediaItemTake_Source = function () return {fileName = "test_audio.wav"} end reaper.GetMediaSourceFileName = function (source) return source.fileName end TestSRTWriter = {} function TestSRTWriter:setUp() function app:trap(f) return xpcall(f, function(e) print(tostring(e)) end) end reaper.__test_setUp() end function TestSRTWriter.make_transcript() local t = Transcript.new() t:add_segment(TranscriptSegment.new { data = {start = 0, ['end'] = 1, text = 'hello'}, item = {}, take = {} }) t:add_segment(TranscriptSegment.new { data = {start = 1, ['end'] = 2, text = 'world'}, item = {}, take = {} }) t:update() return t end function TestSRTWriter:testFormatTime() lu.assertEquals(SRTWriter.format_time(0), '00:00:00,000') lu.assertEquals(SRTWriter.format_time(1), '00:00:01,000') lu.assertEquals(SRTWriter.format_time(1.5), '00:00:01,500') lu.assertEquals(SRTWriter.format_time(60), '00:01:00,000') lu.assertEquals(SRTWriter.format_time(60.5), '00:01:00,500') lu.assertEquals(SRTWriter.format_time(3600), '01:00:00,000') lu.assertEquals(SRTWriter.format_time(3600.5), '01:00:00,500') end function TestSRTWriter:testInit() local f = {} local writer = SRTWriter.new { file = f } end function TestSRTWriter:testInitNoFile() lu.assertErrorMsgContains('missing file', SRTWriter.new) end function TestSRTWriter:testWrite() local t = TestSRTWriter.make_transcript() local output = {} local f = { write = function (self, s) table.insert(output, s) end } local writer = SRTWriter.new { file = f } writer:write(t) local output_str = table.concat(output) lu.assertEquals(output_str, '1\n00:00:00,000 --> 00:00:01,000\nhello\n\n2\n00:00:01,000 --> 00:00:02,000\nworld\n\n') end function TestSRTWriter:testXYCoordinates() local t = TestSRTWriter.make_transcript() local output = {} local f = { write = function (self, s) table.insert(output, s) end } local writer = SRTWriter.new { file = f, options = { coords_x1 = '1', coords_y1 = '2', coords_x2 = '3', coords_y2 = '4' } } writer:write(t) local output_str = table.concat(output) lu.assertEquals(output_str, '1\n00:00:00,000 --> 00:00:01,000 X1:1 X2:3 Y1:2 Y2:4\nhello\n\n2\n00:00:01,000 --> 00:00:02,000 X1:1 X2:3 Y1:2 Y2:4\nworld\n\n') end function TestSRTWriter:testWriteSegment() local output = {} local f = { write = function (self, s) table.insert(output, s) end } local writer = SRTWriter.new { file = f } local segment = { get = function (self, key) if key == 'start' then return 0 elseif key == 'end' then return 1 elseif key == 'text' then return 'hello' end end } writer:write_segment(segment, 1) local output_str = table.concat(output) lu.assertEquals(output_str, '1\n00:00:00,000 --> 00:00:01,000\nhello\n\n') end function TestSRTWriter:testWriteLine() local output = {} local f = { write = function (self, s) table.insert(output, s) end } local writer = SRTWriter.new { file = f } writer:write_line('hello', 1, 0, 1) local output_str = table.concat(output) lu.assertEquals(output_str, '1\n00:00:00,000 --> 00:00:01,000\nhello\n\n') end -- os.exit(lu.LuaUnit.run())