def test_determinism(self): deterministic = coders_registry.get_coder(typehints.Optional[int]) deterministic.as_deterministic_coder('label') complex_deterministic = coders_registry.get_coder( typehints.Optional[DummyClass]) complex_deterministic.as_deterministic_coder('label') nondeterministic = coders.NullableCoder(coders.Base64PickleCoder()) with pytest.raises(ValueError): nondeterministic.as_deterministic_coder('label')
def test_str_utf8_coder(self): real_coder = coders_registry.get_coder(str) expected_coder = coders.BytesCoder() self.assertEqual( real_coder.encode('abc'), expected_coder.encode('abc')) self.assertEqual('abc', real_coder.decode(real_coder.encode('abc'))) real_coder = coders_registry.get_coder(bytes) expected_coder = coders.BytesCoder() self.assertEqual( real_coder.encode('abc'), expected_coder.encode('abc')) self.assertEqual('abc', real_coder.decode(real_coder.encode('abc')))
def test_str_utf8_coder(self): real_coder = coders_registry.get_coder(str) expected_coder = coders.BytesCoder() self.assertEqual(real_coder.encode('abc'), expected_coder.encode('abc')) self.assertEqual('abc', real_coder.decode(real_coder.encode('abc'))) real_coder = coders_registry.get_coder(bytes) expected_coder = coders.BytesCoder() self.assertEqual(real_coder.encode('abc'), expected_coder.encode('abc')) self.assertEqual('abc', real_coder.decode(real_coder.encode('abc')))
def test_avro_record_coder(self): real_coder = coders_registry.get_coder(AvroTestRecord) expected_coder = AvroTestCoder() self.assertEqual( real_coder.encode( AvroTestRecord({ "name": "Daenerys targaryen", "age": 23 })), expected_coder.encode( AvroTestRecord({ "name": "Daenerys targaryen", "age": 23 }))) self.assertEqual( AvroTestRecord({ "name": "Jon Snow", "age": 23 }), real_coder.decode( real_coder.encode( AvroTestRecord({ "name": "Jon Snow", "age": 23 }))))
def test_default_fallback_path(self): """Test fallback path picks a matching coder if no coder is registered.""" coder = coders_registry.get_coder(DummyClass) # No matching coder, so picks the last fallback coder which is a # FastPrimitivesCoder. self.assertEqual(coder, coders.FastPrimitivesCoder()) self.assertEqual(DummyClass(), coder.decode(coder.encode(DummyClass())))
def test_default_fallback_path(self): """Test fallback path picks a matching coder if no coder is registered.""" coder = coders_registry.get_coder(DummyClass) # No matching coder, so picks the last fallback coder which is a # FastPrimitivesCoder. self.assertEqual(coder, coders.FastPrimitivesCoder()) self.assertEqual(DummyClass(), coder.decode(coder.encode(DummyClass())))
def test_proto_coder(self): ma = test_message.MessageA() mb = ma.field2.add() mb.field1 = True ma.field1 = u'hello world' expected_coder = coders.ProtoCoder(ma.__class__) real_coder = coders_registry.get_coder(ma.__class__) self.assertEqual(expected_coder, real_coder) self.assertEqual(real_coder.encode(ma), expected_coder.encode(ma)) self.assertEqual(ma, real_coder.decode(real_coder.encode(ma)))
def test_proto_coder(self): ma = test_message.MessageA() mb = ma.field2.add() mb.field1 = True ma.field1 = u'hello world' expected_coder = coders.ProtoCoder(ma.__class__) real_coder = coders_registry.get_coder(ma.__class__) self.assertEqual(expected_coder, real_coder) self.assertEqual(real_coder.encode(ma), expected_coder.encode(ma)) self.assertEqual(ma, real_coder.decode(real_coder.encode(ma)))
def test_create_row_coder_from_named_tuple(self): expected_coder = RowCoder(typing_to_runner_api(Person).row_type.schema) real_coder = coders_registry.get_coder(Person) for test_case in self.PEOPLE: self.assertEqual(expected_coder.encode(test_case), real_coder.encode(test_case)) self.assertEqual(test_case, real_coder.decode(real_coder.encode(test_case)))
def test_proto_plus_coder(self): ma = ProtoPlusMessageA() ma.field2 = [ProtoPlusMessageB(field1=True)] ma.field1 = u'hello world' expected_coder = coders.ProtoPlusCoder(ma.__class__) real_coder = coders_registry.get_coder(ma.__class__) self.assertTrue(issubclass(ma.__class__, proto.Message)) self.assertEqual(expected_coder, real_coder) self.assertTrue(real_coder.is_deterministic()) self.assertEqual(real_coder.encode(ma), expected_coder.encode(ma)) self.assertEqual(ma, real_coder.decode(real_coder.encode(ma)))
def test_deterministic_proto_coder(self): ma = test_message.MessageA() mb = ma.field2.add() mb.field1 = True ma.field1 = u'hello world' expected_coder = coders.DeterministicProtoCoder(ma.__class__) real_coder = (coders_registry.get_coder( ma.__class__).as_deterministic_coder(step_label='unused')) self.assertTrue(real_coder.is_deterministic()) self.assertEqual(expected_coder, real_coder) self.assertEqual(real_coder.encode(ma), expected_coder.encode(ma)) self.assertEqual(ma, real_coder.decode(real_coder.encode(ma)))
def test_row_coder_picklable(self): # occasionally coders can get pickled, RowCoder should be able to handle it coder = coders_registry.get_coder(Person) roundtripped = pickler.loads(pickler.dumps(coder)) self.assertEqual(roundtripped, coder)