mopidy/tests/m3u/test_translator.py

147 lines
4.4 KiB
Python

# encoding: utf-8
from __future__ import absolute_import, unicode_literals
import io
from mopidy.m3u import translator
from mopidy.models import Playlist, Ref, Track
def loads(s, basedir=b'.'):
return translator.load_items(io.StringIO(s), basedir=basedir)
def dumps(items):
fp = io.StringIO()
translator.dump_items(items, fp)
return fp.getvalue()
def test_path_to_uri():
from mopidy.m3u.translator import path_to_uri
assert path_to_uri(b'test') == 'm3u:test'
assert path_to_uri(b'test.m3u') == 'm3u:test.m3u'
assert path_to_uri(b'./test.m3u') == 'm3u:test.m3u'
assert path_to_uri(b'foo/../test.m3u') == 'm3u:test.m3u'
assert path_to_uri(b'Test Playlist.m3u') == 'm3u:Test%20Playlist.m3u'
assert path_to_uri(b'test.mp3', scheme='file') == 'file:///test.mp3'
def test_latin1_path_to_uri():
path = 'æøå.m3u'.encode('latin-1')
assert translator.path_to_uri(path) == 'm3u:%E6%F8%E5.m3u'
def test_utf8_path_to_uri():
path = 'æøå.m3u'.encode('utf-8')
assert translator.path_to_uri(path) == 'm3u:%C3%A6%C3%B8%C3%A5.m3u'
def test_uri_to_path():
from mopidy.m3u.translator import uri_to_path
assert uri_to_path('m3u:test.m3u') == b'test.m3u'
assert uri_to_path(b'm3u:test.m3u') == b'test.m3u'
assert uri_to_path('m3u:Test%20Playlist.m3u') == b'Test Playlist.m3u'
assert uri_to_path(b'm3u:Test%20Playlist.m3u') == b'Test Playlist.m3u'
assert uri_to_path('m3u:%E6%F8%E5.m3u') == b'\xe6\xf8\xe5.m3u'
assert uri_to_path(b'm3u:%E6%F8%E5.m3u') == b'\xe6\xf8\xe5.m3u'
assert uri_to_path('file:///test.mp3') == b'/test.mp3'
assert uri_to_path(b'file:///test.mp3') == b'/test.mp3'
def test_name_from_path():
from mopidy.m3u.translator import name_from_path
assert name_from_path(b'test') == 'test'
assert name_from_path(b'test.m3u') == 'test'
assert name_from_path(b'../test.m3u') == 'test'
def test_path_from_name():
from mopidy.m3u.translator import path_from_name
assert path_from_name('test') == b'test'
assert path_from_name('test', '.m3u') == b'test.m3u'
assert path_from_name('foo/bar', sep='-') == b'foo-bar'
def test_path_to_ref():
from mopidy.m3u.translator import path_to_ref
assert path_to_ref(b'test.m3u') == Ref.playlist(
uri='m3u:test.m3u', name='test'
)
assert path_to_ref(b'Test Playlist.m3u') == Ref.playlist(
uri='m3u:Test%20Playlist.m3u', name='Test Playlist'
)
def test_load_items():
assert loads('') == []
assert loads('test.mp3', basedir=b'/playlists') == [
Ref.track(uri='file:///playlists/test.mp3', name='test')
]
assert loads('../test.mp3', basedir=b'/playlists') == [
Ref.track(uri='file:///test.mp3', name='test')
]
assert loads('/test.mp3') == [
Ref.track(uri='file:///test.mp3', name='test')
]
assert loads('file:///test.mp3') == [
Ref.track(uri='file:///test.mp3')
]
assert loads('http://example.com/stream') == [
Ref.track(uri='http://example.com/stream')
]
assert loads('#EXTM3U\n#EXTINF:42,Test\nfile:///test.mp3\n') == [
Ref.track(uri='file:///test.mp3', name='Test')
]
assert loads('#EXTM3U\n#EXTINF:-1,Test\nhttp://example.com/stream\n') == [
Ref.track(uri='http://example.com/stream', name='Test')
]
def test_dump_items():
assert dumps([]) == ''
assert dumps([Ref.track(uri='file:///test.mp3')]) == (
'file:///test.mp3\n'
)
assert dumps([Ref.track(uri='file:///test.mp3', name='test')]) == (
'#EXTM3U\n'
'#EXTINF:-1,test\n'
'file:///test.mp3\n'
)
assert dumps([Track(uri='file:///test.mp3', name='test', length=42)]) == (
'#EXTM3U\n'
'#EXTINF:-1,test\n'
'file:///test.mp3\n'
)
assert dumps([Track(uri='http://example.com/stream')]) == (
'http://example.com/stream\n'
)
assert dumps([Track(uri='http://example.com/stream', name='Test')]) == (
'#EXTM3U\n'
'#EXTINF:-1,Test\n'
'http://example.com/stream\n'
)
def test_playlist():
from mopidy.m3u.translator import playlist
assert playlist(b'test.m3u') == Playlist(
uri='m3u:test.m3u',
name='test'
)
assert playlist(b'test.m3u', [Ref(uri='file:///test.mp3')], 1) == Playlist(
uri='m3u:test.m3u',
name='test',
tracks=[Track(uri='file:///test.mp3')],
last_modified=1000
)