# -*- coding: utf-8 -*- import os.path import unittest from picard import util import __builtin__ # ensure _() is defined if '_' not in __builtin__.__dict__: __builtin__.__dict__['_'] = lambda a: a class ReplaceWin32IncompatTest(unittest.TestCase): def test_correct(self): self.assertEqual(util.replace_win32_incompat("c:\\test\\te\"st/2"), "c:\\test\\te_st/2") self.assertEqual(util.replace_win32_incompat("c:\\test\\d:/2"), "c:\\test\\d_/2") self.assertEqual(util.replace_win32_incompat("A\"*:<>?|b"), "A_______b") def test_incorrect(self): self.assertNotEqual(util.replace_win32_incompat("c:\\test\\te\"st2"), "c:\\test\\te\"st2") class SanitizeDateTest(unittest.TestCase): def test_correct(self): self.assertEqual(util.sanitize_date("2006--"), "2006") self.assertEqual(util.sanitize_date("2006--02"), "2006") self.assertEqual(util.sanitize_date("2006 "), "2006") self.assertEqual(util.sanitize_date("2006 02"), "") self.assertEqual(util.sanitize_date("2006.02"), "") self.assertEqual(util.sanitize_date("2006-02"), "2006-02") def test_incorrect(self): self.assertNotEqual(util.sanitize_date("2006--02"), "2006-02") self.assertNotEqual(util.sanitize_date("2006.03.02"), "2006-03-02") class TranslateArtistTest(unittest.TestCase): def test_latin(self): self.assertEqual(u"Jean Michel Jarre", util.translate_from_sortname(u"Jean Michel Jarre", u"Jarre, Jean Michel")) self.assertNotEqual(u"Jarre, Jean Michel", util.translate_from_sortname(u"Jean Michel Jarre", u"Jarre, Jean Michel")) def test_kanji(self): self.assertEqual(u"Tetsuya Komuro", util.translate_from_sortname(u"小室哲哉", u"Komuro, Tetsuya")) self.assertNotEqual(u"Komuro, Tetsuya", util.translate_from_sortname(u"小室哲哉", u"Komuro, Tetsuya")) self.assertNotEqual(u"小室哲哉", util.translate_from_sortname(u"小室哲哉", u"Komuro, Tetsuya")) def test_kanji2(self): self.assertEqual(u"Ayumi Hamasaki & Keiko", util.translate_from_sortname(u"浜崎あゆみ & KEIKO", u"Hamasaki, Ayumi & Keiko")) self.assertNotEqual(u"浜崎あゆみ & KEIKO", util.translate_from_sortname(u"浜崎あゆみ & KEIKO", u"Hamasaki, Ayumi & Keiko")) self.assertNotEqual(u"Hamasaki, Ayumi & Keiko", util.translate_from_sortname(u"浜崎あゆみ & KEIKO", u"Hamasaki, Ayumi & Keiko")) def test_cyrillic(self): self.assertEqual(U"Pyotr Ilyich Tchaikovsky", util.translate_from_sortname(u"Пётр Ильич Чайковский", u"Tchaikovsky, Pyotr Ilyich")) self.assertNotEqual(u"Tchaikovsky, Pyotr Ilyich", util.translate_from_sortname(u"Пётр Ильич Чайковский", u"Tchaikovsky, Pyotr Ilyich")) self.assertNotEqual(u"Пётр Ильич Чайковский", util.translate_from_sortname(u"Пётр Ильич Чайковский", u"Tchaikovsky, Pyotr Ilyich")) class FormatTimeTest(unittest.TestCase): def test(self): self.assertEqual("?:??", util.format_time(0)) self.assertEqual("3:00", util.format_time(179750)) self.assertEqual("3:00", util.format_time(179500)) self.assertEqual("2:59", util.format_time(179499)) class HiddenPathTest(unittest.TestCase): def test(self): self.assertEqual(util.is_hidden_path('/a/.b/c.mp3'), True) self.assertEqual(util.is_hidden_path('/a/b/c.mp3'), False) self.assertEqual(util.is_hidden_path('/a/.b/.c.mp3'), True) self.assertEqual(util.is_hidden_path('/a/b/.c.mp3'), True) self.assertEqual(util.is_hidden_path('c.mp3'), False) self.assertEqual(util.is_hidden_path('.c.mp3'), True) self.assertEqual(util.is_hidden_path('/a/./c.mp3'), False) self.assertEqual(util.is_hidden_path('/a/./.c.mp3'), True) self.assertEqual(util.is_hidden_path('/a/../c.mp3'), False) self.assertEqual(util.is_hidden_path('/a/../.c.mp3'), True) class TagsTest(unittest.TestCase): def test_display_tag_name(self): dtn = util.tags.display_tag_name self.assertEqual(dtn('tag'), 'tag') self.assertEqual(dtn('tag:desc'), 'tag [desc]') self.assertEqual(dtn('tag:'), 'tag') self.assertEqual(dtn('originalyear'), 'Original Year') self.assertEqual(dtn('originalyear:desc'), 'Original Year [desc]') self.assertEqual(dtn('~length'), 'Length') self.assertEqual(dtn('~lengthx'), '~lengthx') self.assertEqual(dtn(''), '') class LinearCombinationTest(unittest.TestCase): def test_0(self): parts = [] self.assertRaises(ZeroDivisionError, util.linear_combination_of_weights, parts) def test_1(self): parts = [(1.0, 1), (1.0, 1), (1.0, 1)] self.assertEqual(util.linear_combination_of_weights(parts), 1.0) def test_2(self): parts = [(0.0, 1), (0.0, 0), (1.0, 0)] self.assertEqual(util.linear_combination_of_weights(parts), 0.0) def test_3(self): parts = [(0.0, 1), (1.0, 1)] self.assertEqual(util.linear_combination_of_weights(parts), 0.5) def test_4(self): parts = [(0.5, 4), (1.0, 1)] self.assertEqual(util.linear_combination_of_weights(parts), 0.6) def test_5(self): parts = [(0.95, 100), (0.05, 399), (0.0, 1), (1.0, 0)] self.assertEqual(util.linear_combination_of_weights(parts), 0.2299) def test_6(self): parts = [(-0.5, 4)] self.assertRaises(ValueError, util.linear_combination_of_weights, parts) def test_7(self): parts = [(0.5, -4)] self.assertRaises(ValueError, util.linear_combination_of_weights, parts) def test_8(self): parts = [(1.5, 4)] self.assertRaises(ValueError, util.linear_combination_of_weights, parts) def test_9(self): parts = ((1.5, 4)) self.assertRaises(TypeError, util.linear_combination_of_weights, parts) class AlbumArtistFromPathTest(unittest.TestCase): def test_album_artist_from_path(self): aafp = util.album_artist_from_path from picard.file import File file_1 = r"/10cc/Original Soundtrack/02 I'm Not in Love.mp3" file_2 = r"/10cc - Original Soundtrack/02 I'm Not in Love.mp3" file_3 = r"/Original Soundtrack/02 I'm Not in Love.mp3" file_4 = r"/02 I'm Not in Love.mp3" self.assertEqual(aafp(file_1, '', ''), ('Original Soundtrack', '10cc')) self.assertEqual(aafp(file_2, '', ''), ('Original Soundtrack', '10cc')) self.assertEqual(aafp(file_3, '', ''), ('Original Soundtrack', '')) self.assertEqual(aafp(file_4, '', ''), ('', '')) self.assertEqual(aafp(file_1, 'album', ''), ('album', '')) self.assertEqual(aafp(file_2, 'album', ''), ('album', '')) self.assertEqual(aafp(file_3, 'album', ''), ('album', '')) self.assertEqual(aafp(file_4, 'album', ''), ('album', '')) self.assertEqual(aafp(file_1, '', 'artist'), ('Original Soundtrack', 'artist')) self.assertEqual(aafp(file_2, '', 'artist'), ('Original Soundtrack', 'artist')) self.assertEqual(aafp(file_3, '', 'artist'), ('Original Soundtrack', 'artist')) self.assertEqual(aafp(file_4, '', 'artist'), ('', 'artist')) self.assertEqual(aafp(file_1, 'album', 'artist'), ('album', 'artist')) self.assertEqual(aafp(file_2, 'album', 'artist'), ('album', 'artist')) self.assertEqual(aafp(file_3, 'album', 'artist'), ('album', 'artist')) self.assertEqual(aafp(file_4, 'album', 'artist'), ('album', 'artist')) from picard.util import imageinfo class ImageInfoTest(unittest.TestCase): def test_gif(self): file = os.path.join('test', 'data', 'mb.gif') with open(file, 'rb') as f: self.assertEqual( imageinfo.identify(f.read()), (140, 96, 'image/gif', '.gif', 5806) ) def test_png(self): file = os.path.join('test', 'data', 'mb.png') with open(file, 'rb') as f: self.assertEqual( imageinfo.identify(f.read()), (140, 96, 'image/png', '.png', 15692) ) def test_jpeg(self): file = os.path.join('test', 'data', 'mb.jpg',) with open(file, 'rb') as f: self.assertEqual( imageinfo.identify(f.read()), (140, 96, 'image/jpeg', '.jpg', 8550) ) def test_not_enough_data(self): self.assertRaises(imageinfo.IdentificationError, imageinfo.identify, "x") self.assertRaises(imageinfo.NotEnoughData, imageinfo.identify, "x") def test_invalid_data(self): self.assertRaises(imageinfo.IdentificationError, imageinfo.identify, "x" * 20) self.assertRaises(imageinfo.UnrecognizedFormat, imageinfo.identify, "x" * 20) def test_invalid_png_data(self): data = '\x89PNG\x0D\x0A\x1A\x0A' + "x" * 20 self.assertRaises(imageinfo.IdentificationError, imageinfo.identify, data) self.assertRaises(imageinfo.UnrecognizedFormat, imageinfo.identify, data)