summaryrefslogtreecommitdiff
path: root/Lib/test/test_aifc.py
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2012-01-17 17:13:04 +0100
committerAntoine Pitrou <solipsis@pitrou.net>2012-01-17 17:13:04 +0100
commitb07fba26e242a415056dff02e2fd5f98ff20690c (patch)
treef8ea9825d867b91262e38c7a0a6d70b41787ee91 /Lib/test/test_aifc.py
parent0da98f809699279c284f914366afc849e19b9dfd (diff)
downloadcpython-b07fba26e242a415056dff02e2fd5f98ff20690c.tar.gz
Issue #13589: Fix some serialization primitives in the aifc module.
Patch by Oleg Plakhotnyuk.
Diffstat (limited to 'Lib/test/test_aifc.py')
-rw-r--r--Lib/test/test_aifc.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/Lib/test/test_aifc.py b/Lib/test/test_aifc.py
index 085b949996..236f9b6610 100644
--- a/Lib/test/test_aifc.py
+++ b/Lib/test/test_aifc.py
@@ -144,8 +144,45 @@ class AIFCTest(unittest.TestCase):
self.assertRaises(aifc.Error, f.getmark, 3)
+class AIFCLowLevelTest(unittest.TestCase):
+
+ def test_read_written(self):
+ def read_written(self, what):
+ f = io.BytesIO()
+ getattr(aifc, '_write_' + what)(f, x)
+ f.seek(0)
+ return getattr(aifc, '_read_' + what)(f)
+ for x in (-1, 0, 0.1, 1):
+ self.assertEqual(read_written(x, 'float'), x)
+ for x in (float('NaN'), float('Inf')):
+ self.assertEqual(read_written(x, 'float'), aifc._HUGE_VAL)
+ for x in (b'', b'foo', b'a' * 255):
+ self.assertEqual(read_written(x, 'string'), x)
+ for x in (-0x7FFFFFFF, -1, 0, 1, 0x7FFFFFFF):
+ self.assertEqual(read_written(x, 'long'), x)
+ for x in (0, 1, 0xFFFFFFFF):
+ self.assertEqual(read_written(x, 'ulong'), x)
+ for x in (-0x7FFF, -1, 0, 1, 0x7FFF):
+ self.assertEqual(read_written(x, 'short'), x)
+ for x in (0, 1, 0xFFFF):
+ self.assertEqual(read_written(x, 'ushort'), x)
+
+ def test_read_raises(self):
+ f = io.BytesIO(b'\x00')
+ self.assertRaises(EOFError, aifc._read_ulong, f)
+ self.assertRaises(EOFError, aifc._read_long, f)
+ self.assertRaises(EOFError, aifc._read_ushort, f)
+ self.assertRaises(EOFError, aifc._read_short, f)
+
+ def test_write_long_string_raises(self):
+ f = io.BytesIO()
+ with self.assertRaises(ValueError):
+ aifc._write_string(f, b'too long' * 255)
+
+
def test_main():
run_unittest(AIFCTest)
+ run_unittest(AIFCLowLevelTest)
if __name__ == "__main__":