| 
									
										
										
										
											2010-03-31 17:29:07 +09:00
										 |  |  | #!/usr/bin/env python | 
					
						
							|  |  |  | # coding: utf-8 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-29 11:24:25 +09:00
										 |  |  | from pytest import raises | 
					
						
							| 
									
										
										
										
											2018-11-20 13:12:49 +09:00
										 |  |  | from msgpack import packb, unpackb, Unpacker, FormatError, StackError, OutOfData | 
					
						
							| 
									
										
										
										
											2010-03-31 17:29:07 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | import datetime | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-29 01:39:59 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-22 12:12:32 +09:00
										 |  |  | class DummyException(Exception): | 
					
						
							|  |  |  |     pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-31 17:29:07 +09:00
										 |  |  | def test_raise_on_find_unsupported_value(): | 
					
						
							| 
									
										
										
										
											2012-12-29 11:24:25 +09:00
										 |  |  |     with raises(TypeError): | 
					
						
							|  |  |  |         packb(datetime.datetime.now()) | 
					
						
							| 
									
										
										
										
											2010-03-31 17:29:07 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-22 12:12:32 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | def test_raise_from_object_hook(): | 
					
						
							|  |  |  |     def hook(obj): | 
					
						
							|  |  |  |         raise DummyException | 
					
						
							| 
									
										
										
										
											2018-11-20 13:12:49 +09:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-29 11:24:25 +09:00
										 |  |  |     raises(DummyException, unpackb, packb({}), object_hook=hook) | 
					
						
							| 
									
										
										
										
											2018-11-20 13:12:49 +09:00
										 |  |  |     raises(DummyException, unpackb, packb({"fizz": "buzz"}), object_hook=hook) | 
					
						
							|  |  |  |     raises(DummyException, unpackb, packb({"fizz": "buzz"}), object_pairs_hook=hook) | 
					
						
							|  |  |  |     raises(DummyException, unpackb, packb({"fizz": {"buzz": "spam"}}), object_hook=hook) | 
					
						
							|  |  |  |     raises( | 
					
						
							|  |  |  |         DummyException, | 
					
						
							|  |  |  |         unpackb, | 
					
						
							|  |  |  |         packb({"fizz": {"buzz": "spam"}}), | 
					
						
							|  |  |  |         object_pairs_hook=hook, | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2012-12-29 01:39:59 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-12-29 11:24:25 +09:00
										 |  |  | def test_invalidvalue(): | 
					
						
							| 
									
										
										
										
											2018-11-20 13:12:49 +09:00
										 |  |  |     incomplete = b"\xd9\x97#DL_"  # raw8 - length=0x97 | 
					
						
							| 
									
										
										
										
											2012-12-29 11:24:25 +09:00
										 |  |  |     with raises(ValueError): | 
					
						
							| 
									
										
										
										
											2018-11-20 13:12:49 +09:00
										 |  |  |         unpackb(incomplete) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with raises(OutOfData): | 
					
						
							|  |  |  |         unpacker = Unpacker() | 
					
						
							|  |  |  |         unpacker.feed(incomplete) | 
					
						
							|  |  |  |         unpacker.unpack() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with raises(FormatError): | 
					
						
							|  |  |  |         unpackb(b"\xc1")  # (undefined tag) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with raises(FormatError): | 
					
						
							|  |  |  |         unpackb(b"\x91\xc1")  # fixarray(len=1) [ (undefined tag) ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     with raises(StackError): | 
					
						
							|  |  |  |         unpackb(b"\x91" * 3000)  # nested fixarray(len=1) | 
					
						
							| 
									
										
										
										
											2018-11-29 22:29:38 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_strict_map_key(): | 
					
						
							|  |  |  |     valid = {u"unicode": 1, b"bytes": 2} | 
					
						
							|  |  |  |     packed = packb(valid, use_bin_type=True) | 
					
						
							| 
									
										
										
										
											2018-11-30 11:36:15 +09:00
										 |  |  |     assert valid == unpackb(packed, raw=False, strict_map_key=True) | 
					
						
							| 
									
										
										
										
											2018-11-29 22:29:38 +09:00
										 |  |  | 
 | 
					
						
							|  |  |  |     invalid = {42: 1} | 
					
						
							|  |  |  |     packed = packb(invalid, use_bin_type=True) | 
					
						
							|  |  |  |     with raises(ValueError): | 
					
						
							| 
									
										
										
										
											2018-11-30 11:36:15 +09:00
										 |  |  |         unpackb(packed, raw=False, strict_map_key=True) |