1# Copyright 2017 Nick Boultbee 2# 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 2 of the License, or 6# (at your option) any later version. 7 8import os 9 10import quodlibet 11from quodlibet import qltk 12from quodlibet.browsers.playlists.menu import PlaylistMenu 13from quodlibet.browsers.playlists.util import PLAYLISTS 14from quodlibet.formats import AudioFile 15from quodlibet.library import SongLibrarian 16from quodlibet.library.libraries import FileLibrary 17from tests.helper import dummy_path 18from tests import TestCase, _TEMP_DIR 19 20FIXED_NAME = "_foobar" 21 22 23class StubbedPlaylistMenu(PlaylistMenu): 24 25 def _get_new_name(self, parent, title): 26 return FIXED_NAME 27 28 29class TPlaylistMenu(TestCase): 30 SONG = AudioFile({ 31 "title": "two", 32 "artist": "mu", 33 "~filename": dummy_path(u"/dev/zero")}) 34 SONGS = [ 35 AudioFile({ 36 "title": "one", 37 "artist": "piman", 38 "~filename": dummy_path(u"/dev/null")}), 39 SONG, 40 ] 41 42 def setUp(self): 43 # Testing locally is VERY dangerous without this... 44 self.assertTrue(_TEMP_DIR in PLAYLISTS or os.name == "nt", 45 msg="Failing, don't want to delete %s" % PLAYLISTS) 46 try: 47 os.mkdir(PLAYLISTS) 48 except EnvironmentError: 49 pass 50 quodlibet.config.init() 51 self.lib = FileLibrary() 52 self.lib.librarian = SongLibrarian() 53 for af in self.SONGS: 54 af.sanitize() 55 self.lib.add(self.SONGS) 56 self.added = [] 57 58 def tearDown(self): 59 self.lib.destroy() 60 self.lib.librarian.destroy() 61 quodlibet.config.quit() 62 63 def _on_new(self, _, playlist): 64 self.added.append(playlist) 65 66 def test__on_new_playlist_activate(self): 67 main = qltk.MenuItem('Menu') 68 menu = StubbedPlaylistMenu(self.SONGS, []) 69 menu.connect('new', self._on_new) 70 main.set_submenu(menu) 71 72 menu._on_new_playlist_activate(main, self.SONGS) 73 74 self.failUnless(self.added, msg="No playlists signalled") 75 self.failUnlessEqual(self.added[0].songs, self.SONGS) 76 self.added[0].delete() 77