The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use lib qw(../lib);
use XMLRPC::PurePerl;
use Data::Dumper;
use Test;

BEGIN { plan tests => 8 }

print "Testing decode functions\n"; 
my $tests = {
  'string'  => { 'out' => 'foo', 'in' => '<value><string>foo</string></value>' },
  'array'   => { 'out' => [], 'in' => "<value><array><data></data></array></value>" },
  'hash'    => { 'out' => {}, 'in' => "<value><struct></struct></value>" },
  'date'    => { 'out' => XMLRPC::PurePerl->date("20060302"), 'in' => "<value><dateTime.iso8601>20060302T00:00:00</dateTime.iso8601></value>" },
  'double'  => { 'out' => 123.123, 'in' => "<value><double>123.123</double></value>" },
  'i4'      => { 'out' => 123, 'in' => "<value><i4>123</i4></value>" },
  'boolean' => { 'out' => XMLRPC::PurePerl->boolean(1), 'in' => "<value><boolean>1</boolean></value>" },
  'base64'  => { 'out' => XMLRPC::PurePerl->base64("ABC102="), 'in' => "<value><base64>ABC102=</base64></value>" }
};

foreach my $k ( sort(keys(%{$tests})) ) {
  my $res = XMLRPC::PurePerl->decode_variable( $tests->{$k}{'in'} );
  if ( ref($res) && ref($res) eq ref($tests->{$k}{'out'}) || $res eq $tests->{$k}{'out'} ) {
    ok(1);
  } else {
    ok(0);
  }
}