diff --git a/lib/xmlrpc/.document b/lib/xmlrpc/.document new file mode 100644 index 0000000000..e475c53ed0 --- /dev/null +++ b/lib/xmlrpc/.document @@ -0,0 +1 @@ +README.rdoc diff --git a/test/ruby/test_settracefunc.rb b/test/ruby/test_settracefunc.rb new file mode 100644 index 0000000000..515453245f --- /dev/null +++ b/test/ruby/test_settracefunc.rb @@ -0,0 +1,26 @@ +require 'test/unit' + +class TestSetTraceFunc < Test::Unit::TestCase + def foo; end + + def test_event + events = [] + set_trace_func(Proc.new { |event, file, lineno| + events << [event, lineno] + }) + a = 1 + foo + a + set_trace_func nil + + assert_equal(["line", 11], events.shift) # line "a = 1" + assert_equal(["line", 12], events.shift) # line "foo" + assert_equal(["call", 4], events.shift) # call foo + event, lineno = events.shift # return + assert_equal("return", event) + assert_equal(4, lineno) # [history] it could not be expected in 1.8 + assert_equal(["line", 13], events.shift) # line "a" + assert_equal(["line", 14], events.shift) # line "set_trace_func nil" + assert_equal(["c-call", 14], events.shift) # c-call set_trace_func + end +end diff --git a/test/xmlrpc/data/bug_bool.xml b/test/xmlrpc/data/bug_bool.xml new file mode 100644 index 0000000000..04ed00709e --- /dev/null +++ b/test/xmlrpc/data/bug_bool.xml @@ -0,0 +1,8 @@ + + + + + 0 + + + diff --git a/test/xmlrpc/data/bug_cdata.xml b/test/xmlrpc/data/bug_cdata.xml new file mode 100644 index 0000000000..ba990e04f1 --- /dev/null +++ b/test/xmlrpc/data/bug_cdata.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/xmlrpc/data/bug_covert.xml b/test/xmlrpc/data/bug_covert.xml new file mode 100644 index 0000000000..1d9abd2a06 --- /dev/null +++ b/test/xmlrpc/data/bug_covert.xml @@ -0,0 +1,6 @@ +Site,SANs,Array +Configured Capacity,Array Reserved Capacity,Array Ava +ilable Capacity,Array % Reserved,Host Allocated,Host Used,Host Free,Host % +Used + diff --git a/test/xmlrpc/data/datetime_iso8601.xml b/test/xmlrpc/data/datetime_iso8601.xml new file mode 100644 index 0000000000..43d8da6c13 --- /dev/null +++ b/test/xmlrpc/data/datetime_iso8601.xml @@ -0,0 +1,8 @@ + + + + + 20041105T01:15:23Z + + + diff --git a/test/xmlrpc/data/fault.xml b/test/xmlrpc/data/fault.xml new file mode 100644 index 0000000000..041c464eb3 --- /dev/null +++ b/test/xmlrpc/data/fault.xml @@ -0,0 +1,16 @@ + + + + + + faultCode + 4 + + + faultString + an error message + + + + + diff --git a/test/xmlrpc/data/value.xml b/test/xmlrpc/data/value.xml new file mode 100644 index 0000000000..1978616099 --- /dev/null +++ b/test/xmlrpc/data/value.xml @@ -0,0 +1,22 @@ + + + Test + + + Hallo Leute + + + Hallo + + + + + + + + + + + + + diff --git a/test/xmlrpc/data/xml1.xml b/test/xmlrpc/data/xml1.xml new file mode 100644 index 0000000000..10aa55483b --- /dev/null +++ b/test/xmlrpc/data/xml1.xml @@ -0,0 +1 @@ +objectNameAdministratorDOadminIdhbakeremailhbaker@yahoo.comtelephone21-800-445-2588telephone11-508-791-1267OID1passwordp1111lastNameBakersubscriberMegaCorpobjectNameAdministratorDOadminIdadragonemailadragon@yahoo.comtelephone21-800-445-2588telephone11-781-789-9089OID3passwordp3333lastNameDragonsubscriberCornerStoreobjectNameAdministratorDOadminIdmrodmanemailmrodman@yahoo.comtelephone21-800-445-2588telephone11-617-789-1890OID4passwordp4444lastNameRodmansubscriberCyberdyneobjectNameAdministratorDOadminIdmjordanemailmjordan@yahoo.comtelephone21-800-445-2588telephone11-617-890-7897OID5passwordp5555lastNameJordansubscriberStarSportsobjectNameAdministratorDOadminIdgpippenemailgpippen@yahoo.comtelephone21-800-445-2588telephone11-781-789-9876OID6passwordp6666lastNamePippensubscriberGreatBooksobjectNameAdministratorDOadminIdaandrewemailaandrew@yahoo.comtelephone21-800-445-2588telephone11-781-678-8970OID7passwordp7777lastNameAndhrewsubscriberAxisChemicalsobjectNameAdministratorDOadminIdtvincentemailtvincent@yahoo.comtelephone21-800-445-2588telephone11-786-897-8908OID8passwordp8888lastNameVincentsubscriberMediaShopobjectNameAdministratorDOadminIdkrichardemailkrichard@yahoo.comtelephone21-800-445-2588telephone11-508-789-6789OID9passwordp9999lastNameRichardsubscriberSmartShopobjectNameAdministratorDOadminIdgcornellemailgconell@yahoo.comtelephone21-800-445-2588telephone11-617-789-8979OID10passwordpaaaalastNameCornellsubscriberHomeNeedsobjectNameAdministratorDOadminIdshorstmannemailshorstmann@yahoo.comtelephone21-800-445-2588telephone11-508-791-1267OID11passwordp1111lastNameHorstMannsubscriberMegaCorpobjectNameAdministratorDOadminIdrbobemailrbob@yahoo.comtelephone21-800-445-2588telephone11-781-789-9089OID13passwordp3333lastNameBobsubscriberCornerStoreobjectNameAdministratorDOadminIdspeteremailspeter@yahoo.comtelephone21-800-445-2588telephone11-617-789-1890OID14passwordp4444lastNamePetersubscriberCyberdyneobjectNameAdministratorDOadminIdpnovakemailpnovak@yahoo.comtelephone21-800-445-2588telephone11-617-890-7897OID15passwordp5555lastNameNovaksubscriberStarSportsobjectNameAdministratorDOadminIdpnancyemailpnancy@yahoo.comtelephone21-800-445-2588telephone11-781-789-9876OID16passwordp6666lastNameNancysubscriberGreatBooksobjectNameAdministratorDOadminIdhmichelemailhmichel@yahoo.comtelephone21-800-445-2588telephone11-781-678-8970OID17passwordp7777lastNameMichelsubscriberAxisChemicalsobjectNameAdministratorDOadminIdkdavidemailkdavid@yahoo.comtelephone21-800-445-2588telephone11-786-897-8908OID18passwordp8888lastNameDavidsubscriberMediaShopobjectNameAdministratorDOadminIdpvalnooremailpvalnoor@yahoo.comtelephone21-800-445-2588telephone11-508-789-6789OID19passwordp9999lastNameValnoorsubscriberSmartShopobjectNameAdministratorDOadminIdwsmithemailwsmith@yahoo.comtelephone21-800-445-2588telephone11-617-789-8979OID20passwordpaaaalastNameSmithsubscriberHomeNeedsobjectNameAdministratorDOadminIdgcaralemailgcaral@yahoo.comtelephone21-800-445-2588telephone11-781-789-9876OID21passwordp6666lastNameCaralsubscriberMegaCorpobjectNameAdministratorDOadminIdphillaryemailphillary@yahoo.comtelephone21-800-445-2588telephone11-786-897-8908OID23passwordp8888lastNameHillarysubscriberCornerStoreobjectNameAdministratorDOadminIdbphilipemailbphilip@yahoo.comtelephone21-800-445-2588telephone11-508-789-6789OID24passwordp9999lastNamePhilipsubscriberCyberdyneobjectNameAdministratorDOadminIdsandreaemailsandrea@yahoo.comtelephone21-800-445-2588telephone11-617-789-8979OID25passwordpaaaalastNameAndreasubscriberStarSportsobjectNameAdministratorDOadminIds4emailnulltelephone2nulltelephone1nullOID26passwords4lastNamenullsubscribers4objectNameAdministratorDOadminIdadminemailtelephone2telephone1OID82passwordadminlastNameadministratorsubscriberBigBank diff --git a/test/xmlrpc/test_datetime.rb b/test/xmlrpc/test_datetime.rb new file mode 100644 index 0000000000..e38cea6f74 --- /dev/null +++ b/test/xmlrpc/test_datetime.rb @@ -0,0 +1,159 @@ +require 'test/unit' +require "xmlrpc/datetime" + +class Test_DateTime < Test::Unit::TestCase + + def test_new + dt = createDateTime() + + assert_instance_of(XMLRPC::DateTime, dt) + end + + def test_new_exception + assert_raises(ArgumentError) { XMLRPC::DateTime.new(4.5, 13, 32, 25, 60, 60) } + assert_raises(ArgumentError) { XMLRPC::DateTime.new(2001, 12, 32, 25, 60, 60) } + assert_raises(ArgumentError) { XMLRPC::DateTime.new(2001, 12, 31, 25, 60, 60) } + assert_raises(ArgumentError) { XMLRPC::DateTime.new(2001, 12, 31, 24, 60, 60) } + assert_raises(ArgumentError) { XMLRPC::DateTime.new(2001, 12, 31, 24, 59, 60) } + assert_nothing_raised(ArgumentError) { XMLRPC::DateTime.new(2001, 12, 31, 24, 59, 59) } + + assert_raises(ArgumentError) { XMLRPC::DateTime.new(2001, 0, 0, -1, -1, -1) } + assert_raises(ArgumentError) { XMLRPC::DateTime.new(2001, 1, 0, -1, -1, -1) } + assert_raises(ArgumentError) { XMLRPC::DateTime.new(2001, 1, 1, -1, -1, -1) } + assert_raises(ArgumentError) { XMLRPC::DateTime.new(2001, 1, 1, 0, -1, -1) } + assert_raises(ArgumentError) { XMLRPC::DateTime.new(2001, 1, 1, 0, 0, -1) } + assert_nothing_raised(ArgumentError) { XMLRPC::DateTime.new(2001, 1, 1, 0, 0, 0) } + end + + + def test_get_values + y, m, d, h, mi, s = 1970, 3, 24, 12, 0, 5 + dt = XMLRPC::DateTime.new(y, m, d, h, mi, s) + + assert_equal(y, dt.year) + assert_equal(m, dt.month) + assert_equal(m, dt.mon) + assert_equal(d, dt.day) + + assert_equal(h, dt.hour) + assert_equal(mi,dt.min) + assert_equal(s, dt.sec) + end + + def test_set_values + dt = createDateTime() + y, m, d, h, mi, s = 1950, 12, 9, 8, 52, 30 + + dt.year = y + dt.month = m + dt.day = d + dt.hour = h + dt.min = mi + dt.sec = s + + assert_equal(y, dt.year) + assert_equal(m, dt.month) + assert_equal(m, dt.mon) + assert_equal(d, dt.day) + + assert_equal(h, dt.hour) + assert_equal(mi,dt.min) + assert_equal(s, dt.sec) + + dt.mon = 5 + assert_equal(5, dt.month) + assert_equal(5, dt.mon) + end + + def test_set_exception + dt = createDateTime() + + assert_raises(ArgumentError) { dt.year = 4.5 } + assert_nothing_raised(ArgumentError) { dt.year = -2000 } + + assert_raises(ArgumentError) { dt.month = 0 } + assert_raises(ArgumentError) { dt.month = 13 } + assert_nothing_raised(ArgumentError) { dt.month = 7 } + + assert_raises(ArgumentError) { dt.mon = 0 } + assert_raises(ArgumentError) { dt.mon = 13 } + assert_nothing_raised(ArgumentError) { dt.mon = 7 } + + assert_raises(ArgumentError) { dt.day = 0 } + assert_raises(ArgumentError) { dt.day = 32 } + assert_nothing_raised(ArgumentError) { dt.day = 16 } + + assert_raises(ArgumentError) { dt.hour = -1 } + assert_raises(ArgumentError) { dt.hour = 25 } + assert_nothing_raised(ArgumentError) { dt.hour = 12 } + + assert_raises(ArgumentError) { dt.min = -1 } + assert_raises(ArgumentError) { dt.min = 60 } + assert_nothing_raised(ArgumentError) { dt.min = 30 } + + assert_raises(ArgumentError) { dt.sec = -1 } + assert_raises(ArgumentError) { dt.sec = 60 } + assert_nothing_raised(ArgumentError) { dt.sec = 30 } + end + + def test_to_a + y, m, d, h, mi, s = 1970, 3, 24, 12, 0, 5 + dt = XMLRPC::DateTime.new(y, m, d, h, mi, s) + a = dt.to_a + + assert_instance_of(Array, a) + assert_equal(6, a.size, "Returned array has wrong size") + + assert_equal(y, a[0]) + assert_equal(m, a[1]) + assert_equal(d, a[2]) + assert_equal(h, a[3]) + assert_equal(mi, a[4]) + assert_equal(s, a[5]) + end + + def test_to_time1 + y, m, d, h, mi, s = 1970, 3, 24, 12, 0, 5 + dt = XMLRPC::DateTime.new(y, m, d, h, mi, s) + time = dt.to_time + + assert_not_nil(time) + + assert_equal(y, time.year) + assert_equal(m, time.month) + assert_equal(d, time.day) + assert_equal(h, time.hour) + assert_equal(mi, time.min) + assert_equal(s, time.sec) + end + + def test_to_time2 + dt = createDateTime() + dt.year = 1969 + + assert_nil(dt.to_time) + end + + def test_to_date1 + y, m, d, h, mi, s = 1970, 3, 24, 12, 0, 5 + dt = XMLRPC::DateTime.new(y, m, d, h, mi, s) + date = dt.to_date + + assert_equal(y, date.year) + assert_equal(m, date.month) + assert_equal(d, date.day) + end + + def test_to_date2 + dt = createDateTime() + dt.year = 666 + + assert_equal(666, dt.to_date.year) + end + + + def createDateTime + XMLRPC::DateTime.new(1970, 3, 24, 12, 0, 5) + end + +end diff --git a/test/xmlrpc/test_features.rb b/test/xmlrpc/test_features.rb new file mode 100644 index 0000000000..96a6313202 --- /dev/null +++ b/test/xmlrpc/test_features.rb @@ -0,0 +1,48 @@ +require 'test/unit' +require "xmlrpc/create" +require "xmlrpc/parser" +require "xmlrpc/config" + +class Test_Features < Test::Unit::TestCase + + def setup + @params = [nil, {"test" => nil}, [nil, 1, nil]] + end + + def test_nil_create + XMLRPC::XMLWriter.each_installed_writer do |writer| + c = XMLRPC::Create.new(writer) + + XMLRPC::Config.module_eval {remove_const(:ENABLE_NIL_CREATE)} + XMLRPC::Config.const_set(:ENABLE_NIL_CREATE, false) + assert_raises(RuntimeError) { str = c.methodCall("test", *@params) } + + XMLRPC::Config.module_eval {remove_const(:ENABLE_NIL_CREATE)} + XMLRPC::Config.const_set(:ENABLE_NIL_CREATE, true) + assert_nothing_raised { str = c.methodCall("test", *@params) } + end + end + + def test_nil_parse + XMLRPC::Config.module_eval {remove_const(:ENABLE_NIL_CREATE)} + XMLRPC::Config.const_set(:ENABLE_NIL_CREATE, true) + + XMLRPC::XMLWriter.each_installed_writer do |writer| + c = XMLRPC::Create.new(writer) + str = c.methodCall("test", *@params) + XMLRPC::XMLParser.each_installed_parser do |parser| + para = nil + + XMLRPC::Config.module_eval {remove_const(:ENABLE_NIL_PARSER)} + XMLRPC::Config.const_set(:ENABLE_NIL_PARSER, false) + assert_raises(RuntimeError) { para = parser.parseMethodCall(str) } + + XMLRPC::Config.module_eval {remove_const(:ENABLE_NIL_PARSER)} + XMLRPC::Config.const_set(:ENABLE_NIL_PARSER, true) + assert_nothing_raised { para = parser.parseMethodCall(str) } + assert_equal(para[1], @params) + end + end + end + +end diff --git a/test/xmlrpc/test_marshal.rb b/test/xmlrpc/test_marshal.rb new file mode 100644 index 0000000000..38bc8c646f --- /dev/null +++ b/test/xmlrpc/test_marshal.rb @@ -0,0 +1,93 @@ +require 'test/unit' +require "xmlrpc/marshal" + +class Test_Marshal < Test::Unit::TestCase + # for test_parser_values + class Person + include XMLRPC::Marshallable + attr_reader :name + def initialize(name) + @name = name + end + end + + + def test1_dump_response + assert_nothing_raised(NameError) { + XMLRPC::Marshal.dump_response('arg') + } + end + + def test1_dump_call + assert_nothing_raised(NameError) { + XMLRPC::Marshal.dump_call('methodName', 'arg') + } + end + + def test2_dump_load_response + value = [1, 2, 3, {"test" => true}, 3.4] + res = XMLRPC::Marshal.dump_response(value) + + assert_equal(value, XMLRPC::Marshal.load_response(res)) + end + + def test2_dump_load_call + methodName = "testMethod" + value = [1, 2, 3, {"test" => true}, 3.4] + exp = [methodName, [value, value]] + + res = XMLRPC::Marshal.dump_call(methodName, value, value) + + assert_equal(exp, XMLRPC::Marshal.load_call(res)) + end + + def test_parser_values + v1 = [ + 1, -7778, # integers + 1.0, 0.0, -333.0, 2343434343.0, # floats + false, true, true, false, # booleans + "Hallo", "with < and >", "" # strings + ] + + v2 = [ + [v1, v1, v1], + {"a" => v1} + ] + + v3 = [ + XMLRPC::Base64.new("\001"*1000), # base64 + :aSymbol, :anotherSym # symbols (-> string) + ] + v3_exp = [ + "\001"*1000, + "aSymbol", "anotherSym" + ] + person = Person.new("Michael") + + XMLRPC::XMLParser.each_installed_parser do |parser| + m = XMLRPC::Marshal.new(parser) + + assert_equal( v1, m.load_response(m.dump_response(v1)) ) + assert_equal( v2, m.load_response(m.dump_response(v2)) ) + assert_equal( v3_exp, m.load_response(m.dump_response(v3)) ) + + pers = m.load_response(m.dump_response(person)) + + assert( pers.is_a?(Person) ) + assert( person.name == pers.name ) + end + + # missing, Date, Time, DateTime + # Struct + end + + def test_no_params_tag + # bug found by Idan Sofer + + expect = %{myMethod\n} + + str = XMLRPC::Marshal.dump_call("myMethod") + assert_equal(expect, str) + end + +end