|
@@ -3,6 +3,9 @@
|
|
# Requires that the proto messages are exactly the same in proto2 and proto3 syntax
|
|
# Requires that the proto messages are exactly the same in proto2 and proto3 syntax
|
|
# and that the including class should define a 'proto_module' method which returns
|
|
# and that the including class should define a 'proto_module' method which returns
|
|
# the enclosing module of the proto message classes.
|
|
# the enclosing module of the proto message classes.
|
|
|
|
+
|
|
|
|
+require 'bigdecimal'
|
|
|
|
+
|
|
module CommonTests
|
|
module CommonTests
|
|
# Ruby 2.5 changed to raise FrozenError instead of RuntimeError
|
|
# Ruby 2.5 changed to raise FrozenError instead of RuntimeError
|
|
FrozenErrorType = Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.5') ? RuntimeError : FrozenError
|
|
FrozenErrorType = Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.5') ? RuntimeError : FrozenError
|
|
@@ -1264,6 +1267,53 @@ module CommonTests
|
|
assert proto_module::TestMessage.new != nil
|
|
assert proto_module::TestMessage.new != nil
|
|
end
|
|
end
|
|
|
|
|
|
|
|
+ def test_converts_time
|
|
|
|
+ m = proto_module::TimeMessage.new
|
|
|
|
+
|
|
|
|
+ m.timestamp = Google::Protobuf::Timestamp.new(seconds: 5, nanos: 6)
|
|
|
|
+ assert_kind_of Google::Protobuf::Timestamp, m.timestamp
|
|
|
|
+ assert_equal 5, m.timestamp.seconds
|
|
|
|
+ assert_equal 6, m.timestamp.nanos
|
|
|
|
+
|
|
|
|
+ m.timestamp = Time.at(9466, 123456.789)
|
|
|
|
+ assert_equal Google::Protobuf::Timestamp.new(seconds: 9466, nanos: 123456789), m.timestamp
|
|
|
|
+
|
|
|
|
+ m = proto_module::TimeMessage.new(timestamp: Time.at(1))
|
|
|
|
+ assert_equal Google::Protobuf::Timestamp.new(seconds: 1, nanos: 0), m.timestamp
|
|
|
|
+
|
|
|
|
+ assert_raise(Google::Protobuf::TypeError) { m.timestamp = 2 }
|
|
|
|
+ assert_raise(Google::Protobuf::TypeError) { m.timestamp = 2.4 }
|
|
|
|
+ assert_raise(Google::Protobuf::TypeError) { m.timestamp = '4' }
|
|
|
|
+ assert_raise(Google::Protobuf::TypeError) { m.timestamp = proto_module::TimeMessage.new }
|
|
|
|
+ end
|
|
|
|
+
|
|
|
|
+ def test_converts_duration
|
|
|
|
+ m = proto_module::TimeMessage.new
|
|
|
|
+
|
|
|
|
+ m.duration = Google::Protobuf::Duration.new(seconds: 2, nanos: 22)
|
|
|
|
+ assert_kind_of Google::Protobuf::Duration, m.duration
|
|
|
|
+ assert_equal 2, m.duration.seconds
|
|
|
|
+ assert_equal 22, m.duration.nanos
|
|
|
|
+
|
|
|
|
+ m.duration = 10.5
|
|
|
|
+ assert_equal Google::Protobuf::Duration.new(seconds: 10, nanos: 500_000_000), m.duration
|
|
|
|
+
|
|
|
|
+ m.duration = 200
|
|
|
|
+ assert_equal Google::Protobuf::Duration.new(seconds: 200, nanos: 0), m.duration
|
|
|
|
+
|
|
|
|
+ m.duration = Rational(3, 2)
|
|
|
|
+ assert_equal Google::Protobuf::Duration.new(seconds: 1, nanos: 500_000_000), m.duration
|
|
|
|
+
|
|
|
|
+ m.duration = BigDecimal.new("5")
|
|
|
|
+ assert_equal Google::Protobuf::Duration.new(seconds: 5, nanos: 0), m.duration
|
|
|
|
+
|
|
|
|
+ m = proto_module::TimeMessage.new(duration: 1.1)
|
|
|
|
+ assert_equal Google::Protobuf::Duration.new(seconds: 1, nanos: 100_000_000), m.duration
|
|
|
|
+
|
|
|
|
+ assert_raise(Google::Protobuf::TypeError) { m.duration = '2' }
|
|
|
|
+ assert_raise(Google::Protobuf::TypeError) { m.duration = proto_module::TimeMessage.new }
|
|
|
|
+ end
|
|
|
|
+
|
|
def test_freeze
|
|
def test_freeze
|
|
m = proto_module::TestMessage.new
|
|
m = proto_module::TestMessage.new
|
|
m.optional_int32 = 10
|
|
m.optional_int32 = 10
|