encode_decode_test.rb 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #!/usr/bin/ruby
  2. # generated_code.rb is in the same directory as this test.
  3. $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)))
  4. require 'generated_code_pb'
  5. require 'test/unit'
  6. def hex2bin(s)
  7. s.scan(/../).map { |x| x.hex.chr }.join
  8. end
  9. class EncodeDecodeTest < Test::Unit::TestCase
  10. def test_discard_unknown
  11. # Test discard unknown in message.
  12. unknown_msg = A::B::C::TestUnknown.new(:unknown_field => 1)
  13. from = A::B::C::TestUnknown.encode(unknown_msg)
  14. m = A::B::C::TestMessage.decode(from)
  15. Google::Protobuf.discard_unknown(m)
  16. to = A::B::C::TestMessage.encode(m)
  17. assert_equal '', to
  18. # Test discard unknown for singular message field.
  19. unknown_msg = A::B::C::TestUnknown.new(
  20. :optional_unknown =>
  21. A::B::C::TestUnknown.new(:unknown_field => 1))
  22. from = A::B::C::TestUnknown.encode(unknown_msg)
  23. m = A::B::C::TestMessage.decode(from)
  24. Google::Protobuf.discard_unknown(m)
  25. to = A::B::C::TestMessage.encode(m.optional_msg)
  26. assert_equal '', to
  27. # Test discard unknown for repeated message field.
  28. unknown_msg = A::B::C::TestUnknown.new(
  29. :repeated_unknown =>
  30. [A::B::C::TestUnknown.new(:unknown_field => 1)])
  31. from = A::B::C::TestUnknown.encode(unknown_msg)
  32. m = A::B::C::TestMessage.decode(from)
  33. Google::Protobuf.discard_unknown(m)
  34. to = A::B::C::TestMessage.encode(m.repeated_msg[0])
  35. assert_equal '', to
  36. # Test discard unknown for map value message field.
  37. unknown_msg = A::B::C::TestUnknown.new(
  38. :map_unknown =>
  39. {"" => A::B::C::TestUnknown.new(:unknown_field => 1)})
  40. from = A::B::C::TestUnknown.encode(unknown_msg)
  41. m = A::B::C::TestMessage.decode(from)
  42. Google::Protobuf.discard_unknown(m)
  43. to = A::B::C::TestMessage.encode(m.map_string_msg[''])
  44. assert_equal '', to
  45. # Test discard unknown for oneof message field.
  46. unknown_msg = A::B::C::TestUnknown.new(
  47. :oneof_unknown =>
  48. A::B::C::TestUnknown.new(:unknown_field => 1))
  49. from = A::B::C::TestUnknown.encode(unknown_msg)
  50. m = A::B::C::TestMessage.decode(from)
  51. Google::Protobuf.discard_unknown(m)
  52. to = A::B::C::TestMessage.encode(m.oneof_msg)
  53. assert_equal '', to
  54. end
  55. def test_encode_json
  56. msg = A::B::C::TestMessage.new({ optional_int32: 22 })
  57. json = msg.to_json
  58. to = A::B::C::TestMessage.decode_json(json)
  59. assert_equal to.optional_int32, 22
  60. msg = A::B::C::TestMessage.new({ optional_int32: 22 })
  61. json = msg.to_json({ preserve_proto_fieldnames: true })
  62. assert_match 'optional_int32', json
  63. to = A::B::C::TestMessage.decode_json(json)
  64. assert_equal 22, to.optional_int32
  65. msg = A::B::C::TestMessage.new({ optional_int32: 22 })
  66. json = A::B::C::TestMessage.encode_json(
  67. msg,
  68. { preserve_proto_fieldnames: true, emit_defaults: true }
  69. )
  70. assert_match 'optional_int32', json
  71. end
  72. def test_encode_wrong_msg
  73. assert_raise ::ArgumentError do
  74. m = A::B::C::TestMessage.new(
  75. :optional_int32 => 1,
  76. )
  77. Google::Protobuf::Any.encode(m)
  78. end
  79. end
  80. end