Esempio n. 1
0
class BufferedStreamTests(unittest.TestCase):

    def setUp(self):
        self.original_stream = console.stream
        console.stream = sys.stdout
        self.keeper_root = 'testkeeper'
        shutil.rmtree(self.keeper_root, ignore_errors=True)

        try:
            os.mkdir(self.keeper_root)
        except FileExistsError:
            pass
        self.keeper = Keeper(self.keeper_root)

    def tearDown(self):
        try:
            shutil.rmtree(self.keeper_root)
        except FileNotFoundError:
            pass
        console.stream = self.original_stream


    def test_add_buffered_stream_in_context(self):
        with self.keeper.add_buffered_stream() as stream:
            stream.write(b"The quick brown fox jumped over the lazy dog")
        self.assertIn(stream.key, self.keeper)

    def test_add_buffered_stream_with_close(self):
        stream = self.keeper.add_buffered_stream()
        stream.write(b"The very hungry caterpillar")
        stream.close()
        self.assertIn(stream.key, self.keeper)

    def test_key_in_none_before_close(self):
        stream = self.keeper.add_buffered_stream()
        stream.write(b"The very hungry caterpillar")
        self.assertIs(stream.key, None)
        stream.close()

    def test_key_identical_bytes_add_before_stream(self):
        key1 = self.keeper.add(b'gdgdgdggd')
        with self.keeper.add_buffered_stream() as stream:
            stream.write(b'gdgdgdggd')
        key2 = stream.key
        self.assertEqual(key1, key2)
        self.assertEqual(len(self.keeper), 1)

    def test_key_identical_bytes_stream_before_add(self):
        with self.keeper.add_buffered_stream() as stream:
            stream.write(b'gdgdgdggd')
        key1 = stream.key
        key2 = self.keeper.add(b'gdgdgdggd')
        self.assertEqual(key1, key2)
        self.assertEqual(len(self.keeper), 1)

    def test_key_identical_strings_add_before_stream(self):
        key1 = self.keeper.add('gdgdgdggd')
        with self.keeper.add_buffered_stream(encoding=sys.getdefaultencoding()) as stream:
            stream.write('gdgdgdggd')
        key2 = stream.key
        self.assertEqual(key1, key2)
        self.assertEqual(len(self.keeper), 1)

    def test_key_identical_strings_stream_before_add(self):
        with self.keeper.add_buffered_stream(encoding=sys.getdefaultencoding()) as stream:
            stream.write('gdgdgdggd')
        key1 = stream.key
        key2 = self.keeper.add('gdgdgdggd')
        self.assertEqual(key1, key2)
        self.assertEqual(len(self.keeper), 1)

    def test_cleanup_pending_add_buffered_stream(self):
        # Temporarily ignore warnings
        with warnings.catch_warnings():
            warnings.simplefilter("ignore")

            stream = self.keeper.add_buffered_stream()
            stream.write(b"The very hungry caterpillar")
            self.assertIs(stream.key, None)
            # deliberately omitted close causes an intentional ResourceWarning
            self.assertEqual(len(self.keeper), 0)

            self.keeper = Keeper(self.keeper_root)
            stream = self.keeper.add_buffered_stream()
            stream.write(b"The very hungry caterpillar")
            stream.close()
            self.assertEqual(len(self.keeper), 1)