Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

root/branches/1_5/test/interopR2/client.rb

Revision 1876, 30.2 kB (checked in by nahi, 1 year ago)
  • tests updated; testcase name collision, interop test config, etc.
  • Property svn:eol-style set to native
  • Property svn:keywords set to author date id revision
Line 
1 $KCODE = 'EUC'
2
3 require 'test/unit'
4 require 'soap/rpc/driver'
5 require 'soap/mapping'
6 require 'base'
7 require 'interopResultBase'
8 require 'xsd/xmlparser/rexmlparser'
9 #XSD::Charset.encoding = 'EUC'
10
11 class Float
12   Precision = 5
13   def ==(rhs)
14     if rhs.is_a?(Float)
15       if self.nan? and rhs.nan?
16         true
17       elsif self.infinite? == rhs.infinite?
18         true
19       elsif (rhs - self).abs <= (10 ** (- Precision))
20         true
21       else
22         false
23       end
24     else
25       false
26     end
27   end
28 end
29
30 class FakeFloat < SOAP::SOAPFloat
31   def initialize(str)
32     super()
33     @data = str
34   end
35
36   def to_s
37     @data.to_s
38   end
39 end
40
41 class FakeDateTime < SOAP::SOAPDateTime
42   def initialize(str)
43     super()
44     @data = str
45   end
46
47   def to_s
48     @data.to_s
49   end
50 end
51
52 class FakeDecimal < SOAP::SOAPDecimal
53   def initialize(str)
54     super()
55     @data = str
56   end
57
58   def to_s
59     @data.to_s
60   end
61 end
62
63 class FakeInt < SOAP::SOAPInt
64   def initialize(str)
65     super()
66     @data = str
67   end
68
69   def to_s
70     @data.to_s
71   end
72 end
73
74 class SOAPBuildersTest < Test::Unit::TestCase
75   include SOAP
76   include SOAPBuildersInterop
77
78   NegativeZero = (-1.0 / (1.0 / 0.0))
79
80   class << self
81     include SOAP
82     def setup(name, location)
83       setup_log(name)
84       setup_drv(location)
85     end
86
87     def teardown
88     end
89
90   private
91
92     def setup_log(name)
93       filename = File.basename($0).sub(/\.rb$/, '') << '.log'
94       @@log = File.open(filename, 'w')
95       @@log << "File: #{ filename } - Wiredumps for SOAP4R client / #{ name } server.\n"
96       @@log << "Date: #{ Time.now }\n\n"
97     end
98
99     def setup_drv(location)
100       namespace = InterfaceNS
101       soap_action = InterfaceNS
102       @@drv = RPC::Driver.new(location, namespace, soap_action)
103       @@drv.mapping_registry = SOAPBuildersInterop::MappingRegistry
104       if $DEBUG
105         @@drv.wiredump_dev = STDOUT
106       else
107         @@drv.wiredump_dev = @@log
108       end
109       method_def(@@drv, soap_action)
110     end
111
112     def method_def(drv, soap_action = nil)
113       do_method_def(drv, SOAPBuildersInterop::MethodsBase, soap_action)
114       do_method_def(drv, SOAPBuildersInterop::MethodsGroupB, soap_action)
115     end
116
117     def do_method_def(drv, defs, soap_action = nil)
118       defs.each do |name, *params|
119         drv.add_rpc_operation(
120           XSD::QName.new(InterfaceNS, name), soap_action, name, params)
121       end
122     end
123   end
124
125   def setup
126   end
127
128   def teardown
129   end
130
131   def drv
132     @@drv
133   end
134
135   def log_test
136     /`([^']+)'/ =~ caller(1)[0]
137     title = $1
138     title = "==== " + title + " " << "=" * (title.length > 72 ? 0 : (72 - title.length))
139     @@log << "#{title}\n\n"
140   end
141
142   def assert_exception(klass_or_module)
143     begin
144       yield
145       assert(false, "Exception was not raised.")
146     rescue Exception => e
147       if klass_or_module.is_a?(Module)
148         assert_kind_of(klass_or_module, e)
149       elsif klass_or_module.is_a?(Class)
150         assert_instance_of(klass_or_module, e)
151       else
152         assert(false, "Must be a klass or a mogule.")
153       end
154     end
155   end
156
157   def inspect_with_id(obj)
158     case obj
159     when Array
160       obj.collect { |ele| inspect_with_id(ele) }
161     else
162       # String#== compares content of args.
163       "#{ obj.class }##{ obj.__id__ }"
164     end
165   end
166
167   def dump_result(title, result, resultStr)
168     @@test_result.add(
169       SOAPBuildersInteropResult::TestResult.new(
170         title,
171         result,
172         resultStr,
173         $wireDumpDev.dup
174     )
175   )
176     $wireDumpLogFile << "Result: #{ resultStr || 'OK' }\n\n"
177     $wireDumpLogFile << $wireDumpDev
178     $wireDumpLogFile << "\n"
179
180     $wireDumpDev.replace('')
181   end
182
183   def test_echoVoid
184     log_test
185     var =  drv.echoVoid()
186     assert_equal(nil, var)
187   end
188
189   def test_echoString
190     log_test
191     arg = "SOAP4R Interoperability Test"
192     var = drv.echoString(arg)
193     assert_equal(arg, var)
194   end
195
196   def test_echoString_Entity_reference
197     log_test
198     arg = "<>\"& &lt;&gt;&quot;&amp; &amp&amp;><<<"
199     var = drv.echoString(arg)
200     assert_equal(arg, var)
201   end
202
203   def test_echoString_haracter_reference
204     log_test
205     arg = "\x20&#x20;\040&#32;\x7f&#x7f;\177&#127;"
206     tobe = "    \177\177\177\177"
207     var = drv.echoString(SOAP::SOAPRawString.new(arg))
208     assert_equal(tobe, var)
209   end
210
211   def test_echoString_Leading_and_trailing_whitespace
212     log_test
213     arg = "   SOAP4R\nInteroperability\nTest   "
214     var = drv.echoString(arg)
215     assert_equal(arg, var)
216   end
217
218   def test_echoString_EUC_encoded
219     log_test
220     arg = "Hello (����panese) ������
221     var = drv.echoString(arg)
222     assert_equal(arg, var)
223   end
224
225   def test_echoString_EUC_encoded_again
226     log_test
227     arg = "Hello (����panese) ������
228     var = drv.echoString(arg)
229     assert_equal(arg, var)
230   end
231
232   def test_echoString_SJIS_encoded
233     log_test
234     arg = "Hello (����panese) ������
235     require 'nkf'
236     arg = NKF.nkf("-sm0", arg)
237     drv.options["soap.mapping.external_ces"] = 'SJIS'
238     begin
239       var = drv.echoString(arg)
240       assert_equal(arg, var)
241     ensure
242       drv.options["soap.mapping.external_ces"] = nil
243     end
244   end
245
246   def test_echoString_empty
247     log_test
248     arg = ''
249     var = drv.echoString(arg)
250     assert_equal(arg, var)
251   end
252
253   def test_echoString_space
254     log_test
255     arg = ' '
256     var = drv.echoString(arg)
257     assert_equal(arg, var)
258   end
259
260   def test_echoString_whitespaces
261     log_test
262     arg = "\r \n \t \r \n \t"
263     var = drv.echoString(arg)
264     assert_equal(arg, var)
265   end
266
267   def test_echoStringArray
268     log_test
269     arg = StringArray["SOAP4R\n", " Interoperability ", "\tTest\t"]
270     var = drv.echoStringArray(arg)
271     assert_equal(arg, var)
272   end
273
274   def test_echoStringArray_multi_ref
275     log_test
276     str1 = "SOAP4R"
277     str2 = "SOAP4R"
278     arg = StringArray[str1, str2, str1]
279     var = drv.echoStringArray(arg)
280     assert_equal(arg, var)
281   end
282
283   def test_echoStringArray_multi_ref_idmatch
284     log_test
285     str1 = "SOAP4R"
286     str2 = "SOAP4R"
287     arg = StringArray[str1, str2, str1]
288     var = drv.echoStringArray(arg)
289     assert_equal(inspect_with_id(var[0]), inspect_with_id(var[2]))
290   end
291
292   def test_echoStringArray_empty_multi_ref_idmatch
293     log_test
294     str1 = ""
295     str2 = ""
296     arg = StringArray[str1, str2, str1]
297     var = drv.echoStringArray(arg)
298     assert_equal(inspect_with_id(var[0]), inspect_with_id(var[2]))
299   end
300
301   def test_echoInteger_123
302     log_test
303     arg = 123
304     var = drv.echoInteger(arg)
305     assert_equal(arg, var)
306   end
307
308   def test_echoInteger_2147483647
309     log_test
310     arg = 2147483647
311     var = drv.echoInteger(arg)
312     assert_equal(arg, var)
313   end
314
315   def test_echoInteger_negative_2147483648
316     log_test
317     arg = -2147483648
318     var = drv.echoInteger(arg)
319     assert_equal(arg, var)
320   end
321
322   def test_echoInteger_2147483648_junk
323     log_test
324     assert_exception(SOAP::RPC::ServerException) do
325       arg = FakeInt.new("2147483648")
326       var = drv.echoInteger(arg)
327     end
328   end
329
330   def test_echoInteger_negative_2147483649_junk
331     log_test
332     assert_exception(SOAP::RPC::ServerException) do
333       arg = FakeInt.new("-2147483649")
334       var = drv.echoInteger(arg)
335     end
336   end
337
338   def test_echoInteger_0_0_junk
339     log_test
340     assert_exception(SOAP::RPC::ServerException) do
341       arg = FakeInt.new("0.0")
342       var = drv.echoInteger(arg)
343     end
344   end
345
346   def test_echoInteger_negative_5_2_junk
347     log_test
348     assert_exception(SOAP::RPC::ServerException) do
349       arg = FakeInt.new("-5.2")
350       var = drv.echoInteger(arg)
351     end
352   end
353
354   def test_echoInteger_0_000000000a_junk
355     log_test
356     assert_exception(SOAP::RPC::ServerException) do
357       arg = FakeInt.new("0.000000000a")
358       var = drv.echoInteger(arg)
359     end
360   end
361
362   def test_echoInteger_plus_minus_5_junk
363     log_test
364     assert_exception(SOAP::RPC::ServerException) do
365       arg = FakeInt.new("+-5")
366       var = drv.echoInteger(arg)
367     end
368   end
369
370   def test_echoIntegerArray
371     log_test
372     arg = IntArray[1, 2, 3]
373     var = drv.echoIntegerArray(arg)
374     assert_equal(arg, var)
375   end
376
377   def test_echoIntegerArray_empty
378     log_test
379     arg = SOAP::SOAPArray.new(SOAP::ValueArrayName, 1, XSD::XSDInt::Type)
380     var = drv.echoIntegerArray(arg)
381     assert_equal([], var)
382   end
383
384   def test_echoFloat
385     log_test
386     arg = 3.14159265358979
387     var = drv.echoFloat(SOAPFloat.new(arg))
388     assert_equal(arg, var)
389   end
390
391   def test_echoFloat_scientific_notation
392     log_test
393     arg = 12.34e36
394     var = drv.echoFloat(SOAPFloat.new(arg))
395     assert_equal(arg, var)
396   end
397
398   def test_echoFloat_scientific_notation_2
399     log_test
400     arg = FakeFloat.new("12.34e36")
401     var = drv.echoFloat(SOAPFloat.new(arg))
402     assert_equal(12.34e36, var)
403   end
404
405   def test_echoFloat_scientific_notation_3
406     log_test
407     arg = FakeFloat.new("12.34E+36")
408     var = drv.echoFloat(SOAPFloat.new(arg))
409     assert_equal(12.34e36, var)
410   end
411
412   def test_echoFloat_scientific_notation_4
413     log_test
414     arg = FakeFloat.new("-1.4E")
415     var = drv.echoFloat(SOAPFloat.new(arg))
416     assert_equal(1.4, var)
417   end
418
419   def test_echoFloat_positive_lower_boundary
420     log_test
421     arg = 1.4e-45
422     var = drv.echoFloat(SOAPFloat.new(arg))
423     assert_equal(arg, var)
424   end
425
426   def test_echoFloat_negative_lower_boundary
427     log_test
428     arg = -1.4e-45
429     var = drv.echoFloat(SOAPFloat.new(arg))
430     assert_equal(arg, var)
431   end
432
433   def test_echoFloat_special_values_positive_0
434     log_test
435     arg = 0.0
436     var = drv.echoFloat(SOAPFloat.new(arg))
437     assert_equal(arg, var)
438   end
439
440   def test_echoFloat_special_values_negative_0
441     log_test
442     arg = NegativeZero
443     var = drv.echoFloat(SOAPFloat.new(arg))
444     assert_equal(arg, var)
445   end
446
447   def test_echoFloat_special_values_NaN
448     log_test
449     arg = 0.0/0.0
450     var = drv.echoFloat(SOAPFloat.new(arg))
451     assert_equal(arg, var)
452   end
453
454   def test_echoFloat_special_values_positive_INF
455     log_test
456     arg = 1.0/0.0
457     var = drv.echoFloat(SOAPFloat.new(arg))
458     assert_equal(arg, var)
459   end
460
461   def test_echoFloat_special_values_negative_INF
462     log_test
463     arg = -1.0/0.0
464     var = drv.echoFloat(SOAPFloat.new(arg))
465     assert_equal(arg, var)
466   end
467
468   def test_echoFloat_0_000a_junk
469     log_test
470     assert_exception(SOAP::RPC::ServerException) do
471       arg = FakeFloat.new("0.0000000000000000a")
472       var = drv.echoFloat(arg)
473     end
474   end
475
476   def test_echoFloat_00a_0001_junk
477     log_test
478     assert_exception(SOAP::RPC::ServerException) do
479       arg = FakeFloat.new("00a.000000000000001")
480       var = drv.echoFloat(arg)
481     end
482   end
483
484   def test_echoFloat_plus_minus_5_junk
485     log_test
486     assert_exception(SOAP::RPC::ServerException) do
487       arg = FakeFloat.new("+-5")
488       var = drv.echoFloat(arg)
489     end
490   end
491
492   def test_echoFloat_5_0_junk
493     log_test
494     assert_exception(SOAP::RPC::ServerException) do
495       arg = FakeFloat.new("5_0")
496       var = drv.echoFloat(arg)
497     end
498   end
499
500   def test_echoFloatArray
501     log_test
502     arg = FloatArray[SOAPFloat.new(0.0001), SOAPFloat.new(1000.0),
503       SOAPFloat.new(0.0)]
504     var = drv.echoFloatArray(arg)
505     assert_equal(arg.collect { |ele| ele.data }, var)
506   end
507
508   def test_echoFloatArray_special_values_NaN_positive_INF_negative_INF
509     log_test
510     nan = SOAPFloat.new(0.0/0.0)
511     inf = SOAPFloat.new(1.0/0.0)
512     inf_ = SOAPFloat.new(-1.0/0.0)
513     arg = FloatArray[nan, inf, inf_]
514     var = drv.echoFloatArray(arg)
515     assert_equal(arg.collect { |ele| ele.data }, var)
516   end
517
518   def test_echoStruct
519     log_test
520     arg = SOAPStruct.new(1, 1.1, "a")
521     var = drv.echoStruct(arg)
522     assert_equal(arg, var)
523   end
524
525   def test_echoStruct_nil_members
526     log_test
527     arg = SOAPStruct.new(nil, nil, nil)
528     var = drv.echoStruct(arg)
529     assert_equal(arg, var)
530   end
531
532   def test_echoStructArray
533     log_test
534     s1 = SOAPStruct.new(1, 1.1, "a")
535     s2 = SOAPStruct.new(2, 2.2, "b")
536     s3 = SOAPStruct.new(3, 3.3, "c")
537     arg = SOAPStructArray[s1, s2, s3]
538     var = drv.echoStructArray(arg)
539     assert_equal(arg, var)
540   end
541
542   def test_echoStructArray_anyType_Array
543     log_test
544     s1 = SOAPStruct.new(1, 1.1, "a")
545     s2 = SOAPStruct.new(2, 2.2, "b")
546     s3 = SOAPStruct.new(3, 3.3, "c")
547     arg = [s1, s2, s3]
548     var = drv.echoStructArray(arg)
549     assert_equal(arg, var)
550   end
551
552   def test_echoStructArray_multi_ref
553     log_test
554     s1 = SOAPStruct.new(1, 1.1, "a")
555     s2 = SOAPStruct.new(2, 2.2, "b")
556     arg = SOAPStructArray[s1, s1, s2]
557     var = drv.echoStructArray(arg)
558     assert_equal(arg, var)
559   end
560
561   def test_echoStructArray_multi_ref_idmatch
562     log_test
563     s1 = SOAPStruct.new(1, 1.1, "a")
564     s2 = SOAPStruct.new(2, 2.2, "b")
565     arg = SOAPStructArray[s1, s1, s2]
566     var = drv.echoStructArray(arg)
567     assert_equal(inspect_with_id(var[0]), inspect_with_id(var[1]))
568   end
569
570   def test_echoStructArray_anyType_Array_multi_ref_idmatch
571     log_test
572     s1 = SOAPStruct.new(1, 1.1, "a")
573     s2 = SOAPStruct.new(2, 2.2, "b")
574     arg = [s1, s2, s2]
575     var = drv.echoStructArray(arg)
576     assert_equal(inspect_with_id(var[1]), inspect_with_id(var[2]))
577   end
578
579   def test_echoStructArray_multi_ref_idmatch_varString_of_elem1_varString_of_elem2
580     log_test
581     str1 = "a"
582     str2 = "a"
583     s1 = SOAPStruct.new(1, 1.1, str1)
584     s2 = SOAPStruct.new(2, 2.2, str1)
585     s3 = SOAPStruct.new(3, 3.3, str2)
586     arg = SOAPStructArray[s1, s2, s3]
587     var = drv.echoStructArray(arg)
588     assert_equal(inspect_with_id(var[0].varString), inspect_with_id(var[1].varString))
589   end
590
591   def test_echoStructArray_anyType_Array_multi_ref_idmatch_varString_of_elem2_varString_of_elem3
592     log_test
593     str1 = "b"
594     str2 = "b"
595     s1 = SOAPStruct.new(1, 1.1, str2)
596     s2 = SOAPStruct.new(2, 2.2, str1)
597     s3 = SOAPStruct.new(3, 3.3, str1)
598     arg = [s1, s2, s3]
599     var = drv.echoStructArray(arg)
600     assert_equal(inspect_with_id(var[1].varString), inspect_with_id(var[2].varString))
601   end
602
603   def test_echoDate_now
604     log_test
605     t = Time.now.gmtime
606     arg = DateTime.new(t.year, t.mon, t.mday, t.hour, t.min, t.sec)
607     var = drv.echoDate(arg)
608     assert_equal(arg.to_s, var.to_s)
609   end
610
611   def test_echoDate_before_1970
612     log_test
613     t = Time.now.gmtime
614     arg = DateTime.new(1, 1, 1, 0, 0, 0)
615     var = drv.echoDate(arg)
616     assert_equal(arg.to_s, var.to_s)
617   end
618
619   def test_echoDate_after_2038
620     log_test
621     t = Time.now.gmtime
622     arg = DateTime.new(2038, 12, 31, 0, 0, 0)
623     var = drv.echoDate(arg)
624     assert_equal(arg.to_s, var.to_s)
625   end
626
627   def test_echoDate_negative_10_01_01T00_00_00Z
628     log_test
629     t = Time.now.gmtime
630     arg = DateTime.new(-10, 1, 1, 0, 0, 0)
631     var = drv.echoDate(arg)
632     assert_equal(arg.to_s, var.to_s)
633   end
634
635   def test_echoDate_time_precision_msec
636     log_test
637     arg = SOAP::SOAPDateTime.new('2001-06-16T18:13:40.012')
638     argDate = arg.data
639     var = drv.echoDate(arg)
640     assert_equal(argDate, var)
641   end
642
643   def test_echoDate_time_precision_long
644     log_test
645     arg = SOAP::SOAPDateTime.new('2001-06-16T18:13:40.0000000000123456789012345678900000000000')
646     argDate = arg.data
647     var = drv.echoDate(arg)
648     assert_equal(argDate, var)
649   end
650
651   def test_echoDate_positive_TZ
652     log_test
653     arg = SOAP::SOAPDateTime.new('2001-06-17T01:13:40+07:00')
654     argNormalized = DateTime.new(2001, 6, 16, 18, 13, 40)
655     var = drv.echoDate(arg)
656     assert_equal(argNormalized, var)
657   end
658
659   def test_echoDate_negative_TZ
660     log_test
661     arg = SOAP::SOAPDateTime.new('2001-06-16T18:13:40-07:00')
662     argNormalized = DateTime.new(2001, 6, 17, 1, 13, 40)
663     var = drv.echoDate(arg)
664     assert_equal(argNormalized, var)
665   end
666
667   def test_echoDate_positive_00_00_TZ
668     log_test
669     arg = SOAP::SOAPDateTime.new('2001-06-17T01:13:40+00:00')
670     argNormalized = DateTime.new(2001, 6, 17, 1, 13, 40)
671     var = drv.echoDate(arg)
672     assert_equal(argNormalized, var)
673   end
674
675   def test_echoDate_negative_00_00_TZ
676     log_test
677     arg = SOAP::SOAPDateTime.new('2001-06-17T01:13:40-00:00')
678     argNormalized = DateTime.new(2001, 6, 17, 1, 13, 40)
679     var = drv.echoDate(arg)
680     assert_equal(argNormalized, var)
681   end
682
683   def test_echoDate_min_TZ
684     log_test
685     arg = SOAP::SOAPDateTime.new('2001-06-16T00:00:01+00:01')
686     argNormalized = DateTime.new(2001, 6, 15, 23, 59, 1)
687     var = drv.echoDate(arg)
688     assert_equal(argNormalized, var)
689   end
690
691   def test_echoDate_year_9999
692     log_test
693     arg = SOAP::SOAPDateTime.new('10000-06-16T18:13:40-07:00')
694     argNormalized = DateTime.new(10000, 6, 17, 1, 13, 40)
695     var = drv.echoDate(arg)
696     assert_equal(argNormalized, var)
697   end
698
699   def test_echoDate_year_0
700     log_test
701     arg = SOAP::SOAPDateTime.new('-0001-06-16T18:13:40-07:00')
702     argNormalized = DateTime.new(0, 6, 17, 1, 13, 40)
703     var = drv.echoDate(arg)
704     assert_equal(argNormalized, var)
705   end
706
707   def test_echoDate_year_4713
708     log_test
709     arg = SOAP::SOAPDateTime.new('-4713-01-01T12:00:00')
710     argNormalized = DateTime.new(-4712, 1, 1, 12, 0, 0)
711     var = drv.echoDate(arg)
712     assert_equal(argNormalized, var)
713   end
714
715   def test_echoDate_year_0000_junk
716     log_test
717     assert_exception(SOAP::RPC::ServerException) do
718       arg = FakeDateTime.new("0000-05-18T16:52:20Z")
719       var = drv.echoDate(arg)
720     end
721   end
722
723   def test_echoDate_year_nn_junk
724     log_test
725     assert_exception(SOAP::RPC::ServerException) do
726       arg = FakeDateTime.new("05-05-18T16:52:20Z")
727       var = drv.echoDate(arg)
728     end
729   end
730
731   def test_echoDate_no_day_part_junk
732     log_test
733     assert_exception(SOAP::RPC::ServerException) do
734       arg = FakeDateTime.new("2002-05T16:52:20Z")
735       var = drv.echoDate(arg)
736     end
737   end
738
739   def test_echoDate_no_sec_part_junk
740     log_test
741     assert_exception(SOAP::RPC::ServerException) do
742       arg = FakeDateTime.new("2002-05-18T16:52Z")
743       var = drv.echoDate(arg)
744     end
745   end
746
747   def test_echoDate_empty_junk
748     log_test
749     assert_exception(SOAP::RPC::ServerException) do
750       arg = FakeDateTime.new("")
751       var = drv.echoDate(arg)
752     end
753   end
754
755   def test_echoBase64_xsd_base64Binary
756     log_test
757     str = "Hello (����panese) ������
758     arg = SOAP::SOAPBase64.new(str)
759     arg.as_xsd  # Force xsd:base64Binary instead of soap-enc:base64
760     var = drv.echoBase64(arg)
761     assert_equal(str, var)
762   end
763
764   def test_echoBase64_xsd_base64Binary_empty
765     log_test
766     str = ""
767     arg = SOAP::SOAPBase64.new(str)
768     arg.as_xsd  # Force xsd:base64Binary instead of soap-enc:base64
769     var = drv.echoBase64(arg)
770     assert_equal(str, var)
771   end
772
773   def test_echoBase64_SOAP_ENC_base64
774     log_test
775     str = "Hello (����panese) ������
776     arg = SOAP::SOAPBase64.new(str)
777     var = drv.echoBase64(arg)
778     assert_equal(str, var)
779   end
780
781   def test_echoBase64_0
782     log_test
783     str = "\0"
784     arg = SOAP::SOAPBase64.new(str)
785     var = drv.echoBase64(arg)
786     assert_equal(str, var)
787   end
788
789   def test_echoBase64_0a_0
790     log_test
791     str = "a\0b\0\0c\0\0\0"
792     arg = SOAP::SOAPBase64.new(str)
793     var = drv.echoBase64(arg)
794     assert_equal(str, var)
795   end
796
797   def test_echoBase64_junk
798     log_test
799     assert_exception(SOAP::RPC::ServerException) do
800       arg = SOAP::SOAPBase64.new("dummy")
801       arg.instance_eval { @data = '-' }
802       var = drv.echoBase64(arg)
803     end
804   end
805
806   def test_echoHexBinary
807     log_test
808     str = "Hello (����panese) ������
809     arg = SOAP::SOAPHexBinary.new(str)
810     var = drv.echoHexBinary(arg)
811     assert_equal(str, var)
812   end
813
814   def test_echoHexBinary_empty
815     log_test
816     str = ""
817     arg = SOAP::SOAPHexBinary.new(str)
818     var = drv.echoHexBinary(arg)
819     assert_equal(str, var)
820   end
821
822   def test_echoHexBinary_0
823     log_test
824     str = "\0"
825     arg = SOAP::SOAPHexBinary.new(str)
826     var = drv.echoHexBinary(arg)
827     assert_equal(str, var)
828   end
829
830   def test_echoHexBinary_0a_0
831     log_test
832     str = "a\0b\0\0c\0\0\0"
833     arg = SOAP::SOAPHexBinary.new(str)
834     var = drv.echoHexBinary(arg)
835     assert_equal(str, var)
836   end
837
838   def test_echoHexBinary_lower_case
839     log_test
840     str = "lower case"
841     arg = SOAP::SOAPHexBinary.new
842     arg.set_encoded((str.unpack("H*")[0]).tr('A-F', 'a-f'))
843     var = drv.echoHexBinary(arg)
844     assert_equal(str, var)
845   end
846
847   def test_echoHexBinary_0FG7_junk
848     log_test
849     assert_exception(SOAP::RPC::ServerException) do
850       arg = SOAP::SOAPHexBinary.new("dummy")
851       arg.instance_eval { @data = '0FG7' }
852       var = drv.echoHexBinary(arg)
853     end
854   end
855
856   def test_echoBoolean_true
857     log_test
858     arg = true
859     var = drv.echoBoolean(arg)
860     assert_equal(arg, var)
861   end
862
863   def test_echoBoolean_false
864     log_test
865     arg = false
866     var = drv.echoBoolean(arg)
867     assert_equal(arg, var)
868   end
869
870   def test_echoBoolean_junk
871     log_test
872     assert_exception(SOAP::RPC::ServerException) do
873       arg = SOAP::SOAPBoolean.new(true)
874       arg.instance_eval { @data = 'junk' }
875       var = drv.echoBoolean(arg)
876     end
877   end
878
879   def test_echoDecimal_123456
880     log_test
881     arg = "123456789012345678"
882     var = drv.echoDecimal(SOAP::SOAPDecimal.new(arg))
883     normalized = arg
884     assert_equal(normalized, var)
885   end
886
887   def test_echoDecimal_0_123
888     log_test
889     arg = "+0.12345678901234567"
890     var = drv.echoDecimal(SOAP::SOAPDecimal.new(arg))
891     normalized = arg.sub(/0$/, '').sub(/^\+/, '')
892     assert_equal(normalized, var)
893   end
894
895   def test_echoDecimal_00000123
896     log_test
897     arg = ".00000123456789012"
898     var = drv.echoDecimal(SOAP::SOAPDecimal.new(arg))
899     normalized = '0' << arg.sub(/0$/, '')
900     assert_equal(normalized, var)
901   end
902
903   def test_echoDecimal_negative_00000123
904     log_test
905     arg = "-.00000123456789012"
906     var = drv.echoDecimal(SOAP::SOAPDecimal.new(arg))
907     normalized = '-0' << arg.sub(/0$/, '').sub(/-/, '')
908     assert_equal(normalized, var)
909   end
910
911   def test_echoDecimal_123_456
912     log_test
913     arg = "-123456789012345.008"
914     var = drv.echoDecimal(SOAP::SOAPDecimal.new(arg))
915     assert_equal(arg, var)
916   end
917
918   def test_echoDecimal_123
919     log_test
920     arg = "-12345678901234567."
921     normalized = arg.sub(/\.$/, '')
922     var = drv.echoDecimal(SOAP::SOAPDecimal.new(arg))
923     assert_equal(normalized, var)
924   end
925
926   def test_echoDecimal_0_000a_junk
927     log_test
928     assert_exception(SOAP::RPC::ServerException) do
929       arg = FakeDecimal.new("0.0000000000000000a")
930       var = drv.echoDecimal(arg)
931     end
932   end
933
934   def test_echoDecimal_00a_0001_junk
935     log_test
936     assert_exception(SOAP::RPC::ServerException) do
937       arg = FakeDecimal.new("00a.000000000000001")
938       var = drv.echoDecimal(arg)
939     end
940   end
941
942   def test_echoDecimal_plus_minus_5_junk
943     log_test
944     assert_exception(SOAP::RPC::ServerException) do
945       arg = FakeDecimal.new("+-5")
946       var = drv.echoDecimal(arg)
947     end
948   end
949
950   def test_echoDecimal_5_0_junk
951     log_test
952     assert_exception(SOAP::RPC::ServerException) do
953       arg = FakeDecimal.new("5_0")
954       var = drv.echoDecimal(arg)
955     end
956   end
957
958   def test_echoMap
959     log_test
960     arg = { "a" => 1, "b" => 2 }
961     var = drv.echoMap(arg)
962     assert_equal(arg, var)
963   end
964
965   def test_echoMap_boolean_base64_nil_float
966     log_test
967     arg = { true => "\0", "\0" => nil, nil => 0.0001, 0.0001 => false }
968     var = drv.echoMap(arg)
969     assert_equal(arg, var)
970   end
971
972   def test_echoMap_multibyte_char
973     log_test
974     arg = { "Hello (����panese) ������ => 1, 1 => "Hello (����panese) ������ }
975     var = drv.echoMap(arg)
976     assert_equal(arg, var)
977   end
978
979   def test_echoMap_Struct
980     log_test
981     obj = SOAPStruct.new(1, 1.1, "a")
982     arg = { 1 => obj, 2 => obj }
983     var = drv.echoMap(arg)
984     assert_equal(arg, var)
985   end
986
987   def test_echoMap_multi_ref_idmatch_value_for_key_a
988     log_test
989     value = "c"
990     arg = { "a" => value, "b" => value }
991     var = drv.echoMap(arg)
992     assert_equal(inspect_with_id(var["a"]), inspect_with_id(var["b"]))
993   end
994
995   def test_echoMap_Struct_multi_ref_idmatch_varString_of_a_key
996     log_test
997     str = ""
998     obj = SOAPStruct.new(1, 1.1, str)
999     arg = { obj => "1", "1" => obj }
1000     var = drv.echoMap(arg)
1001     assert_equal(inspect_with_id(var.index("1").varString), inspect_with_id(var.fetch("1").varString))
1002   end
1003
1004   def test_echoMapArray
1005     log_test
1006     map1 = { "a" => 1, "b" => 2 }
1007     map2 = { "a" => 1, "b" => 2 }
1008     map3 = { "a" => 1, "b" => 2 }
1009     arg = [map1, map2, map3]
1010     var = drv.echoMapArray(arg)
1011     assert_equal(arg, var)
1012   end
1013
1014   def test_echoMapArray_boolean_base64_nil_float
1015     log_test
1016     map1 = { true => "\0", "\0" => nil, nil => 0.0001, 0.0001 => false }
1017     map2 = { true => "\0", "\0" => nil, nil => 0.0001, 0.0001 => false }
1018     map3 = { true => "\0", "\0" => nil, nil => 0.0001, 0.0001 => false }
1019     arg = [map1, map2, map3]
1020     var = drv.echoMapArray(arg)
1021     assert_equal(arg, var)
1022   end
1023
1024   def test_echoMapArray_multibyte_char
1025     log_test
1026     map1 = { "Hello (����panese) ������ => 1, 1 => "Hello (����panese) ������ }
1027     map2 = { "Hello (����panese) ������ => 1, 1 => "Hello (����panese) ������ }
1028     map3 = { "Hello (����panese) ������ => 1, 1 => "Hello (����panese) ������ }
1029     arg = [map1, map2, map3]
1030     var = drv.echoMapArray(arg)
1031     assert_equal(arg, var)
1032   end
1033
1034   def test_echoMapArray_multi_ref_idmatch
1035     log_test
1036     map1 = { "a" => 1, "b" => 2 }
1037     map2 = { "a" => 1, "b" => 2 }
1038     arg = [map1, map1, map2]
1039     var = drv.echoMapArray(arg)
1040     assert_equal(inspect_with_id(var[0]), inspect_with_id(var[1]))
1041   end
1042
1043   def test_echoStructAsSimpleTypes
1044     log_test
1045     arg = SOAPStruct.new(1, 1.1, "a")
1046     ret, out1, out2 = drv.echoStructAsSimpleTypes(arg)
1047     var = SOAPStruct.new(out1, out2, ret)
1048     assert_equal(arg, var)
1049   end
1050
1051   def test_echoStructAsSimpleTypes_nil
1052     log_test
1053     arg = SOAPStruct.new(nil, nil, nil)
1054     ret, out1, out2 = drv.echoStructAsSimpleTypes(arg)
1055     var = SOAPStruct.new(out1, out2, ret)
1056     assert_equal(arg, var)
1057   end
1058
1059   def test_echoSimpleTypesAsStruct
1060     log_test
1061     arg = SOAPStruct.new(1, 1.1, "a")
1062     var = drv.echoSimpleTypesAsStruct(arg.varString, arg.varInt, arg.varFloat)
1063     assert_equal(arg, var)
1064   end
1065
1066   def test_echoSimpleTypesAsStruct_nil
1067     log_test
1068     arg = SOAPStruct.new(nil, nil, nil)
1069     var = drv.echoSimpleTypesAsStruct(arg.varString, arg.varInt, arg.varFloat)
1070     assert_equal(arg, var)
1071   end
1072
1073   def test_echo2DStringArray
1074     log_test
1075 #    arg = SOAP::SOAPArray.new(SOAP::ValueArrayName, 2, XSD::XSDString::Type)
1076 #    arg[0, 0] = obj2soap('r0c0')
1077 #    arg[1, 0] = obj2soap('r1c0')
1078 #    arg[2, 0] = obj2soap('r2c0')
1079 #    arg[0, 1] = obj2soap('r0c1')
1080 #    arg[1, 1] = obj2soap('r1c1')
1081 #    arg[2, 1] = obj2soap('r2c1')
1082 #    arg[0, 2] = obj2soap('r0c2')
1083 #    arg[1, 2] = obj2soap('r1c2')
1084 #    arg[2, 2] = obj2soap('r2c2')
1085
1086     arg = SOAP::SOAPArray.new(XSD::QName.new('http://soapinterop.org/xsd', 'ArrayOfString2D'), 2, XSD::XSDString::Type)
1087     arg.size = [3, 3]
1088     arg.size_fixed = true
1089     arg.add(SOAP::Mapping.obj2soap('r0c0', SOAPBuildersInterop::MappingRegistry))
1090     arg.add(SOAP::Mapping.obj2soap('r1c0', SOAPBuildersInterop::MappingRegistry))
1091     arg.add(SOAP::Mapping.obj2soap('r2c0', SOAPBuildersInterop::MappingRegistry))
1092     arg.add(SOAP::Mapping.obj2soap('r0c1', SOAPBuildersInterop::MappingRegistry))
1093     arg.add(SOAP::Mapping.obj2soap('r1c1', SOAPBuildersInterop::MappingRegistry))
1094     arg.add(SOAP::Mapping.obj2soap('r2c1', SOAPBuildersInterop::MappingRegistry))
1095     arg.add(SOAP::Mapping.obj2soap('r0c2', SOAPBuildersInterop::MappingRegistry))
1096     arg.add(SOAP::Mapping.obj2soap('r1c2', SOAPBuildersInterop::MappingRegistry))
1097     arg.add(SOAP::Mapping.obj2soap('r2c2', SOAPBuildersInterop::MappingRegistry))
1098     argNormalized = [
1099       ['r0c0', 'r1c0', 'r2c0'],
1100       ['r0c1', 'r1c1', 'r2c1'],
1101       ['r0c2', 'r1c2', 'r2c2'],
1102    ]
1103
1104     var = drv.echo2DStringArray(arg)
1105     assert_equal(argNormalized, var)
1106   end
1107
1108   def test_echo2DStringArray_anyType_array
1109     log_test
1110     # ary2md converts Arry ((of Array)...) into M-D anyType Array
1111     arg = [
1112       ['r0c0', 'r0c1', 'r0c2'],
1113       ['r1c0', 'r1c1', 'r1c2'],
1114       ['r2c0', 'r0c1', 'r2c2'],
1115    ]
1116
1117     paramArg = SOAP::Mapping.ary2md(arg, 2, XSD::Namespace, XSD::AnyTypeLiteral, SOAPBuildersInterop::MappingRegistry)
1118     paramArg.type = XSD::QName.new('http://soapinterop.org/xsd', 'ArrayOfString2D')
1119     var = drv.echo2DStringArray(paramArg)
1120     assert_equal(arg, var)
1121   end
1122
1123   def test_echo2DStringArray_multi_ref
1124     log_test
1125     arg = SOAP::SOAPArray.new(XSD::QName.new('http://soapinterop.org/xsd', 'ArrayOfString2D'), 2, XSD::XSDString::Type)
1126     arg.size = [3, 3]
1127     arg.size_fixed = true
1128
1129     item = 'item'
1130     arg.add('r0c0')
1131     arg.add('r1c0')
1132     arg.add(item)
1133     arg.add('r0c1')
1134     arg.add('r1c1')
1135     arg.add('r2c1')
1136     arg.add(item)
1137     arg.add('r1c2')
1138     arg.add('r2c2')
1139     argNormalized = [
1140       ['r0c0', 'r1c0', 'item'],
1141       ['r0c1', 'r1c1', 'r2c1'],
1142       ['item', 'r1c2', 'r2c2'],
1143    ]
1144
1145     var = drv.echo2DStringArray(arg)
1146     assert_equal(argNormalized, var)
1147   end
1148
1149   def test_echo2DStringArray_multi_ref_idmatch
1150     log_test
1151     arg = SOAP::SOAPArray.new(XSD::QName.new('http://soapinterop.org/xsd', 'ArrayOfString2D'), 2, XSD::XSDString::Type)
1152     arg.size = [3, 3]
1153     arg.size_fixed = true
1154
1155     item = 'item'
1156     arg.add('r0c0')
1157     arg.add('r1c0')
1158     arg.add(item)
1159     arg.add('r0c1')
1160     arg.add('r1c1')
1161     arg.add('r2c1')
1162     arg.add(item)
1163     arg.add('r1c2')
1164     arg.add('r2c2')
1165
1166     var = drv.echo2DStringArray(arg)
1167     assert_equal(inspect_with_id(var[2][0]), inspect_with_id(var[0][2]))
1168   end
1169
1170   def test_echoNestedStruct
1171     log_test
1172     arg = SOAPStructStruct.new(1, 1.1, "a",
1173       SOAPStruct.new(2, 2.2, "b")
1174   )
1175     var = drv.echoNestedStruct(arg)
1176     assert_equal(arg, var)
1177   end
1178
1179   def test_echoNestedStruct_nil
1180     log_test
1181     arg = SOAPStructStruct.new(nil, nil, nil,
1182       SOAPStruct.new(nil, nil, nil)
1183   )
1184     var = drv.echoNestedStruct(arg)
1185     assert_equal(arg, var)
1186   end
1187
1188   def test_echoNestedStruct_multi_ref_idmatch
1189     log_test
1190     str1 = ""
1191     arg = SOAPStructStruct.new(1, 1.1, str1,
1192       SOAPStruct.new(2, 2.2, str1)
1193   )
1194     var = drv.echoNestedStruct(arg)
1195     assert_equal(inspect_with_id(var.varString), inspect_with_id(var.varStruct.varString))
1196   end
1197
1198   def test_echoNestedArray
1199     log_test
1200     arg = SOAPArrayStruct.new(1, 1.1, "a", StringArray["2", "2.2", "b"])
1201     var = drv.echoNestedArray(arg)
1202     assert_equal(arg, var)
1203   end
1204
1205   def test_echoNestedArray_anyType_array
1206     log_test
1207     arg = SOAPArrayStruct.new(1, 1.1, "a", ["2", "2.2", "b"])
1208     var = drv.echoNestedArray(arg)
1209     assert_equal(arg, var)
1210   end
1211
1212   def test_echoNestedArray_multi_ref
1213     log_test
1214     str = ""
1215     arg = SOAPArrayStruct.new(1, 1.1, str, StringArray["2", str, "b"])
1216     var = drv.echoNestedArray(arg)
1217     assert_equal(arg, var)
1218   end
1219
1220   def test_echoNestedArray_multi_ref_idmatch
1221     log_test
1222     str = ""
1223     arg = SOAPArrayStruct.new(1, 1.1, str, StringArray["2", str, "b"])
1224     var = drv.echoNestedArray(arg)
1225     assert_equal(inspect_with_id(var.varString), inspect_with_id(var.varArray[1]))
1226   end
1227 end
1228
1229 if $0 == __FILE__
1230   #name = ARGV.shift || 'localhost'
1231   #location = ARGV.shift || 'http://localhost:10080/'
1232   name = 'localhsot'; location = 'http://localhost:10080/'
1233   SOAPBuildersTest.setup(name, location)
1234 end
Note: See TracBrowser for help on using the browser.