spec/lib/m3u8/writer_spec.rb in m3u8-0.7.0 vs spec/lib/m3u8/writer_spec.rb in m3u8-0.7.1

- old
+ new

@@ -1,176 +1,179 @@ +# frozen_string_literal: true require 'spec_helper' describe M3u8::Writer do - it 'should render master playlist' do - options = { uri: 'playlist_url', bandwidth: 6400, - audio_codec: 'mp3' } - item = M3u8::PlaylistItem.new(options) - playlist = M3u8::Playlist.new(version: 6, independent_segments: true) - playlist.items << item + describe '#write' do + it 'should render master playlist' do + options = { uri: 'playlist_url', bandwidth: 6400, + audio_codec: 'mp3' } + item = M3u8::PlaylistItem.new(options) + playlist = M3u8::Playlist.new(version: 6, independent_segments: true) + playlist.items << item - output = "#EXTM3U\n" \ - "#EXT-X-VERSION:6\n" \ - "#EXT-X-INDEPENDENT-SEGMENTS\n" + - %(#EXT-X-STREAM-INF:CODECS="mp4a.40.34") + - ",BANDWIDTH=6400\nplaylist_url\n" + output = "#EXTM3U\n" \ + "#EXT-X-VERSION:6\n" \ + "#EXT-X-INDEPENDENT-SEGMENTS\n" + + %(#EXT-X-STREAM-INF:CODECS="mp4a.40.34") + + ",BANDWIDTH=6400\nplaylist_url\n" - io = StringIO.open - writer = M3u8::Writer.new io - writer.write playlist - expect(io.string).to eq output + io = StringIO.open + writer = M3u8::Writer.new(io) + writer.write(playlist) + expect(io.string).to eq(output) - options = { program_id: '1', uri: 'playlist_url', bandwidth: 6400, - audio_codec: 'mp3' } - item = M3u8::PlaylistItem.new(options) - playlist = M3u8::Playlist.new - playlist.items.push item + options = { program_id: '1', uri: 'playlist_url', bandwidth: 6400, + audio_codec: 'mp3' } + item = M3u8::PlaylistItem.new(options) + playlist = M3u8::Playlist.new + playlist.items << item - output = "#EXTM3U\n" + - %(#EXT-X-STREAM-INF:PROGRAM-ID=1,CODECS="mp4a.40.34") + - ",BANDWIDTH=6400\nplaylist_url\n" + output = "#EXTM3U\n" + + %(#EXT-X-STREAM-INF:PROGRAM-ID=1,CODECS="mp4a.40.34") + + ",BANDWIDTH=6400\nplaylist_url\n" - io = StringIO.open - writer = M3u8::Writer.new io - writer.write playlist - expect(io.string).to eq output + io = StringIO.open + writer = M3u8::Writer.new(io) + writer.write(playlist) + expect(io.string).to eq(output) - options = { program_id: '2', uri: 'playlist_url', bandwidth: 50_000, - width: 1920, height: 1080, profile: 'high', level: 4.1, - audio_codec: 'aac-lc' } - item = M3u8::PlaylistItem.new options - playlist = M3u8::Playlist.new - playlist.items.push item + options = { program_id: '2', uri: 'playlist_url', bandwidth: 50_000, + width: 1920, height: 1080, profile: 'high', level: 4.1, + audio_codec: 'aac-lc' } + item = M3u8::PlaylistItem.new(options) + playlist = M3u8::Playlist.new + playlist.items << item - output = "#EXTM3U\n" \ - '#EXT-X-STREAM-INF:PROGRAM-ID=2,RESOLUTION=1920x1080,' + - %(CODECS="avc1.640029,mp4a.40.2",BANDWIDTH=50000\n) + - "playlist_url\n" + output = "#EXTM3U\n" \ + '#EXT-X-STREAM-INF:PROGRAM-ID=2,RESOLUTION=1920x1080,' + + %(CODECS="avc1.640029,mp4a.40.2",BANDWIDTH=50000\n) + + "playlist_url\n" - io = StringIO.open - writer = M3u8::Writer.new io - writer.write playlist - expect(io.string).to eq output + io = StringIO.open + writer = M3u8::Writer.new(io) + writer.write(playlist) + expect(io.string).to eq(output) - playlist = M3u8::Playlist.new - options = { program_id: '1', uri: 'playlist_url', bandwidth: 6400, - audio_codec: 'mp3' } - item = M3u8::PlaylistItem.new options - playlist.items.push item - options = { program_id: '2', uri: 'playlist_url', bandwidth: 50_000, - width: 1920, height: 1080, profile: 'high', level: 4.1, - audio_codec: 'aac-lc' } - item = M3u8::PlaylistItem.new options - playlist.items.push item - options = { data_id: 'com.test.movie.title', value: 'Test', - uri: 'http://test', language: 'en' } - item = M3u8::SessionDataItem.new(options) - playlist.items.push item + playlist = M3u8::Playlist.new + options = { program_id: '1', uri: 'playlist_url', bandwidth: 6400, + audio_codec: 'mp3' } + item = M3u8::PlaylistItem.new(options) + playlist.items << item + options = { program_id: '2', uri: 'playlist_url', bandwidth: 50_000, + width: 1920, height: 1080, profile: 'high', level: 4.1, + audio_codec: 'aac-lc' } + item = M3u8::PlaylistItem.new(options) + playlist.items << item + options = { data_id: 'com.test.movie.title', value: 'Test', + uri: 'http://test', language: 'en' } + item = M3u8::SessionDataItem.new(options) + playlist.items << item - output = "#EXTM3U\n" + - %(#EXT-X-STREAM-INF:PROGRAM-ID=1,CODECS="mp4a.40.34") + - ",BANDWIDTH=6400\nplaylist_url\n#EXT-X-STREAM-INF:PROGRAM-ID=2," + - %(RESOLUTION=1920x1080,CODECS="avc1.640029,mp4a.40.2") + - ",BANDWIDTH=50000\nplaylist_url\n" + - %(#EXT-X-SESSION-DATA:DATA-ID="com.test.movie.title",) + - %(VALUE="Test",URI="http://test",LANGUAGE="en"\n) + output = "#EXTM3U\n" + + %(#EXT-X-STREAM-INF:PROGRAM-ID=1,CODECS="mp4a.40.34") + + ",BANDWIDTH=6400\nplaylist_url\n#EXT-X-STREAM-INF:PROGRAM-ID=2," + + %(RESOLUTION=1920x1080,CODECS="avc1.640029,mp4a.40.2") + + ",BANDWIDTH=50000\nplaylist_url\n" + + %(#EXT-X-SESSION-DATA:DATA-ID="com.test.movie.title",) + + %(VALUE="Test",URI="http://test",LANGUAGE="en"\n) - io = StringIO.open - writer = M3u8::Writer.new io - writer.write playlist - expect(io.string).to eq output - end + io = StringIO.open + writer = M3u8::Writer.new(io) + writer.write(playlist) + expect(io.string).to eq(output) + end - it 'should render playlist' do - options = { duration: 11.344644, segment: '1080-7mbps00000.ts' } - item = M3u8::SegmentItem.new(options) - playlist = M3u8::Playlist.new(version: 7) - playlist.items << item + it 'should render playlist' do + options = { duration: 11.344644, segment: '1080-7mbps00000.ts' } + item = M3u8::SegmentItem.new(options) + playlist = M3u8::Playlist.new(version: 7) + playlist.items << item - output = "#EXTM3U\n" \ - "#EXT-X-VERSION:7\n" \ - "#EXT-X-MEDIA-SEQUENCE:0\n" \ - "#EXT-X-TARGETDURATION:10\n" \ - "#EXTINF:11.344644,\n" \ - "1080-7mbps00000.ts\n" \ - "#EXT-X-ENDLIST\n" - io = StringIO.open - writer = M3u8::Writer.new(io) - writer.write playlist - expect(io.string).to eq output + output = "#EXTM3U\n" \ + "#EXT-X-VERSION:7\n" \ + "#EXT-X-MEDIA-SEQUENCE:0\n" \ + "#EXT-X-TARGETDURATION:10\n" \ + "#EXTINF:11.344644,\n" \ + "1080-7mbps00000.ts\n" \ + "#EXT-X-ENDLIST\n" + io = StringIO.open + writer = M3u8::Writer.new(io) + writer.write(playlist) + expect(io.string).to eq(output) - options = { method: 'AES-128', uri: 'http://test.key', - iv: 'D512BBF', key_format: 'identity', - key_format_versions: '1/3' } - item = M3u8::KeyItem.new(options) - playlist.items << item + options = { method: 'AES-128', uri: 'http://test.key', + iv: 'D512BBF', key_format: 'identity', + key_format_versions: '1/3' } + item = M3u8::KeyItem.new(options) + playlist.items << item - options = { duration: 11.261233, segment: '1080-7mbps00001.ts' } - item = M3u8::SegmentItem.new options - playlist.items << item + options = { duration: 11.261233, segment: '1080-7mbps00001.ts' } + item = M3u8::SegmentItem.new(options) + playlist.items << item - output = "#EXTM3U\n" \ - "#EXT-X-VERSION:7\n" \ - "#EXT-X-MEDIA-SEQUENCE:0\n" \ - "#EXT-X-TARGETDURATION:10\n" \ - "#EXTINF:11.344644,\n" \ - "1080-7mbps00000.ts\n" + - %(#EXT-X-KEY:METHOD=AES-128,URI="http://test.key",) + - %(IV=D512BBF,KEYFORMAT="identity",KEYFORMATVERSIONS="1/3"\n) + - "#EXTINF:11.261233,\n" \ - "1080-7mbps00001.ts\n" \ - "#EXT-X-ENDLIST\n" - io = StringIO.open - writer = M3u8::Writer.new(io) - writer.write playlist - expect(io.string).to eq output + output = "#EXTM3U\n" \ + "#EXT-X-VERSION:7\n" \ + "#EXT-X-MEDIA-SEQUENCE:0\n" \ + "#EXT-X-TARGETDURATION:10\n" \ + "#EXTINF:11.344644,\n" \ + "1080-7mbps00000.ts\n" + + %(#EXT-X-KEY:METHOD=AES-128,URI="http://test.key",) + + %(IV=D512BBF,KEYFORMAT="identity",KEYFORMATVERSIONS="1/3"\n) + + "#EXTINF:11.261233,\n" \ + "1080-7mbps00001.ts\n" \ + "#EXT-X-ENDLIST\n" + io = StringIO.open + writer = M3u8::Writer.new(io) + writer.write(playlist) + expect(io.string).to eq(output) - options = { version: 4, cache: false, target: 12, sequence: 1, - type: 'EVENT', iframes_only: true } - playlist = M3u8::Playlist.new(options) - options = { duration: 11.344644, segment: '1080-7mbps00000.ts' } - item = M3u8::SegmentItem.new(options) - playlist.items << item + options = { version: 4, cache: false, target: 12, sequence: 1, + type: 'EVENT', iframes_only: true } + playlist = M3u8::Playlist.new(options) + options = { duration: 11.344644, segment: '1080-7mbps00000.ts' } + item = M3u8::SegmentItem.new(options) + playlist.items << item - output = "#EXTM3U\n" \ - "#EXT-X-PLAYLIST-TYPE:EVENT\n" \ - "#EXT-X-VERSION:4\n" \ - "#EXT-X-I-FRAMES-ONLY\n" \ - "#EXT-X-MEDIA-SEQUENCE:1\n" \ - "#EXT-X-ALLOW-CACHE:NO\n" \ - "#EXT-X-TARGETDURATION:12\n" \ - "#EXTINF:11.344644,\n" \ - "1080-7mbps00000.ts\n" \ - "#EXT-X-ENDLIST\n" - io = StringIO.open - writer = M3u8::Writer.new io - writer.write playlist - expect(io.string).to eq output - end + output = "#EXTM3U\n" \ + "#EXT-X-PLAYLIST-TYPE:EVENT\n" \ + "#EXT-X-VERSION:4\n" \ + "#EXT-X-I-FRAMES-ONLY\n" \ + "#EXT-X-MEDIA-SEQUENCE:1\n" \ + "#EXT-X-ALLOW-CACHE:NO\n" \ + "#EXT-X-TARGETDURATION:12\n" \ + "#EXTINF:11.344644,\n" \ + "1080-7mbps00000.ts\n" \ + "#EXT-X-ENDLIST\n" + io = StringIO.open + writer = M3u8::Writer.new(io) + writer.write(playlist) + expect(io.string).to eq(output) + end - it 'should render the target duration as a decimal-integer' do - playlist = M3u8::Playlist.new(target: 6.2) - io = StringIO.open - writer = M3u8::Writer.new io - writer.write playlist - expect(io.string).to include('#EXT-X-TARGETDURATION:6') - end + it 'should render the target duration as a decimal-integer' do + playlist = M3u8::Playlist.new(target: 6.2) + io = StringIO.open + writer = M3u8::Writer.new(io) + writer.write(playlist) + expect(io.string).to include('#EXT-X-TARGETDURATION:6') + end - it 'should raise error on write if item types are mixed' do - playlist = M3u8::Playlist.new + it 'should raise error on write if item types are mixed' do + playlist = M3u8::Playlist.new - hash = { program_id: 1, width: 1920, height: 1080, codecs: 'avc', - bandwidth: 540, playlist: 'test.url' } - item = M3u8::PlaylistItem.new(hash) - playlist.items.push item + hash = { program_id: 1, width: 1920, height: 1080, codecs: 'avc', + bandwidth: 540, playlist: 'test.url' } + item = M3u8::PlaylistItem.new(hash) + playlist.items << item - hash = { duration: 10.991, segment: 'test.ts' } - item = M3u8::SegmentItem.new(hash) - playlist.items.push item + hash = { duration: 10.991, segment: 'test.ts' } + item = M3u8::SegmentItem.new(hash) + playlist.items << item - message = 'Playlist is invalid.' - io = StringIO.new - writer = M3u8::Writer.new io - expect { writer.write playlist } - .to raise_error(M3u8::PlaylistTypeError, message) + message = 'Playlist is invalid.' + io = StringIO.new + writer = M3u8::Writer.new(io) + expect { writer.write(playlist) } + .to raise_error(M3u8::PlaylistTypeError, message) + end end end