예제 #1
0
 def test_escape_slash(s):
     fpat = FileFromPattern('<~filename>')
     pat = Pattern('<~filename>')
     wpat = FileFromPattern(r'\\<artist>\\ "<title>')
     s.assertEquals(fpat.format(s.a), "_path_to_a.mp3")
     s.assertEquals(pat.format(s.a), "/path/to/a.mp3")
     s.assertEquals(wpat.format(s.a), "\\Artist\\ \"Title5.mp3")
예제 #2
0
 def test_specialcase_anti_ext(s):
     p1 = FileFromPattern('<~filename>')
     p2 = FileFromPattern('<~dirname>_<~basename>')
     s.assertEquals(p1.format(s.a), p2.format(s.a))
     s.assertEquals(p1.format(s.a), '_path_to_a.mp3')
     s.assertEquals(p1.format(s.b), p2.format(s.b))
     s.assertEquals(p1.format(s.b), '_path_to_b.ogg')
     s.assertEquals(p1.format(s.c), p2.format(s.c))
     s.assertEquals(p1.format(s.c), '_one_more_a.flac')
예제 #3
0
    def test_directory_rooting(s):
        if os.name == "nt":
            s.assertRaises(ValueError, FileFromPattern, 'a\\<b>')
            s.assertRaises(ValueError, FileFromPattern, '<a>\\<b>')
            FileFromPattern('C:\\<a>\\<b>')

        else:
            s.assertRaises(ValueError, FileFromPattern, 'a/<b>')
            s.assertRaises(ValueError, FileFromPattern, '<a>/<b>')
            FileFromPattern('/<a>/<b>')
예제 #4
0
 def test_ext_case_preservation(s):
     x = s.AudioFile({'~filename': '/tmp/Xx.Flac', 'title': 'Xx'})
     # If pattern has a particular ext, preserve case of ext
     p1 = FileFromPattern('<~basename>')
     s.assertEquals(p1.format(x), 'Xx.Flac')
     p2 = FileFromPattern('<title>.FLAC')
     s.assertEquals(p2.format(x), 'Xx.FLAC')
     # If pattern doesn't have a particular ext, lowercase ext
     p3 = FileFromPattern('<title>')
     s.assertEquals(p3.format(x), 'Xx.flac')
예제 #5
0
 def test_long_filename(s):
     if os.name == "nt":
         a = s.AudioFile({"title": "x" * 300, "~filename": u"C:\\f.mp3"})
         path = FileFromPattern(u'C:\\foobar\\ä<title>\\<title>').format(a)
         s.failUnlessEqual(len(util.fsnative(path)),
                           3 + 6 + 1 + 255 + 1 + 255)
         path = FileFromPattern(u'äüö<title><title>').format(a)
         s.failUnlessEqual(len(util.fsnative(path)), 255)
     else:
         a = s.AudioFile({"title": "x" * 300, "~filename": "/f.mp3"})
         path = FileFromPattern(u'/foobar/ä<title>/<title>').format(a)
         s.failUnlessEqual(len(util.fsnative(path)),
                           1 + 6 + 1 + 255 + 1 + 255)
         path = FileFromPattern(u'äüö<title><title>').format(a)
         s.failUnlessEqual(len(util.fsnative(path)), 255)
예제 #6
0
 def test_specialcase_anti_ext(s):
     p1 = FileFromPattern('<~filename>')
     p2 = FileFromPattern('<~dirname>_<~basename>')
     s.assertEquals(p1.format(s.a), p2.format(s.a))
     s.assertEquals(p1.format(s.a), '_path_to_a.mp3')
     s.assertEquals(p1.format(s.b), p2.format(s.b))
     s.assertEquals(p1.format(s.b), '_path_to_b.ogg')
     s.assertEquals(p1.format(s.c), p2.format(s.c))
     s.assertEquals(p1.format(s.c), '_one_more_a.flac')
