def test_filename_from_fspath(self): class FilePath(object): def __init__(self, filename): self.filename = filename def __fspath__(self): return self.filename @loadfile(method=False, writable=True) def file_func(filething): fileobj = filething.fileobj assert fileobj.read(3) == b"foo" fileobj.seek(0, 2) fileobj.write(b"bar") filename = get_temp_empty() try: with open(filename, "wb") as h: h.write(b"foo") file_func(FilePath(filename)) with open(filename, "rb") as h: assert h.read() == b"foobar" finally: os.unlink(filename) with pytest.raises(TypeError, match=r'.*__fspath__.*'): file_func(FilePath(42))
def test_handle_readwrite_notsup(self): @loadfile(method=False, writable=True) def file_func(filething): fileobj = filething.fileobj assert fileobj.read(3) == b"foo" fileobj.seek(0, 2) fileobj.write(b"bar") # first a normal test filename = get_temp_empty() try: with open(filename, "wb") as h: h.write(b"foo") file_func(filename) with open(filename, "rb") as h: assert h.read() == b"foobar" finally: os.unlink(filename) # now we mock open to return raise EOPNOTSUPP in case of mixed mode. # things should still work since we edit the file in memory raised = [] old_open = open def mock_open(name, mode, *args): if "+" in mode: raised.append(True) raise IOError(errno.EOPNOTSUPP, "nope") return old_open(name, mode, *args) builtins.open = mock_open try: filename = get_temp_empty() try: with open(filename, "wb") as h: h.write(b"foo") file_func(filename) with open(filename, "rb") as h: assert h.read() == b"foobar" finally: os.unlink(filename) finally: builtins.open = old_open assert raised
def setUp(self): self.sample_new = get_temp_copy(SAMPLE) self.broken_new = get_temp_copy(BROKEN) tag = mutagen.apev2.APEv2() self.values = { "artist": "Joe Wreschnig\0unittest", "album": "Mutagen tests", "title": "Not really a song" } for k, v in self.values.items(): tag[k] = v tag.save(self.sample_new) self.just_tag = get_temp_empty() tag.save(self.just_tag) self.tag_at_start = get_temp_empty() tag.save(self.tag_at_start) with open(self.tag_at_start, "ab") as fileobj: fileobj.write(b"tag garbage" * 1000) self.tag = mutagen.apev2.APEv2(self.sample_new)
def test_PIC_in_23(self): filename = get_temp_empty(".mp3") try: with open(filename, "wb") as h: # contains a bad upgraded frame, 2.3 structure with 2.2 name. # PIC was upgraded to APIC, but mime was not h.write(b"ID3\x03\x00\x00\x00\x00\x08\x00PIC\x00\x00\x00" b"\x00\x0b\x00\x00\x00JPG\x00\x03foo\x00\x42" b"\x00" * 100) id3 = ID3(filename) self.assertEqual(id3.version, (2, 3, 0)) self.assertTrue(id3.getall("APIC")) frame = id3.getall("APIC")[0] self.assertEqual(frame.mime, "image/jpeg") self.assertEqual(frame.data, b"\x42") self.assertEqual(frame.type, 3) self.assertEqual(frame.desc, "foo") finally: os.remove(filename)
def get_named_file(self, content): filename = get_temp_empty() h = open(filename, "wb+") h.write(content) h.seek(0) return h