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