예제 #7
0
    def test_raw_slash_preservation(s):
        if os.name == "nt":
            pat = FileFromPattern('C:\\a\\b\\<genre>')
            s.assertEquals(pat.format(s.a), 'C:\\a\\b\\.mp3')
            s.assertEquals(pat.format(s.b), 'C:\\a\\b\\.ogg')
            s.assertEquals(pat.format(s.c), 'C:\\a\\b\\_, _.flac')

        else:
            pat = FileFromPattern('/a/b/<genre>')
            s.assertEquals(pat.format(s.a), '/a/b/.mp3')
            s.assertEquals(pat.format(s.b), '/a/b/.ogg')
            s.assertEquals(pat.format(s.c), '/a/b/_, _.flac')
예제 #8
0
    def __preview(self, songs):
        model = self.view.get_model()
        if songs is None:
            songs = [row[0] for row in model]
        pattern = self.combo.get_child().get_text().decode("utf-8")

        try:
            pattern = FileFromPattern(pattern)
        except ValueError:
            qltk.ErrorMessage(
                self, _("Path is not absolute"),
                _("The pattern\n\t<b>%s</b>\ncontains / but "
                  "does not start from root. To avoid misnamed "
                  "folders, root your pattern by starting "
                  "it with / or ~/.") % (util.escape(pattern))).run()
            return
        else:
            if self.combo.get_child().get_text():
                self.combo.prepend_text(self.combo.get_child().get_text())
                self.combo.write(const.NBP)

        orignames = [song["~filename"] for song in songs]
        newnames = [pattern.format(song) for song in songs]
        for f in self.filters:
            if f.active:
                newnames = f.filter_list(orignames, newnames)

        model.clear()
        for song, newname in zip(songs, newnames):
            basename = fsdecode(song("~basename"))
            newname = fsdecode(newname)
            model.append(row=[song, basename, newname])
        self.preview.set_sensitive(False)
        self.save.set_sensitive(bool(self.combo.get_child().get_text()))
        for song in songs:
            if not song.is_file:
                self.set_sensitive(False)
                break
        else:
            self.set_sensitive(True)
예제 #9
0
 def test_unicode_slash_removal(s):
     if os.name == "nt":
         pat = FileFromPattern(u'C:\\a\\b\\<unislash>')
         s.assertEquals(pat.format(s.b), 'C:\\a\\b\\foo_bar.ogg')
     else:
         pat = FileFromPattern(u'/a/b/<unislash>')
         s.assertEquals(pat.format(s.b), '/a/b/foo_bar.ogg')
예제 #10
0
    def __preview(self, songs):
        model = self.view.get_model()
        if songs is None:
            songs = [row[0] for row in model]
        pattern = self.combo.child.get_text().decode("utf-8")

        try:
            pattern = FileFromPattern(pattern)
        except ValueError:
            qltk.ErrorMessage(
                self, _("Path is not absolute"),
                _("The pattern\n\t<b>%s</b>\ncontains / but "
                  "does not start from root. To avoid misnamed "
                  "folders, root your pattern by starting "
                  "it with / or ~/.")%(
                util.escape(pattern))).run()
            return
        else:
            if self.combo.child.get_text():
                self.combo.prepend_text(self.combo.child.get_text())
                self.combo.write(const.NBP)

        orignames = [song["~filename"] for song in songs]
        newnames = [util.fsdecode(util.fsencode(pattern.format(song)))
                    for song in songs]
        for f in self.filters:
            if f.active: newnames = f.filter_list(orignames, newnames)

        model.clear()
        for song, newname in zip(songs, newnames):
            basename = util.fsdecode(song("~basename"))
            model.append(row=[song, basename, newname])
        self.preview.set_sensitive(False)
        self.save.set_sensitive(bool(self.combo.child.get_text()))
        for song in songs:
            if not song.is_file:
                self.set_sensitive(False)
                break
        else: self.set_sensitive(True)
