Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.5 KiB
63 lines
1.5 KiB
10 years ago
|
#!/usr/bin/ruby
|
||
|
#
|
||
|
# Tests for Ruby upb extension.
|
||
|
|
||
|
require 'test/unit'
|
||
|
require 'set'
|
||
|
require 'upb'
|
||
|
|
||
|
def get_descriptor
|
||
|
File.open("upb/descriptor/descriptor.pb").read
|
||
|
end
|
||
|
|
||
|
def load_descriptor
|
||
|
symtab = Upb::SymbolTable.new
|
||
|
symtab.load_descriptor(get_descriptor())
|
||
|
return symtab
|
||
|
end
|
||
|
|
||
|
def get_message_class(name)
|
||
|
return Upb.get_message_class(load_descriptor().lookup(name))
|
||
|
end
|
||
|
|
||
|
class TestRubyExtension < Test::Unit::TestCase
|
||
|
def test_parsedescriptor
|
||
|
msgdef = load_descriptor.lookup("google.protobuf.FileDescriptorSet")
|
||
|
assert_instance_of(Upb::MessageDef, msgdef)
|
||
|
|
||
|
file_descriptor_set = Upb.get_message_class(msgdef)
|
||
|
msg = file_descriptor_set.parse(get_descriptor())
|
||
|
|
||
|
# A couple message types we know should exist.
|
||
|
names = Set.new(["DescriptorProto", "FieldDescriptorProto"])
|
||
|
|
||
|
msg.file.each { |file|
|
||
|
file.message_type.each { |message_type|
|
||
|
names.delete(message_type.name)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
assert_equal(0, names.size)
|
||
|
end
|
||
|
|
||
|
def test_parseserialize
|
||
|
field_descriptor_proto = get_message_class("google.protobuf.FieldDescriptorProto")
|
||
|
field_options = get_message_class("google.protobuf.FieldOptions")
|
||
|
|
||
|
field = field_descriptor_proto.new
|
||
|
|
||
|
field.name = "MyName"
|
||
|
field.number = 5
|
||
|
field.options = field_options.new
|
||
|
field.options.packed = true
|
||
|
|
||
|
serialized = Upb::Message.serialize(field)
|
||
|
|
||
|
field2 = field_descriptor_proto.parse(serialized)
|
||
|
|
||
|
assert_equal("MyName", field2.name)
|
||
|
assert_equal(5, field2.number)
|
||
|
assert_equal(true, field2.options.packed)
|
||
|
end
|
||
|
end
|