From 396b1f27ca1581aa676c235a5d021828eef6257f Mon Sep 17 00:00:00 2001 From: mneumann Date: Mon, 15 Nov 2004 23:26:20 +0000 Subject: [PATCH] * imported and refactored original test cases * added methods XMLRPC::XMLParser.each_installed_parser and XMLRPC::XMLWriter.each_installed_writer to simply original test cases * use Object#allocate instead of defining an empty #initialize * module XMLRPC::Marshallable is now only used for tagging git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7274 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/xmlrpc/create.rb | 17 ++- lib/xmlrpc/parser.rb | 38 +++---- lib/xmlrpc/utils.rb | 7 -- test/xmlrpc/data/bug_bool.expected | 1 + test/xmlrpc/data/bug_bool.xml | 8 ++ test/xmlrpc/data/bug_cdata.expected | 1 + test/xmlrpc/data/bug_cdata.xml | 8 ++ test/xmlrpc/data/bug_covert.expected | 1 + test/xmlrpc/data/bug_covert.xml | 6 + test/xmlrpc/data/fault.xml | 16 +++ test/xmlrpc/data/value.expected | 1 + test/xmlrpc/data/value.xml | 22 ++++ test/xmlrpc/data/xml1.expected | 1 + test/xmlrpc/data/xml1.xml | 1 + test/xmlrpc/test_datetime.rb | 160 +++++++++++++++++++++++++++ test/xmlrpc/test_features.rb | 47 ++++++++ test/xmlrpc/test_marshal.rb | 94 ++++++++++++++++ test/xmlrpc/test_parser.rb | 77 +++++++++++++ 18 files changed, 475 insertions(+), 31 deletions(-) create mode 100644 test/xmlrpc/data/bug_bool.expected create mode 100644 test/xmlrpc/data/bug_bool.xml create mode 100644 test/xmlrpc/data/bug_cdata.expected create mode 100644 test/xmlrpc/data/bug_cdata.xml create mode 100644 test/xmlrpc/data/bug_covert.expected create mode 100644 test/xmlrpc/data/bug_covert.xml create mode 100644 test/xmlrpc/data/fault.xml create mode 100644 test/xmlrpc/data/value.expected create mode 100644 test/xmlrpc/data/value.xml create mode 100644 test/xmlrpc/data/xml1.expected create mode 100644 test/xmlrpc/data/xml1.xml create mode 100644 test/xmlrpc/test_datetime.rb create mode 100644 test/xmlrpc/test_features.rb create mode 100644 test/xmlrpc/test_marshal.rb create mode 100644 test/xmlrpc/test_parser.rb diff --git a/lib/xmlrpc/create.rb b/lib/xmlrpc/create.rb index 072e72ab46..0bfa4ab551 100644 --- a/lib/xmlrpc/create.rb +++ b/lib/xmlrpc/create.rb @@ -86,6 +86,18 @@ module XMLRPC end # class XMLParser + Classes = [Simple, XMLParser] + + # yields an instance of each installed XML writer + def self.each_installed_writer + XMLRPC::XMLWriter::Classes.each do |klass| + begin + yield klass.new + rescue LoadError + end + end + end + end # module XMLWriter class Create @@ -248,7 +260,10 @@ module XMLRPC if Config::ENABLE_MARSHALLING and param.class.included_modules.include? XMLRPC::Marshallable # convert Ruby object into Hash ret = {"___class___" => param.class.name} - param.__get_instance_variables.each {|name, val| + param.instance_variables.each {|v| + name = v[1..-1] + val = param.instance_variable_get(v) + if val.nil? ret[name] = val if Config::ENABLE_NIL_CREATE else diff --git a/lib/xmlrpc/parser.rb b/lib/xmlrpc/parser.rb index da214ba1ce..ed0e9a66f3 100644 --- a/lib/xmlrpc/parser.rb +++ b/lib/xmlrpc/parser.rb @@ -112,31 +112,13 @@ module XMLRPC begin mod = Module klass.split("::").each {|const| mod = mod.const_get(const.strip)} + + obj = mod.allocate - Thread.critical = true - # let initialize take 0 parameters - mod.module_eval %{ - begin - alias __initialize initialize - rescue NameError - end - def initialize; end - } - - obj = mod.new - - # restore old initialize - mod.module_eval %{ - undef initialize - begin - alias initialize __initialize - rescue NameError - end - } - Thread.critical = false - hash.delete "___class___" - hash.each {|k,v| obj.__set_instance_variable(k, v) } + hash.each {|key, value| + obj.instance_variable_set("@#{ key }", value) if key =~ /^([\w_][\w_0-9]*)$/ + } obj rescue hash @@ -801,6 +783,16 @@ module XMLRPC NQXMLStreamParser, NQXMLTreeParser, REXMLStreamParser, XMLScanStreamParser] + # yields an instance of each installed parser + def self.each_installed_parser + XMLRPC::XMLParser::Classes.each do |klass| + begin + yield klass.new + rescue LoadError + end + end + end + end # module XMLParser diff --git a/lib/xmlrpc/utils.rb b/lib/xmlrpc/utils.rb index 14dd08b21d..d542cfe4e6 100644 --- a/lib/xmlrpc/utils.rb +++ b/lib/xmlrpc/utils.rb @@ -17,13 +17,6 @@ module XMLRPC # key/value pair "___class___" => ClassName # module Marshallable - def __get_instance_variables - instance_variables.collect {|var| [var[1..-1], eval(var)] } - end - - def __set_instance_variable(key, value) - eval("@#$1 = value") if key =~ /^([\w_][\w_0-9]*)$/ - end end diff --git a/test/xmlrpc/data/bug_bool.expected b/test/xmlrpc/data/bug_bool.expected new file mode 100644 index 0000000000..094967631e --- /dev/null +++ b/test/xmlrpc/data/bug_bool.expected @@ -0,0 +1 @@ +[true, false] 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.expected b/test/xmlrpc/data/bug_cdata.expected new file mode 100644 index 0000000000..5ccf7fc081 --- /dev/null +++ b/test/xmlrpc/data/bug_cdata.expected @@ -0,0 +1 @@ +[true, "test"] 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.expected b/test/xmlrpc/data/bug_covert.expected new file mode 100644 index 0000000000..593f434ef8 --- /dev/null +++ b/test/xmlrpc/data/bug_covert.expected @@ -0,0 +1 @@ +[true, "Site,SANs,Array\nConfigured Capacity,Array Reserved Capacity,Array Ava\nilable Capacity,Array % Reserved,Host Allocated,Host Used,Host Free,Host %\nUsed\n"] 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/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.expected b/test/xmlrpc/data/value.expected new file mode 100644 index 0000000000..3dc691544f --- /dev/null +++ b/test/xmlrpc/data/value.expected @@ -0,0 +1 @@ +["Test", ["Hallo Leute", " Hallo ", "", " "]] 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.expected b/test/xmlrpc/data/xml1.expected new file mode 100644 index 0000000000..527a62c2f7 --- /dev/null +++ b/test/xmlrpc/data/xml1.expected @@ -0,0 +1 @@ +[true, [{"subscriber"=>"MegaCorp", "lastName"=>"Baker", "telephone1"=>"1-508-791-1267", "telephone2"=>"1-800-445-2588", "password"=>"p1111", "OID"=>"1", "email"=>"hbaker@yahoo.com", "adminId"=>"hbaker", "objectName"=>"AdministratorDO"}, {"subscriber"=>"CornerStore", "lastName"=>"Dragon", "telephone1"=>"1-781-789-9089", "telephone2"=>"1-800-445-2588", "password"=>"p3333", "OID"=>"3", "email"=>"adragon@yahoo.com", "adminId"=>"adragon", "objectName"=>"AdministratorDO"}, {"subscriber"=>"Cyberdyne", "lastName"=>"Rodman", "telephone1"=>"1-617-789-1890", "telephone2"=>"1-800-445-2588", "password"=>"p4444", "OID"=>"4", "email"=>"mrodman@yahoo.com", "adminId"=>"mrodman", "objectName"=>"AdministratorDO"}, {"subscriber"=>"StarSports", "lastName"=>"Jordan", "telephone1"=>"1-617-890-7897", "telephone2"=>"1-800-445-2588", "password"=>"p5555", "OID"=>"5", "email"=>"mjordan@yahoo.com", "adminId"=>"mjordan", "objectName"=>"AdministratorDO"}, {"subscriber"=>"GreatBooks", "lastName"=>"Pippen", "telephone1"=>"1-781-789-9876", "telephone2"=>"1-800-445-2588", "password"=>"p6666", "OID"=>"6", "email"=>"gpippen@yahoo.com", "adminId"=>"gpippen", "objectName"=>"AdministratorDO"}, {"subscriber"=>"AxisChemicals", "lastName"=>"Andhrew", "telephone1"=>"1-781-678-8970", "telephone2"=>"1-800-445-2588", "password"=>"p7777", "OID"=>"7", "email"=>"aandrew@yahoo.com", "adminId"=>"aandrew", "objectName"=>"AdministratorDO"}, {"subscriber"=>"MediaShop", "lastName"=>"Vincent", "telephone1"=>"1-786-897-8908", "telephone2"=>"1-800-445-2588", "password"=>"p8888", "OID"=>"8", "email"=>"tvincent@yahoo.com", "adminId"=>"tvincent", "objectName"=>"AdministratorDO"}, {"subscriber"=>"SmartShop", "lastName"=>"Richard", "telephone1"=>"1-508-789-6789", "telephone2"=>"1-800-445-2588", "password"=>"p9999", "OID"=>"9", "email"=>"krichard@yahoo.com", "adminId"=>"krichard", "objectName"=>"AdministratorDO"}, {"subscriber"=>"HomeNeeds", "lastName"=>"Cornell", "telephone1"=>"1-617-789-8979", "telephone2"=>"1-800-445-2588", "password"=>"paaaa", "OID"=>"10", "email"=>"gconell@yahoo.com", "adminId"=>"gcornell", "objectName"=>"AdministratorDO"}, {"subscriber"=>"MegaCorp", "lastName"=>"HorstMann", "telephone1"=>"1-508-791-1267", "telephone2"=>"1-800-445-2588", "password"=>"p1111", "OID"=>"11", "email"=>"shorstmann@yahoo.com", "adminId"=>"shorstmann", "objectName"=>"AdministratorDO"}, {"subscriber"=>"CornerStore", "lastName"=>"Bob", "telephone1"=>"1-781-789-9089", "telephone2"=>"1-800-445-2588", "password"=>"p3333", "OID"=>"13", "email"=>"rbob@yahoo.com", "adminId"=>"rbob", "objectName"=>"AdministratorDO"}, {"subscriber"=>"Cyberdyne", "lastName"=>"Peter", "telephone1"=>"1-617-789-1890", "telephone2"=>"1-800-445-2588", "password"=>"p4444", "OID"=>"14", "email"=>"speter@yahoo.com", "adminId"=>"speter", "objectName"=>"AdministratorDO"}, {"subscriber"=>"StarSports", "lastName"=>"Novak", "telephone1"=>"1-617-890-7897", "telephone2"=>"1-800-445-2588", "password"=>"p5555", "OID"=>"15", "email"=>"pnovak@yahoo.com", "adminId"=>"pnovak", "objectName"=>"AdministratorDO"}, {"subscriber"=>"GreatBooks", "lastName"=>"Nancy", "telephone1"=>"1-781-789-9876", "telephone2"=>"1-800-445-2588", "password"=>"p6666", "OID"=>"16", "email"=>"pnancy@yahoo.com", "adminId"=>"pnancy", "objectName"=>"AdministratorDO"}, {"subscriber"=>"AxisChemicals", "lastName"=>"Michel", "telephone1"=>"1-781-678-8970", "telephone2"=>"1-800-445-2588", "password"=>"p7777", "OID"=>"17", "email"=>"hmichel@yahoo.com", "adminId"=>"hmichel", "objectName"=>"AdministratorDO"}, {"subscriber"=>"MediaShop", "lastName"=>"David", "telephone1"=>"1-786-897-8908", "telephone2"=>"1-800-445-2588", "password"=>"p8888", "OID"=>"18", "email"=>"kdavid@yahoo.com", "adminId"=>"kdavid", "objectName"=>"AdministratorDO"}, {"subscriber"=>"SmartShop", "lastName"=>"Valnoor", "telephone1"=>"1-508-789-6789", "telephone2"=>"1-800-445-2588", "password"=>"p9999", "OID"=>"19", "email"=>"pvalnoor@yahoo.com", "adminId"=>"pvalnoor", "objectName"=>"AdministratorDO"}, {"subscriber"=>"HomeNeeds", "lastName"=>"Smith", "telephone1"=>"1-617-789-8979", "telephone2"=>"1-800-445-2588", "password"=>"paaaa", "OID"=>"20", "email"=>"wsmith@yahoo.com", "adminId"=>"wsmith", "objectName"=>"AdministratorDO"}, {"subscriber"=>"MegaCorp", "lastName"=>"Caral", "telephone1"=>"1-781-789-9876", "telephone2"=>"1-800-445-2588", "password"=>"p6666", "OID"=>"21", "email"=>"gcaral@yahoo.com", "adminId"=>"gcaral", "objectName"=>"AdministratorDO"}, {"subscriber"=>"CornerStore", "lastName"=>"Hillary", "telephone1"=>"1-786-897-8908", "telephone2"=>"1-800-445-2588", "password"=>"p8888", "OID"=>"23", "email"=>"phillary@yahoo.com", "adminId"=>"phillary", "objectName"=>"AdministratorDO"}, {"subscriber"=>"Cyberdyne", "lastName"=>"Philip", "telephone1"=>"1-508-789-6789", "telephone2"=>"1-800-445-2588", "password"=>"p9999", "OID"=>"24", "email"=>"bphilip@yahoo.com", "adminId"=>"bphilip", "objectName"=>"AdministratorDO"}, {"subscriber"=>"StarSports", "lastName"=>"Andrea", "telephone1"=>"1-617-789-8979", "telephone2"=>"1-800-445-2588", "password"=>"paaaa", "OID"=>"25", "email"=>"sandrea@yahoo.com", "adminId"=>"sandrea", "objectName"=>"AdministratorDO"}, {"subscriber"=>"s4", "lastName"=>"null", "telephone1"=>"null", "telephone2"=>"null", "password"=>"s4", "OID"=>"26", "email"=>"null", "adminId"=>"s4", "objectName"=>"AdministratorDO"}, {"subscriber"=>"BigBank", "lastName"=>"administrator", "telephone1"=>"", "telephone2"=>"", "password"=>"admin", "OID"=>"82", "email"=>"", "adminId"=>"admin", "objectName"=>"AdministratorDO"}]] 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..d7fbb6650f --- /dev/null +++ b/test/xmlrpc/test_datetime.rb @@ -0,0 +1,160 @@ +$LOAD_PATH.unshift '../../lib' +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..5984b97a53 --- /dev/null +++ b/test/xmlrpc/test_features.rb @@ -0,0 +1,47 @@ +$LOAD_PATH.unshift '../../lib' +require 'test/unit' +require "xmlrpc/create" +require "xmlrpc/parser" +require "xmlrpc/config" + +#XMLRPC::Config.const_set(ENABLE_NIL_CREATE, true) +#XMLRPC::Config.const_set(ENABLE_NIL_PARSER, true) + +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.const_set(:ENABLE_NIL_CREATE, false) + assert_raises(RuntimeError) { str = c.methodCall("test", *@params) } + + XMLRPC::Config.const_set(:ENABLE_NIL_CREATE, true) + assert_nothing_raised { str = c.methodCall("test", *@params) } + end + end + + def test_nil_parse + 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.const_set(:ENABLE_NIL_PARSER, false) + assert_raises(RuntimeError) { para = parser.parseMethodCall(str) } + + 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..5424628d9a --- /dev/null +++ b/test/xmlrpc/test_marshal.rb @@ -0,0 +1,94 @@ +$LOAD_PATH.unshift '../../lib' +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 diff --git a/test/xmlrpc/test_parser.rb b/test/xmlrpc/test_parser.rb new file mode 100644 index 0000000000..3e55cdb35a --- /dev/null +++ b/test/xmlrpc/test_parser.rb @@ -0,0 +1,77 @@ +$LOAD_PATH.unshift '../../lib' +require 'test/unit' +require "xmlrpc/parser" + +module GenericParserTest + def setup + @xml1 = File.readlines("data/xml1.xml").to_s + @expected1 = File.readlines("data/xml1.expected").to_s.chomp + + @xml2 = File.readlines("data/bug_covert.xml").to_s + @expected2 = File.readlines("data/bug_covert.expected").to_s.chomp + + @xml3 = File.readlines("data/bug_bool.xml").to_s + @expected3 = File.readlines("data/bug_bool.expected").to_s.chomp + + @xml4 = File.readlines("data/value.xml").to_s + @expected4 = File.readlines("data/value.expected").to_s.chomp + + @cdata_xml = File.readlines("data/bug_cdata.xml").to_s.chomp + @cdata_expected = File.readlines("data/bug_cdata.expected").to_s.chomp + + @fault_doc = File.readlines("data/fault.xml").to_s + end + + # test parseMethodResponse -------------------------------------------------- + + def test_parseMethodResponse1 + assert_equal(@expected1, @p.parseMethodResponse(@xml1).inspect) + end + + def test_parseMethodResponse2 + assert_equal(@expected2, @p.parseMethodResponse(@xml2).inspect) + end + + def test_parseMethodResponse3 + assert_equal(@expected3, @p.parseMethodResponse(@xml3).inspect) + end + + def test_cdata + assert_equal(@cdata_expected, @p.parseMethodResponse(@cdata_xml).inspect) + end + + # test parseMethodCall ------------------------------------------------------ + + def test_parseMethodCall + assert_equal(@expected4, @p.parseMethodCall(@xml4).inspect) + end + + # test fault ---------------------------------------------------------------- + + def test_fault + flag, fault = @p.parseMethodResponse(@fault_doc) + assert_equal(flag, false) + unless fault.is_a? XMLRPC::FaultException + assert(false, "must be an instance of class XMLRPC::FaultException") + end + assert_equal(fault.faultCode, 4) + assert_equal(fault.faultString, "an error message") + end +end + +# create test class for each installed parser +XMLRPC::XMLParser.each_installed_parser do |parser| + klass = parser.class + name = klass.to_s.split("::").last + + eval %{ + class Test_#{name} < Test::Unit::TestCase + include GenericParserTest + + def setup + super + @p = #{klass}.new + end + end + } +end