1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/wsdl/marshal/test_wsdlmarshal.rb
(no author) 15b7d43988 This commit was manufactured by cvs2svn to create branch 'ruby_1_8'.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@8501 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2005-05-22 13:20:28 +00:00

80 lines
2 KiB
Ruby

require 'test/unit'
require 'wsdl/parser'
require 'soap/mapping/wsdlencodedregistry'
require 'soap/marshal'
require 'wsdl/soap/wsdl2ruby'
class WSDLMarshaller
include SOAP
def initialize(wsdlfile)
wsdl = WSDL::Parser.new.parse(File.open(wsdlfile) { |f| f.read })
types = wsdl.collect_complextypes
@opt = {
:decode_typemap => types,
:generate_explicit_type => false,
:pretty => true
}
@mapping_registry = Mapping::WSDLEncodedRegistry.new(types)
end
def dump(obj, io = nil)
type = Mapping.class2element(obj.class)
ele = Mapping.obj2soap(obj, @mapping_registry, type)
ele.elename = ele.type
Processor.marshal(SOAPEnvelope.new(nil, SOAPBody.new(ele)), @opt, io)
end
def load(io)
header, body = Processor.unmarshal(io, @opt)
Mapping.soap2obj(body.root_node)
end
end
require File.join(File.dirname(__FILE__), 'person_org')
class Person
def ==(rhs)
@familyname == rhs.familyname and @givenname == rhs.givenname and
@var1 == rhs.var1 and @var2 == rhs.var2 and @var3 == rhs.var3
end
end
class TestWSDLMarshal < Test::Unit::TestCase
DIR = File.dirname(File.expand_path(__FILE__))
def test_marshal
marshaller = WSDLMarshaller.new(pathname('person.wsdl'))
obj = Person.new("NAKAMURA", "Hiroshi", 1, 1.0, "1")
str = marshaller.dump(obj)
obj2 = marshaller.load(str)
assert_equal(obj, obj2)
assert_equal(str, marshaller.dump(obj2))
end
def test_classdef
gen = WSDL::SOAP::WSDL2Ruby.new
gen.location = pathname("person.wsdl")
gen.basedir = DIR
gen.logger.level = Logger::FATAL
gen.opt['classdef'] = nil
gen.opt['force'] = true
gen.run
compare("person_org.rb", "Person.rb")
File.unlink(pathname('Person.rb'))
end
def compare(expected, actual)
assert_equal(loadfile(expected), loadfile(actual), actual)
end
def loadfile(file)
File.open(pathname(file)) { |f| f.read }
end
def pathname(filename)
File.join(DIR, filename)
end
end