class TAudioFileAllBase(object):

    FILE = None

    def setUp(self):
        fd, filename = mkstemp(os.path.splitext(self.FILE)[-1])
        os.close(fd)
        shutil.copy(self.FILE, filename)
        self.song = MusicFile(filename)
        self.filename = filename

    def tearDown(self):
        try:
            os.remove(self.filename)
        except OSError:
            pass

    def test_clear_images_noent(self):
        os.remove(self.filename)
        self.assertRaises(AudioFileError, self.song.clear_images)

    def test_set_image_noent(self):
        os.remove(self.filename)
        image = EmbeddedImage(None, "image/png")
        self.assertRaises(AudioFileError, self.song.set_image, image)

    def test_get_primary_image_noent(self):
        os.remove(self.filename)
        self.assertTrue(self.song.get_primary_image() is None)

    def test_get_images_noent(self):
        os.remove(self.filename)
        self.assertEqual(self.song.get_images(), [])

    def test_write_noent(self):
        os.remove(self.filename)
        try:
            self.song.write()
        except AudioFileError:
            pass

    def test_load_noent(self):
        os.remove(self.filename)
        self.assertRaises(AudioFileError, type(self.song), self.filename)

    @classmethod
    def create_tests(cls):
        for i, file_ in enumerate(FILES):
            new_type = type(cls.__name__ + str(i),
                            (cls, TestCase), {"FILE": file_})
            assert new_type.__name__ not in globals()
            globals()[new_type.__name__] = new_type
 def test_reload_externally_modified(self):
     config.set("editing", "save_to_songs", True)
     fn = self.quux("~filename") + ".mp3"
     shutil.copy(get_data_path('silence-44-s.mp3'), fn)
     orig = MusicFile(fn)
     copy = MusicFile(fn)
     orig["~#rating"] = SOME_RATING
     copy["~#rating"] = ANOTHER_RATING
     orig.write()
     orig.reload()
     copy.reload()  # should pick up the change to the file
     assert orig("~#rating") == SOME_RATING, "reloading failed"
     assert copy(
         "~#rating") == SOME_RATING, "should have picked up external change"
class TAudioFileAllBase(object):

    FILE = None

    def setUp(self):
        self.filename = get_temp_copy(self.FILE)
        self.song = MusicFile(self.filename)

    def tearDown(self):
        try:
            os.remove(self.filename)
        except OSError:
            pass

    def test_clear_images_noent(self):
        os.remove(self.filename)
        self.assertRaises(AudioFileError, self.song.clear_images)

    def test_set_image_noent(self):
        os.remove(self.filename)
        image = EmbeddedImage(None, "image/png")
        self.assertRaises(AudioFileError, self.song.set_image, image)

    def test_get_primary_image_noent(self):
        os.remove(self.filename)
        self.assertTrue(self.song.get_primary_image() is None)

    def test_get_images_noent(self):
        os.remove(self.filename)
        self.assertEqual(self.song.get_images(), [])

    def test_write_noent(self):
        os.remove(self.filename)
        try:
            self.song.write()
        except AudioFileError:
            pass

    def test_load_noent(self):
        os.remove(self.filename)
        self.assertRaises(AudioFileError, type(self.song), self.filename)

    @classmethod
    def create_tests(cls):
        for i, file_ in enumerate(FILES):
            new_type = type(cls.__name__ + str(i), (cls, TestCase),
                            {"FILE": file_})
            assert new_type.__name__ not in globals()
            globals()[new_type.__name__] = new_type