예제 #11
0
 def test_ext_case_preservation(s):
     x = s.AudioFile({ '~filename':'/tmp/Xx.Flac', 'title':'Xx' })
     # If pattern has a particular ext, preserve case of ext
     p1 = FileFromPattern('<~basename>')
     s.assertEquals(p1.format(x), 'Xx.Flac')
     p2 = FileFromPattern('<title>.FLAC')
     s.assertEquals(p2.format(x), 'Xx.FLAC')
     # If pattern doesn't have a particular ext, lowercase ext
     p3 = FileFromPattern('<title>')
     s.assertEquals(p3.format(x), 'Xx.flac')
예제 #12
0
 def test_escape_slash(s):
     fpat = FileFromPattern('<~filename>')
     pat = Pattern('<~filename>')
     wpat = FileFromPattern(r'\\<artist>\\ "<title>')
     s.assertEquals(fpat.format(s.a), "_path_to_a.mp3")
     s.assertEquals(pat.format(s.a), "/path/to/a.mp3")
     if os.name != "nt":
         s.assertEquals(wpat.format(s.a), "\\Artist\\ \"Title5.mp3")
     else:
         # FIXME..
         pass
예제 #13
0
 def test_same2(s):
     fpat = FileFromPattern('<~filename>')
     pat = Pattern('<~filename>')
     s.assertEquals(fpat.format_list(s.a), set([fpat.format(s.a)]))
     s.assertEquals(pat.format_list(s.a), set([pat.format(s.a)]))
예제 #14
0
 def test_backslash_conversion_win32(s):
     if os.name == 'nt':
         pat = FileFromPattern(r'Z:\<artist>\<title>')
         s.assertEquals(pat.format(s.a), 'Z:\Artist\Title5.mp3')
예제 #15
0
 def test_number_dot_title_dot(s):
     pat = FileFromPattern('<tracknumber>. <title>.')
     s.assertEquals(pat.format(s.a), '05. Title5..mp3')
     s.assertEquals(pat.format(s.b), '06. Title6..ogg')
     s.assertEquals(pat.format(s.c), '. test_subdir..flac')
예제 #16
0
 def test_raw_slash_preservation(s):
     pat = FileFromPattern('/a/b/<genre>')
     s.assertEquals(pat.format(s.a), '/a/b/.mp3')
     s.assertEquals(pat.format(s.b), '/a/b/.ogg')
     s.assertEquals(pat.format(s.c), '/a/b/_, _.flac')
예제 #17
0
 def test_tracknumber_decimals(s):
     pat = FileFromPattern('<tracknumber>. <title>')
     s.assertEquals(pat.format(s.a), '05. Title5.mp3')
     s.assertEquals(pat.format(s.e), '0007. Title7.mp3')
예제 #18
0
 def test_unicode_slash_removal(s):
     pat = FileFromPattern(u'/a/b/<unislash>')
     s.assertEquals(pat.format(s.b), '/a/b/foo_bar.ogg')
예제 #19
0
 def test_backslash_conversion_win32(s):
     if os.name == 'nt':
         pat = FileFromPattern(r'Z:\<artist>\<title>')
         s.assertEquals(pat.format(s.a), 'Z:/Artist/Title5.mp3')
예제 #20
0
 def test_tracknumber_decimals(s):
     pat = FileFromPattern('<tracknumber>. <title>')
     s.assertEquals(pat.format(s.a), '05. Title5.mp3')
     s.assertEquals(pat.format(s.e), '0007. Title7.mp3')
예제 #21
0
 def test_number_dot_title_dot(s):
     pat = FileFromPattern('<tracknumber>. <title>.')
     s.assertEquals(pat.format(s.a), '05. Title5..mp3')
     s.assertEquals(pat.format(s.b), '06. Title6..ogg')
     s.assertEquals(pat.format(s.c), '. test_subdir..flac')
예제 #22
0
 def test_same2(s):
     fpat = FileFromPattern('<~filename>')
     pat = Pattern('<~filename>')
     s.assertEquals(fpat.format_list(s.a), set([fpat.format(s.a)]))
     s.assertEquals(pat.format_list(s.a), set([pat.format(s.a)]))