spec/lib/m3u8/media_item_spec.rb in m3u8-0.7.1 vs spec/lib/m3u8/media_item_spec.rb in m3u8-0.8.0
- old
+ new
@@ -1,43 +1,90 @@
# frozen_string_literal: true
require 'spec_helper'
describe M3u8::MediaItem do
- it 'should provide m3u8 format representation' do
- hash = { type: 'AUDIO', group_id: 'audio-lo', language: 'fre',
- name: 'Francais', autoselect: true, default: false,
- uri: 'frelo/prog_index.m3u8' }
- item = M3u8::MediaItem.new(hash)
- output = item.to_s
- expected = '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="fre",' \
- 'NAME="Francais",AUTOSELECT=YES,DEFAULT=NO,' \
- 'URI="frelo/prog_index.m3u8"'
- expect(output).to eq expected
+ describe '.new' do
+ it 'assigns attributes from options' do
+ options = { type: 'AUDIO', group_id: 'audio-lo', language: 'fre',
+ assoc_language: 'spoken', name: 'Francais', autoselect: true,
+ default: false, forced: true, uri: 'frelo/prog_index.m3u8',
+ instream_id: 'SERVICE3', characteristics: 'public.html',
+ channels: '6' }
+ item = described_class.new(options)
- hash = { type: 'AUDIO', group_id: 'audio-lo', language: 'fre',
- assoc_language: 'spoken', name: 'Francais', autoselect: true,
- default: false, forced: true, uri: 'frelo/prog_index.m3u8' }
- item = M3u8::MediaItem.new(hash)
- output = item.to_s
- expected = '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="fre",' \
- 'ASSOC-LANGUAGE="spoken",NAME="Francais",AUTOSELECT=YES,' \
- 'DEFAULT=NO,URI="frelo/prog_index.m3u8",FORCED=YES'
- expect(output).to eq expected
+ expect(item.type).to eq('AUDIO')
+ expect(item.group_id).to eq('audio-lo')
+ expect(item.language).to eq('fre')
+ expect(item.assoc_language).to eq('spoken')
+ expect(item.name).to eq('Francais')
+ expect(item.autoselect).to be true
+ expect(item.default).to be false
+ expect(item.uri).to eq('frelo/prog_index.m3u8')
+ expect(item.forced).to be true
+ expect(item.instream_id).to eq('SERVICE3')
+ expect(item.characteristics).to eq('public.html')
+ expect(item.channels).to eq('6')
+ end
end
- it 'should parse m3u8 text into instance' do
- format = '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="fre",' \
- 'ASSOC-LANGUAGE="spoken",NAME="Francais",AUTOSELECT=YES,' +
- %("DEFAULT=NO,URI="frelo/prog_index.m3u8",FORCED=YES\n")
- item = M3u8::MediaItem.parse format
+ describe '.parse' do
+ it 'returns instance from parsed tag' do
+ tag = '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="fre",' \
+ 'ASSOC-LANGUAGE="spoken",NAME="Francais",AUTOSELECT=YES,' \
+ 'INSTREAM-ID="SERVICE3",CHARACTERISTICS="public.html",' \
+ 'CHANNELS="6",' +
+ %("DEFAULT=NO,URI="frelo/prog_index.m3u8",FORCED=YES\n")
+ item = described_class.parse(tag)
- expect(item.type).to eq 'AUDIO'
- expect(item.group_id).to eq 'audio-lo'
- expect(item.language).to eq 'fre'
- expect(item.assoc_language).to eq 'spoken'
- expect(item.name).to eq 'Francais'
- expect(item.autoselect).to be true
- expect(item.default).to be false
- expect(item.uri).to eq 'frelo/prog_index.m3u8'
- expect(item.forced).to be true
+ expect(item.type).to eq('AUDIO')
+ expect(item.group_id).to eq('audio-lo')
+ expect(item.language).to eq('fre')
+ expect(item.assoc_language).to eq('spoken')
+ expect(item.name).to eq('Francais')
+ expect(item.autoselect).to be true
+ expect(item.default).to be false
+ expect(item.uri).to eq('frelo/prog_index.m3u8')
+ expect(item.forced).to be true
+ expect(item.instream_id).to eq('SERVICE3')
+ expect(item.characteristics).to eq('public.html')
+ expect(item.channels).to eq('6')
+ end
+ end
+
+ describe '#to_s' do
+ context 'when no attributes are assigned' do
+ it 'returns default tag text' do
+ item = described_class.new
+ expected = '#EXT-X-MEDIA:TYPE=,GROUP-ID="",NAME=""'
+ expect(item.to_s).to eq(expected)
+ end
+ end
+
+ context 'when only required attributes are assigned' do
+ it 'returns tag text' do
+ options = { type: 'AUDIO', group_id: 'audio-lo', name: 'Francais' }
+ item = described_class.new(options)
+ expected = '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",NAME="Francais"'
+ expect(item.to_s).to eq(expected)
+ end
+ end
+
+ context 'when all attributes are assigned' do
+ it 'returns tag text' do
+ options = { type: 'AUDIO', group_id: 'audio-lo', language: 'fre',
+ assoc_language: 'spoken', name: 'Francais',
+ autoselect: true, default: false, forced: true,
+ uri: 'frelo/prog_index.m3u8', instream_id: 'SERVICE3',
+ characteristics: 'public.html', channels: '6' }
+ item = M3u8::MediaItem.new(options)
+ output = item.to_s
+ expected = '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",' \
+ 'LANGUAGE="fre",ASSOC-LANGUAGE="spoken",' \
+ 'NAME="Francais",AUTOSELECT=YES,' \
+ 'DEFAULT=NO,URI="frelo/prog_index.m3u8",FORCED=YES,' \
+ 'INSTREAM-ID="SERVICE3",CHARACTERISTICS="public.html",' \
+ 'CHANNELS="6"'
+ expect(output).to eq(expected)
+ end
+ end
end
end