| Index: third_party/protobuf/ruby/tests/well_known_types_test.rb
|
| diff --git a/third_party/protobuf/ruby/tests/well_known_types_test.rb b/third_party/protobuf/ruby/tests/well_known_types_test.rb
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9b46632b72c34012698bf69657fc91c31939ee1e
|
| --- /dev/null
|
| +++ b/third_party/protobuf/ruby/tests/well_known_types_test.rb
|
| @@ -0,0 +1,122 @@
|
| +#!/usr/bin/ruby
|
| +
|
| +require 'test/unit'
|
| +require 'google/protobuf/well_known_types'
|
| +
|
| +class TestWellKnownTypes < Test::Unit::TestCase
|
| + def test_timestamp
|
| + ts = Google::Protobuf::Timestamp.new
|
| +
|
| + assert_equal Time.at(0), ts.to_time
|
| +
|
| + ts.seconds = 12345
|
| + assert_equal Time.at(12345), ts.to_time
|
| + assert_equal 12345, ts.to_i
|
| +
|
| + ts.from_time(Time.at(123456, 654321))
|
| + assert_equal 123456, ts.seconds
|
| + assert_equal 654321000, ts.nanos
|
| + assert_equal Time.at(123456.654321), ts.to_time
|
| + end
|
| +
|
| + def test_duration
|
| + duration = Google::Protobuf::Duration.new(seconds: 123, nanos: 456)
|
| + assert_equal 123.000000456, duration.to_f
|
| + end
|
| +
|
| + def test_struct
|
| + struct = Google::Protobuf::Struct.new
|
| +
|
| + substruct = {
|
| + "subkey" => 999,
|
| + "subkey2" => false
|
| + }
|
| +
|
| + sublist = ["abc", 123, {"deepkey" => "deepval"}]
|
| +
|
| + struct["number"] = 12345
|
| + struct["boolean-true"] = true
|
| + struct["boolean-false"] = false
|
| + struct["null"] = nil
|
| + struct["string"] = "abcdef"
|
| + struct["substruct"] = substruct
|
| + struct["sublist"] = sublist
|
| +
|
| + assert_equal 12345, struct["number"]
|
| + assert_equal true, struct["boolean-true"]
|
| + assert_equal false, struct["boolean-false"]
|
| + assert_equal nil, struct["null"]
|
| + assert_equal "abcdef", struct["string"]
|
| + assert_equal(Google::Protobuf::Struct.from_hash(substruct),
|
| + struct["substruct"])
|
| + assert_equal(Google::Protobuf::ListValue.from_a(sublist),
|
| + struct["sublist"])
|
| +
|
| + should_equal = {
|
| + "number" => 12345,
|
| + "boolean-true" => true,
|
| + "boolean-false" => false,
|
| + "null" => nil,
|
| + "string" => "abcdef",
|
| + "substruct" => {
|
| + "subkey" => 999,
|
| + "subkey2" => false
|
| + },
|
| + "sublist" => ["abc", 123, {"deepkey" => "deepval"}]
|
| + }
|
| +
|
| + list = struct["sublist"]
|
| + list.is_a?(Google::Protobuf::ListValue)
|
| + assert_equal "abc", list[0]
|
| + assert_equal 123, list[1]
|
| + assert_equal({"deepkey" => "deepval"}, list[2].to_h)
|
| +
|
| + # to_h returns a fully-flattened Ruby structure (Hash and Array).
|
| + assert_equal(should_equal, struct.to_h)
|
| +
|
| + # Test that we can assign Struct and ListValue directly.
|
| + struct["substruct"] = Google::Protobuf::Struct.from_hash(substruct)
|
| + struct["sublist"] = Google::Protobuf::ListValue.from_a(sublist)
|
| +
|
| + assert_equal(should_equal, struct.to_h)
|
| +
|
| + struct["sublist"] << nil
|
| + should_equal["sublist"] << nil
|
| +
|
| + assert_equal(should_equal, struct.to_h)
|
| + assert_equal(should_equal["sublist"].length, struct["sublist"].length)
|
| +
|
| + assert_raise Google::Protobuf::UnexpectedStructType do
|
| + struct[123] = 5
|
| + end
|
| +
|
| + assert_raise Google::Protobuf::UnexpectedStructType do
|
| + struct[5] = Time.new
|
| + end
|
| +
|
| + assert_raise Google::Protobuf::UnexpectedStructType do
|
| + struct[5] = [Time.new]
|
| + end
|
| +
|
| + assert_raise Google::Protobuf::UnexpectedStructType do
|
| + struct[5] = {123 => 456}
|
| + end
|
| +
|
| + assert_raise Google::Protobuf::UnexpectedStructType do
|
| + struct = Google::Protobuf::Struct.new
|
| + struct.fields["foo"] = Google::Protobuf::Value.new
|
| + # Tries to return a Ruby value for a Value class whose type
|
| + # hasn't been filled in.
|
| + struct["foo"]
|
| + end
|
| + end
|
| +
|
| + def test_any
|
| + any = Google::Protobuf::Any.new
|
| + ts = Google::Protobuf::Timestamp.new(seconds: 12345, nanos: 6789)
|
| + any.pack(ts)
|
| +
|
| + assert any.is(Google::Protobuf::Timestamp)
|
| + assert_equal ts, any.unpack(Google::Protobuf::Timestamp)
|
| + end
|
| +end
|
|
|