OLD | NEW |
| (Empty) |
1 #!/usr/bin/ruby | |
2 | |
3 require 'test/unit' | |
4 require 'google/protobuf/well_known_types' | |
5 | |
6 class TestWellKnownTypes < Test::Unit::TestCase | |
7 def test_timestamp | |
8 ts = Google::Protobuf::Timestamp.new | |
9 | |
10 assert_equal Time.at(0), ts.to_time | |
11 | |
12 ts.seconds = 12345 | |
13 assert_equal Time.at(12345), ts.to_time | |
14 assert_equal 12345, ts.to_i | |
15 | |
16 ts.from_time(Time.at(123456, 654321)) | |
17 assert_equal 123456, ts.seconds | |
18 assert_equal 654321000, ts.nanos | |
19 assert_equal Time.at(123456.654321), ts.to_time | |
20 end | |
21 | |
22 def test_duration | |
23 duration = Google::Protobuf::Duration.new(seconds: 123, nanos: 456) | |
24 assert_equal 123.000000456, duration.to_f | |
25 end | |
26 | |
27 def test_struct | |
28 struct = Google::Protobuf::Struct.new | |
29 | |
30 substruct = { | |
31 "subkey" => 999, | |
32 "subkey2" => false | |
33 } | |
34 | |
35 sublist = ["abc", 123, {"deepkey" => "deepval"}] | |
36 | |
37 struct["number"] = 12345 | |
38 struct["boolean-true"] = true | |
39 struct["boolean-false"] = false | |
40 struct["null"] = nil | |
41 struct["string"] = "abcdef" | |
42 struct["substruct"] = substruct | |
43 struct["sublist"] = sublist | |
44 | |
45 assert_equal 12345, struct["number"] | |
46 assert_equal true, struct["boolean-true"] | |
47 assert_equal false, struct["boolean-false"] | |
48 assert_equal nil, struct["null"] | |
49 assert_equal "abcdef", struct["string"] | |
50 assert_equal(Google::Protobuf::Struct.from_hash(substruct), | |
51 struct["substruct"]) | |
52 assert_equal(Google::Protobuf::ListValue.from_a(sublist), | |
53 struct["sublist"]) | |
54 | |
55 should_equal = { | |
56 "number" => 12345, | |
57 "boolean-true" => true, | |
58 "boolean-false" => false, | |
59 "null" => nil, | |
60 "string" => "abcdef", | |
61 "substruct" => { | |
62 "subkey" => 999, | |
63 "subkey2" => false | |
64 }, | |
65 "sublist" => ["abc", 123, {"deepkey" => "deepval"}] | |
66 } | |
67 | |
68 list = struct["sublist"] | |
69 list.is_a?(Google::Protobuf::ListValue) | |
70 assert_equal "abc", list[0] | |
71 assert_equal 123, list[1] | |
72 assert_equal({"deepkey" => "deepval"}, list[2].to_h) | |
73 | |
74 # to_h returns a fully-flattened Ruby structure (Hash and Array). | |
75 assert_equal(should_equal, struct.to_h) | |
76 | |
77 # Test that we can assign Struct and ListValue directly. | |
78 struct["substruct"] = Google::Protobuf::Struct.from_hash(substruct) | |
79 struct["sublist"] = Google::Protobuf::ListValue.from_a(sublist) | |
80 | |
81 assert_equal(should_equal, struct.to_h) | |
82 | |
83 struct["sublist"] << nil | |
84 should_equal["sublist"] << nil | |
85 | |
86 assert_equal(should_equal, struct.to_h) | |
87 assert_equal(should_equal["sublist"].length, struct["sublist"].length) | |
88 | |
89 assert_raise Google::Protobuf::UnexpectedStructType do | |
90 struct[123] = 5 | |
91 end | |
92 | |
93 assert_raise Google::Protobuf::UnexpectedStructType do | |
94 struct[5] = Time.new | |
95 end | |
96 | |
97 assert_raise Google::Protobuf::UnexpectedStructType do | |
98 struct[5] = [Time.new] | |
99 end | |
100 | |
101 assert_raise Google::Protobuf::UnexpectedStructType do | |
102 struct[5] = {123 => 456} | |
103 end | |
104 | |
105 assert_raise Google::Protobuf::UnexpectedStructType do | |
106 struct = Google::Protobuf::Struct.new | |
107 struct.fields["foo"] = Google::Protobuf::Value.new | |
108 # Tries to return a Ruby value for a Value class whose type | |
109 # hasn't been filled in. | |
110 struct["foo"] | |
111 end | |
112 end | |
113 | |
114 def test_any | |
115 any = Google::Protobuf::Any.new | |
116 ts = Google::Protobuf::Timestamp.new(seconds: 12345, nanos: 6789) | |
117 any.pack(ts) | |
118 | |
119 assert any.is(Google::Protobuf::Timestamp) | |
120 assert_equal ts, any.unpack(Google::Protobuf::Timestamp) | |
121 end | |
122 end | |
OLD | NEW |