def test_dump_playlists_with_resolution(): obj = m3u8.M3U8(playlists.SIMPLE_PLAYLIST_WITH_RESOLUTION) expected = playlists.SIMPLE_PLAYLIST_WITH_RESOLUTION.strip().splitlines() assert expected == obj.dumps().strip().splitlines()
def test_keys_on_clear_playlist(): obj = m3u8.M3U8(playlists.SIMPLE_PLAYLIST) assert len(obj.keys) == 1 assert obj.keys[0] == None
def test_session_keys_on_clear_playlist(): obj = m3u8.M3U8(playlists.SIMPLE_PLAYLIST) assert len(obj.session_keys) == 0
def test_segment_cue_out_in_dumps(): obj = m3u8.M3U8(playlists.CUE_OUT_NO_DURATION_PLAYLIST) result = obj.dumps() expected = '#EXT-X-CUE-IN\n' assert expected in result
def test_segment_unknown_scte35_attribute(): obj = m3u8.M3U8(playlists.CUE_OUT_INVALID_PLAYLIST) assert obj.segments[0].scte35 == None assert obj.segments[0].scte35_duration == None
def test_m3u8_unicode_method(): obj = m3u8.M3U8(playlists.SIMPLE_PLAYLIST) result = unicode(obj).strip() expected = playlists.SIMPLE_PLAYLIST.strip() assert result == expected
def test_segment_cue_out_cont_dumps(): obj = m3u8.M3U8(playlists.CUE_OUT_PLAYLIST) result = obj.dumps() expected = '#EXT-X-CUE-OUT-CONT\n' assert expected in result
def test_should_dump_multiple_keys(): obj = m3u8.M3U8(playlists.PLAYLIST_WITH_ENCRIPTED_SEGMENTS_AND_IV_WITH_MULTIPLE_KEYS) expected = playlists.PLAYLIST_WITH_ENCRIPTED_SEGMENTS_AND_IV_WITH_MULTIPLE_KEYS.strip() assert expected == obj.dumps().strip()
def test_should_dump_program_datetime_and_discontinuity(): obj = m3u8.M3U8(playlists.DISCONTINUITY_PLAYLIST_WITH_PROGRAM_DATE_TIME) expected = playlists.DISCONTINUITY_PLAYLIST_WITH_PROGRAM_DATE_TIME.strip() assert expected == obj.dumps().strip()
def test_dump_should_work_for_playlists_using_byteranges(): obj = m3u8.M3U8(playlists.PLAYLIST_USING_BYTERANGES) expected = playlists.PLAYLIST_USING_BYTERANGES.strip() assert expected == obj.dumps().strip()
def test_should_dump_with_endlist_tag(): obj = m3u8.M3U8(playlists.SLIDING_WINDOW_PLAYLIST) obj.is_endlist= True assert '#EXT-X-ENDLIST' in obj.dumps().splitlines()
def test_dump_should_include_program_date_time(): obj = m3u8.M3U8(playlists.SIMPLE_PLAYLIST_WITH_PROGRAM_DATE_TIME) assert "EXT-X-PROGRAM-DATE-TIME:2014-08-13T13:36:33+00:00" in obj.dumps().strip()
def test_dump_should_work_for_variant_playlists_with_iframe_playlists(): obj = m3u8.M3U8(playlists.VARIANT_PLAYLIST_WITH_IFRAME_PLAYLISTS) expected = playlists.VARIANT_PLAYLIST_WITH_IFRAME_PLAYLISTS.strip() assert expected == obj.dumps().strip()
def test_dump_should_work_for_variant_streams(): obj = m3u8.M3U8(playlists.VARIANT_PLAYLIST) expected = playlists.VARIANT_PLAYLIST.replace(', BANDWIDTH', ',BANDWIDTH').strip() assert expected == obj.dumps().strip()
def test_start_with_precise(): obj = m3u8.M3U8(playlists.SIMPLE_PLAYLIST_WITH_START_PRECISE) assert obj.start.time_offset == 10.5 assert obj.start.precise == 'YES' assert ext_x_start + ':TIME-OFFSET=10.5,PRECISE=YES\n' in obj.dumps()
def test_playlist_type_dumped_to_appropriate_m3u8_field(): obj = m3u8.M3U8() obj.playlist_type = 'vod' result = obj.dumps() expected = '#EXTM3U\n#EXT-X-PLAYLIST-TYPE:VOD\n' assert result == expected
def test_should_dump_frame_rate(): obj = m3u8.M3U8(playlists.VARIANT_PLAYLIST_WITH_FRAME_RATE) expected = playlists.VARIANT_PLAYLIST_WITH_FRAME_RATE.strip() assert expected == obj.dumps().strip()
def test_none_playlist_type_is_gracefully_ignored(): obj = m3u8.M3U8() obj.playlist_type = None result = obj.dumps() expected = '#EXTM3U\n' assert result == expected
def test_segment_cue_in_attribute(): obj = m3u8.M3U8(playlists.CUE_OUT_WITH_DURATION_PLAYLIST) assert obj.segments[2].cue_in == True
def test_0_media_sequence_added_to_file(): obj = m3u8.M3U8() obj.media_sequence = 0 result = obj.dumps() expected = '#EXTM3U\n' assert result == expected
def test_segment_cue_out_start_dumps(): obj = m3u8.M3U8(playlists.CUE_OUT_WITH_DURATION_PLAYLIST) result = obj.dumps() expected = '#EXT-X-CUE-OUT:11.52\n' assert expected in result
def test_none_media_sequence_gracefully_ignored(): obj = m3u8.M3U8() obj.media_sequence = None result = obj.dumps() expected = '#EXTM3U\n' assert result == expected
def test_segment_elemental_scte35_attribute(): obj = m3u8.M3U8(playlists.CUE_OUT_ELEMENTAL_PLAYLIST) segments = obj.segments assert segments[4].cue_out == True assert segments[9].cue_out == False assert segments[4].scte35 == '/DAlAAAAAAAAAP/wFAUAAAABf+//wpiQkv4ARKogAAEBAQAAQ6sodg=='
def test_segment_map_uri_attribute(): obj = m3u8.M3U8(playlists.MAP_URI_PLAYLIST) assert obj.segment_map['uri'] == "fileSequence0.mp4"
def test_segment_cue_out_no_duration(): obj = m3u8.M3U8(playlists.CUE_OUT_NO_DURATION_PLAYLIST) assert obj.segments[0].cue_out_start == True assert obj.segments[2].cue_in == True
def test_segment_map_uri_attribute_with_byterange(): obj = m3u8.M3U8(playlists.MAP_URI_PLAYLIST_WITH_BYTERANGE) assert obj.segment_map['uri'] == "main.mp4"
def test_key_attribute_on_none(): obj = m3u8.M3U8(playlists.SIMPLE_PLAYLIST) mock_parser_data(obj, {}) assert len(obj.keys) == 0
def test_start_with_negative_offset(): obj = m3u8.M3U8(playlists.SIMPLE_PLAYLIST_WITH_START_NEGATIVE_OFFSET) assert obj.start.time_offset == -2.0 assert obj.start.precise is None assert ext_x_start + ':TIME-OFFSET=-2.0\n' in obj.dumps()
def test_session_keys_on_simple_encrypted_playlist(): obj = m3u8.M3U8(playlists.PLAYLIST_WITH_SESSION_ENCRYPTED_SEGMENTS) assert len(obj.session_keys) == 1 assert obj.session_keys[0].uri == "https://priv.example.com/key.php?r=52"
def test_dumps_should_build_same_string(): playlists_model = [playlists.PLAYLIST_WITH_NON_INTEGER_DURATION, playlists.PLAYLIST_WITH_ENCRIPTED_SEGMENTS_AND_IV] for playlist in playlists_model: obj = m3u8.M3U8(playlist) expected = playlist.replace(', IV', ',IV').strip() assert expected == obj.dumps().strip()