|  | #!/usr/bin/ruby | 
|  |  | 
|  | # generated_code.rb is in the same directory as this test. | 
|  | $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__))) | 
|  |  | 
|  | require 'generated_code_pb' | 
|  | require 'test/unit' | 
|  |  | 
|  | def hex2bin(s) | 
|  | s.scan(/../).map { |x| x.hex.chr }.join | 
|  | end | 
|  |  | 
|  | class EncodeDecodeTest < Test::Unit::TestCase | 
|  | def test_discard_unknown | 
|  | # Test discard unknown in message. | 
|  | unknown_msg = A::B::C::TestUnknown.new(:unknown_field => 1) | 
|  | from = A::B::C::TestUnknown.encode(unknown_msg) | 
|  | m = A::B::C::TestMessage.decode(from) | 
|  | Google::Protobuf.discard_unknown(m) | 
|  | to = A::B::C::TestMessage.encode(m) | 
|  | assert_equal '', to | 
|  |  | 
|  | # Test discard unknown for singular message field. | 
|  | unknown_msg = A::B::C::TestUnknown.new( | 
|  | :optional_unknown => | 
|  | A::B::C::TestUnknown.new(:unknown_field => 1)) | 
|  | from = A::B::C::TestUnknown.encode(unknown_msg) | 
|  | m = A::B::C::TestMessage.decode(from) | 
|  | Google::Protobuf.discard_unknown(m) | 
|  | to = A::B::C::TestMessage.encode(m.optional_msg) | 
|  | assert_equal '', to | 
|  |  | 
|  | # Test discard unknown for repeated message field. | 
|  | unknown_msg = A::B::C::TestUnknown.new( | 
|  | :repeated_unknown => | 
|  | [A::B::C::TestUnknown.new(:unknown_field => 1)]) | 
|  | from = A::B::C::TestUnknown.encode(unknown_msg) | 
|  | m = A::B::C::TestMessage.decode(from) | 
|  | Google::Protobuf.discard_unknown(m) | 
|  | to = A::B::C::TestMessage.encode(m.repeated_msg[0]) | 
|  | assert_equal '', to | 
|  |  | 
|  | # Test discard unknown for map value message field. | 
|  | unknown_msg = A::B::C::TestUnknown.new( | 
|  | :map_unknown => | 
|  | {"" => A::B::C::TestUnknown.new(:unknown_field => 1)}) | 
|  | from = A::B::C::TestUnknown.encode(unknown_msg) | 
|  | m = A::B::C::TestMessage.decode(from) | 
|  | Google::Protobuf.discard_unknown(m) | 
|  | to = A::B::C::TestMessage.encode(m.map_string_msg['']) | 
|  | assert_equal '', to | 
|  |  | 
|  | # Test discard unknown for oneof message field. | 
|  | unknown_msg = A::B::C::TestUnknown.new( | 
|  | :oneof_unknown => | 
|  | A::B::C::TestUnknown.new(:unknown_field => 1)) | 
|  | from = A::B::C::TestUnknown.encode(unknown_msg) | 
|  | m = A::B::C::TestMessage.decode(from) | 
|  | Google::Protobuf.discard_unknown(m) | 
|  | to = A::B::C::TestMessage.encode(m.oneof_msg) | 
|  | assert_equal '', to | 
|  | end | 
|  |  | 
|  | def test_encode_json | 
|  | msg = A::B::C::TestMessage.new({ optional_int32: 22 }) | 
|  | json = msg.to_json | 
|  |  | 
|  | to = A::B::C::TestMessage.decode_json(json) | 
|  | assert_equal to.optional_int32, 22 | 
|  |  | 
|  | msg = A::B::C::TestMessage.new({ optional_int32: 22 }) | 
|  | json = msg.to_json({ preserve_proto_fieldnames: true }) | 
|  |  | 
|  | assert_match 'optional_int32', json | 
|  |  | 
|  | to = A::B::C::TestMessage.decode_json(json) | 
|  | assert_equal 22, to.optional_int32 | 
|  |  | 
|  | msg = A::B::C::TestMessage.new({ optional_int32: 22 }) | 
|  | json = A::B::C::TestMessage.encode_json( | 
|  | msg, | 
|  | { preserve_proto_fieldnames: true, emit_defaults: true } | 
|  | ) | 
|  |  | 
|  | assert_match 'optional_int32', json | 
|  | end | 
|  |  | 
|  | def test_encode_wrong_msg | 
|  | assert_raise ::ArgumentError do | 
|  | m = A::B::C::TestMessage.new( | 
|  | :optional_int32 => 1, | 
|  | ) | 
|  | Google::Protobuf::Any.encode(m) | 
|  | end | 
|  | end | 
|  |  | 
|  | end |