1#!/bin/env perl 
2
3BEGIN {
4  unless(grep /blib/, @INC) {
5    chdir 't' if -d 't';
6    unshift @INC, '../lib' if -d '../lib';
7  }
8}
9
10use strict;
11use Test;
12
13use SOAP::Lite
14  on_fault => sub {
15    my $soap = shift;
16    my $res = shift;
17    ref $res ? warn(join " ", "SOAP FAULT:", $res->faultstring, "\n") 
18             : warn(join " ", "TRANSPORT ERROR:", $soap->transport->status, "\n");
19    return new SOAP::SOM;
20  }
21;
22
23my($a, $s, $r);
24
25# updated on 2001/08/17
26# http://services.xmethods.net:80/soap/servlet/rpcrouter
27my $proxy = 'http://nagoya.apache.org:5049/axis/servlet/AxisServlet';
28
29# ------------------------------------------------------
30use SOAP::Test;
31
32$s = SOAP::Lite->uri('http://something/somewhere')->proxy($proxy)->on_fault(sub{});
33eval { $s->transport->timeout($SOAP::Test::TIMEOUT = $SOAP::Test::TIMEOUT) };
34$r = $s->test_connection;
35
36unless (defined $r && defined $r->envelope) {
37  print "1..0 # Skip: ", $s->transport->status, "\n"; 
38  exit;
39}
40# ------------------------------------------------------
41
42plan tests => 15;
43
44{
45# XMethod's JavaSOAP server (http://xmethods.net/detail.html?id=11)
46  print "XMethod's JavaSOAP server test(s)...\n";
47  $s = SOAP::Lite 
48    -> uri('http://soapinterop.org/')
49    -> proxy($proxy)
50  ;
51
52  $a = 'SOAP::Lite';
53  $r = $s->echoString($a)->result;
54  ok($r eq $a); 
55
56  $a = ['a', 'b'];
57  $r = $s->echoStringArray($a)->result;
58  ok(ref $r && join('', @$r) eq join('', @$a)); 
59
60  $a = 11;
61  $r = $s->echoInteger($a)->result;
62  ok($r == $a); 
63
64  $a = [1, 3, 5];
65  $r = $s->echoIntegerArray($a)->result;
66  ok(ref $r && join('', @$r) == join('', @$a)); 
67
68  $a = 11.02;
69  $r = $s->echoFloat($a)->result;
70  ok($r == $a); 
71
72  $a = [1.1, 3.3, 5.5];
73  $r = $s->echoFloatArray($a)->result;
74  ok(ref $r && join('', @$r) eq join('', @$a)); 
75
76  # you may specify URI manually (but see maptype() below)
77  $a = {varString => 'b', varInt => 2, varFloat => 95.7};
78  $r = $s->echoStruct(
79    SOAP::Data->type('xx:SOAPStruct' => $a)
80              ->attr({'xmlns:xx' => 'http://soapinterop.org/xsd'})
81  )->result;
82  ok(ref $r && join('', sort values %$r) eq join('', sort values %$a)); 
83
84  # specify mapping to URI
85  $s->maptype({SOAPStruct => 'http://soapinterop.org/xsd'});
86
87  $a = {varString => 'b', varInt => 2, varFloat => 95.7};
88  $r = $s->echoStruct($a)->result;
89  ok(ref $r && join('', sort values %$r) eq join('', sort values %$a)); 
90
91  $a = {varString => 'b', varInt => 2, varFloat => 95.7};
92  $r = $s->echoStruct(SOAP::Data->name(something => $a))->result;
93  ok(ref $r && join('', sort values %$r) eq join('', sort values %$a)); 
94
95  $a = [
96    {varString => 'b', varInt => 2, varFloat => 95.7}, 
97    {varString => 'c', varInt => 3, varFloat => 85.7},
98    {varString => 'd', varInt => 4, varFloat => 75.7},
99  ];
100  $r = $s->echoStructArray($a)->result;
101  ok(ref $r && join('', map { sort values %$_ } @$r) eq join('', map { sort values %$_ } @$a)); 
102
103  $a = [
104    {varString => 'b', varInt => 2, varFloat => 95.7}, 
105    {varString => 'c', varInt => 3, varFloat => 85.7},
106    {varString => 'd', varInt => 4, varFloat => 75.7},
107  ];
108  $r = $s->echoStructArray(SOAP::Data->name(something => $a))->result;
109  ok(ref $r && join('', map { sort values %$_ } @$r) eq join('', map { sort values %$_ } @$a)); 
110
111  my $key = "\0\1";
112  my $value = 456;
113
114  { local $^W;
115    # implicit, warning with -w
116    $a = $s->echoMap({a => 123, $key => $value})->result;
117    ok($a->{$key} == $value);
118  }
119
120  # explicit
121  $a = $s->echoMap(SOAP::Data->type(map => {a => 123, $key => $value}))->result;
122  ok($a->{$key} == $value);
123
124  { local $^W;
125    # implicit, warning with -w
126    $a = $s->echoMapArray([{a => 123, $key => $value}, {b => 123, $key => 789}])->result;
127    ok($a->[0]->{$key} == $value);
128  }
129
130  # explicit
131  $a = $s->echoMapArray([SOAP::Data->type(map => {a => 123, $key => $value}), SOAP::Data->type(map => {b => 123, $key => 789})])->result;
132  ok($a->[0]->{$key} == $value);
133}
134