1#!/usr/bin/perl -w
2package Pod::WSDL::Method;
3
4use Test::More tests => 21;
5BEGIN {use_ok('Pod::WSDL::Method')}
6use strict;
7use warnings;
8use Pod::WSDL::Return;
9use Pod::WSDL::Param;
10use Pod::WSDL::Doc;
11use Pod::WSDL::Fault;
12use Pod::WSDL::Writer;
13
14my $m;
15
16eval {$m = new Pod::WSDL::Method(writer => 1);};
17ok($@ =~ /a method needs a name/i, 'new dies, if it does not get a name');
18
19eval {$m = new Pod::WSDL::Method(name => 'bla');};
20ok($@ =~ /a method needs a writer/i, 'new dies, if it does not get a writer');
21
22my $ret1 = new Pod::WSDL::Return('_RETURN $string This returns blah ...');
23my $ret2 = new Pod::WSDL::Return('_RETURN $boolean This returns blah blah ...');
24my $doc1 = new Pod::WSDL::Doc('_DOC This method is for blah ...');
25my $doc2 = new Pod::WSDL::Doc('_DOC This method is for blah blah ...');
26my $par1 = new Pod::WSDL::Param('_IN myParam $string This parameter is for blah ...');
27my $par2 = new Pod::WSDL::Param('_OUT yourParam $string This parameter is for blah ...');
28my $fau1 = new Pod::WSDL::Fault('_FAULT My::Fault This happens if something happens');
29my $fau2 = new Pod::WSDL::Fault('_FAULT My::Fault This happens if nothing happens');
30
31$m = new Pod::WSDL::Method(name => "myMethod", return => $ret1, doc => $doc1, params => [$par1], faults => [$fau1], writer => new Pod::WSDL::Writer);
32
33ok($m->name eq 'myMethod', 'Retrieving name works');
34ok($m->oneway == 0, 'Default for oneway set correctly');
35ok((ref $m->return eq 'Pod::WSDL::Return' and $m->return->type eq 'string'), 'Retrieving return works');
36ok((ref $m->doc eq 'Pod::WSDL::Doc' and $m->doc->descr eq 'This method is for blah ...'), 'Retrieving doc works');
37ok((ref $m->params->[0] eq 'Pod::WSDL::Param' and $m->params->[0]->name eq 'myParam'), 'Retrieving param works');
38ok((ref $m->faults->[0] eq 'Pod::WSDL::Fault' and $m->faults->[0]->type eq 'My::Fault'), 'Retrieving fault works');
39ok(ref $m->writer eq 'Pod::WSDL::Writer', 'Pod::WSDL::Writer correctly initialized');
40
41$m->return($ret2);
42$m->doc($doc2);
43
44ok((ref $m->return eq 'Pod::WSDL::Return' and $m->return->type eq 'boolean'), 'Setting return works');
45ok((ref $m->doc eq 'Pod::WSDL::Doc' and $m->doc->descr eq 'This method is for blah blah ...'), 'Setting doc works');
46
47$m->addParam($par2);
48$m->addFault($fau2);
49
50ok((ref $m->params->[0] eq 'Pod::WSDL::Param' and $m->params->[0]->name eq 'myParam'), 'Adding param does not influence existing params');
51ok((ref $m->faults->[0] eq 'Pod::WSDL::Fault' and $m->faults->[0]->type eq 'My::Fault'), 'Adding fault does not influence existing faults');
52ok((ref $m->params->[1] eq 'Pod::WSDL::Param' and $m->params->[1]->name eq 'yourParam'), 'Setting param works');
53ok((ref $m->faults->[1] eq 'Pod::WSDL::Fault' and $m->faults->[1]->descr eq 'This happens if nothing happens'), 'Setting fault works');
54
55$m->oneway(1);
56ok($m->oneway == 1, 'Setting param oneway works');
57
58$m->oneway(0);
59ok($m->oneway == 0, 'Unsetting param oneway works');
60
61eval {
62	$m->name('foo');
63};
64
65{
66	no warnings;
67	ok($@ == undef, 'Renaming method is forbidden.');
68}
69
70ok($m->requestName eq 'fooRequest', 'Method requestName() works');
71ok($m->responseName eq 'fooResponse', 'Method responseName() works');
72