# encoding: utf-8 require 'test/unit' require 'test/addressbook' class SerializeTest < Test::Unit::TestCase def test_serialize # serialize to string person = Tutorial::Person.new person.id = 1234 person.name = 'John Doe' person.email = 'jdoe@example.com' phone = Tutorial::Person::PhoneNumber.new phone.number = '555-4321' phone.type = Tutorial::Person::PhoneType::HOME person.phone << phone serialized_string = person.serialize_to_string # parse the serialized string person2 = Tutorial::Person.new person2.parse_from_string serialized_string assert_equal 1234, person2.id assert_equal 'John Doe', person2.name assert_equal 'jdoe@example.com', person2.email assert_equal 1, person2.phone.size assert_equal '555-4321', person2.phone[0].number assert_equal Tutorial::Person::PhoneType::HOME, person2.phone[0].type end def test_serialize_utf8string # serialize to string person = Tutorial::Person.new person.id = 1234 person.name = '山田 太郎' # kanji characters serialized_string = person.serialize_to_string # parse the serialized string person2 = Tutorial::Person.new person2.parse_from_string serialized_string assert_equal 1234, person2.id assert_equal '山田 太郎', person2.name end def test_unknown_field person = Tutorial::Person.new person.id = 1234 person.name = 'a b c' serialized_string = person.serialize_to_string # add invalid field tag = 1000 wire_type = Protobuf::WireType::VARINT serialized_string << Protobuf::Field::VarintField.encode((tag << 3) | wire_type) serialized_string << Protobuf::Field::VarintField.encode(100) # decode person2 = Tutorial::Person.new person2.parse_from_string serialized_string assert_equal(person, person2) end end