mirror of
https://github.com/fergalmoran/picard.git
synced 2026-01-02 14:47:32 +00:00
91 lines
3.1 KiB
Python
91 lines
3.1 KiB
Python
import sys
|
|
|
|
from test.picardtestcase import PicardTestCase
|
|
|
|
from picard import config
|
|
from picard.file import File
|
|
from picard.metadata import Metadata
|
|
from picard.script import register_script_function
|
|
from picard.util.scripttofilename import script_to_filename
|
|
|
|
|
|
settings = {
|
|
'ascii_filenames': False,
|
|
'enabled_plugins': [],
|
|
'windows_compatibility': False,
|
|
}
|
|
|
|
|
|
def func_has_file(parser):
|
|
return '1' if parser.file else ''
|
|
|
|
|
|
register_script_function(lambda p: '1' if p.file else '', 'has_file')
|
|
|
|
|
|
class ScriptToFilenameTest(PicardTestCase):
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
config.setting = settings.copy()
|
|
|
|
def test_plain_filename(self):
|
|
metadata = Metadata()
|
|
filename = script_to_filename('AlbumArt', metadata)
|
|
self.assertEqual('AlbumArt', filename)
|
|
|
|
def test_simple_script(self):
|
|
metadata = Metadata()
|
|
metadata['artist'] = 'AC/DC'
|
|
metadata['album'] = 'The Album'
|
|
filename = script_to_filename('%album%', metadata)
|
|
self.assertEqual('The Album', filename)
|
|
filename = script_to_filename('%artist%/%album%', metadata)
|
|
self.assertEqual('AC_DC/The Album', filename)
|
|
|
|
def test_file_metadata(self):
|
|
metadata = Metadata()
|
|
file = File('somepath/somefile.mp3')
|
|
self.assertEqual('', script_to_filename('$has_file()', metadata))
|
|
self.assertEqual('1', script_to_filename('$has_file()', metadata, file=file))
|
|
|
|
def test_ascii_filenames(self):
|
|
metadata = Metadata()
|
|
metadata['artist'] = 'Die Ärzte'
|
|
settings = config.setting.copy()
|
|
settings['ascii_filenames'] = False
|
|
filename = script_to_filename('%artist% éöü', metadata, settings=settings)
|
|
self.assertEqual('Die Ärzte éöü', filename)
|
|
settings['ascii_filenames'] = True
|
|
filename = script_to_filename('%artist% éöü', metadata, settings=settings)
|
|
self.assertEqual('Die Arzte eou', filename)
|
|
|
|
def test_windows_compatibility(self):
|
|
metadata = Metadata()
|
|
metadata['artist'] = '*:'
|
|
settings = config.setting.copy()
|
|
settings['windows_compatibility'] = False
|
|
expect_orig = '*:?'
|
|
expect_compat = '___'
|
|
filename = script_to_filename('%artist%?', metadata, settings=settings)
|
|
self.assertEqual(expect_compat if sys.platform == 'win32' else expect_orig, filename)
|
|
settings['windows_compatibility'] = True
|
|
filename = script_to_filename('%artist%?', metadata, settings=settings)
|
|
self.assertEqual(expect_compat, filename)
|
|
|
|
def test_remove_null_chars(self):
|
|
metadata = Metadata()
|
|
filename = script_to_filename('a\x00b\x00', metadata)
|
|
self.assertEqual('ab', filename)
|
|
|
|
def test_remove_tabs_and_linebreaks_chars(self):
|
|
metadata = Metadata()
|
|
filename = script_to_filename('a\tb\nc', metadata)
|
|
self.assertEqual('abc', filename)
|
|
|
|
def test_preserve_leading_and_trailing_whitespace(self):
|
|
metadata = Metadata()
|
|
metadata['artist'] = 'The Artist'
|
|
filename = script_to_filename(' %artist% ', metadata)
|
|
self.assertEqual(' The Artist ', filename)
|