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 |