blob: d3cebab215fa1022f55adae74ede0ccfbe245a88 [file] [log] [blame]
Paul Yang0e7b5892017-12-07 14:18:38 -08001#!/usr/bin/ruby
2
3# generated_code.rb is in the same directory as this test.
4$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)))
5
6require 'generated_code_pb'
7require 'test/unit'
8
9def hex2bin(s)
10 s.scan(/../).map { |x| x.hex.chr }.join
11end
12
13class EncodeDecodeTest < Test::Unit::TestCase
14 def test_discard_unknown
15 # Test discard unknown in message.
16 unknown_msg = A::B::C::TestUnknown.new(:unknown_field => 1)
17 from = A::B::C::TestUnknown.encode(unknown_msg)
18 m = A::B::C::TestMessage.decode(from)
19 Google::Protobuf.discard_unknown(m)
20 to = A::B::C::TestMessage.encode(m)
21 assert_equal '', to
22
23 # Test discard unknown for singular message field.
24 unknown_msg = A::B::C::TestUnknown.new(
Paul Yang37a0ab72019-01-17 10:24:41 -080025 :optional_unknown =>
26 A::B::C::TestUnknown.new(:unknown_field => 1))
Paul Yang0e7b5892017-12-07 14:18:38 -080027 from = A::B::C::TestUnknown.encode(unknown_msg)
28 m = A::B::C::TestMessage.decode(from)
29 Google::Protobuf.discard_unknown(m)
30 to = A::B::C::TestMessage.encode(m.optional_msg)
31 assert_equal '', to
32
33 # Test discard unknown for repeated message field.
34 unknown_msg = A::B::C::TestUnknown.new(
Paul Yang37a0ab72019-01-17 10:24:41 -080035 :repeated_unknown =>
36 [A::B::C::TestUnknown.new(:unknown_field => 1)])
Paul Yang0e7b5892017-12-07 14:18:38 -080037 from = A::B::C::TestUnknown.encode(unknown_msg)
38 m = A::B::C::TestMessage.decode(from)
39 Google::Protobuf.discard_unknown(m)
40 to = A::B::C::TestMessage.encode(m.repeated_msg[0])
41 assert_equal '', to
42
43 # Test discard unknown for map value message field.
44 unknown_msg = A::B::C::TestUnknown.new(
Paul Yang37a0ab72019-01-17 10:24:41 -080045 :map_unknown =>
46 {"" => A::B::C::TestUnknown.new(:unknown_field => 1)})
Paul Yang0e7b5892017-12-07 14:18:38 -080047 from = A::B::C::TestUnknown.encode(unknown_msg)
48 m = A::B::C::TestMessage.decode(from)
49 Google::Protobuf.discard_unknown(m)
50 to = A::B::C::TestMessage.encode(m.map_string_msg[''])
51 assert_equal '', to
52
53 # Test discard unknown for oneof message field.
54 unknown_msg = A::B::C::TestUnknown.new(
Paul Yang37a0ab72019-01-17 10:24:41 -080055 :oneof_unknown =>
56 A::B::C::TestUnknown.new(:unknown_field => 1))
Paul Yang0e7b5892017-12-07 14:18:38 -080057 from = A::B::C::TestUnknown.encode(unknown_msg)
58 m = A::B::C::TestMessage.decode(from)
59 Google::Protobuf.discard_unknown(m)
60 to = A::B::C::TestMessage.encode(m.oneof_msg)
61 assert_equal '', to
62 end
Erik Benoistc19fcee2018-05-22 10:14:04 -050063
64 def test_encode_json
65 msg = A::B::C::TestMessage.new({ optional_int32: 22 })
66 json = msg.to_json
67
68 to = A::B::C::TestMessage.decode_json(json)
69 assert_equal to.optional_int32, 22
70
71 msg = A::B::C::TestMessage.new({ optional_int32: 22 })
72 json = msg.to_json({ preserve_proto_fieldnames: true })
73
74 assert_match 'optional_int32', json
75
76 to = A::B::C::TestMessage.decode_json(json)
77 assert_equal 22, to.optional_int32
78
79 msg = A::B::C::TestMessage.new({ optional_int32: 22 })
80 json = A::B::C::TestMessage.encode_json(
81 msg,
82 { preserve_proto_fieldnames: true, emit_defaults: true }
83 )
84
85 assert_match 'optional_int32', json
86 end
Paul Yange508fc02018-07-23 11:05:28 -070087
88 def test_encode_wrong_msg
Toby Hsieh59133292018-11-18 00:06:39 -080089 assert_raise ::ArgumentError do
Paul Yange508fc02018-07-23 11:05:28 -070090 m = A::B::C::TestMessage.new(
91 :optional_int32 => 1,
92 )
93 Google::Protobuf::Any.encode(m)
94 end
95 end
96
Paul Yang0e7b5892017-12-07 14:18:38 -080097end