147 lines
4.4 KiB
Python
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
|
|
)
|