#!/usr/bin/perl -Tw use Test::More tests => 20; use warnings; $^W = 1; use strict; BEGIN { use_ok( 'RayApp' ); } my $rayapp = new RayApp; isa_ok($rayapp, 'RayApp'); my $dsd; ok($dsd = $rayapp->load_dsd_string(' <_param name="jezek" /> <_param prefix="xx" /> <_param name="id" multiple="yes"/> <_param name="int" type="int"/> <_param name="num" type="num"/> '), 'Load DSD with parameters'); is($rayapp->errstr, undef, 'Errstr should not be set'); is($dsd->validate_parameters( [ 'jezek' => 'krtek', 'xx-1' => '14', 'xx-2' => 34, 'int' => -56, 'num' => '+13.6', 'id' => 14, 'id' => 'fourteen', ] ), 1, 'Check valid parameters, should not fail.'); is($dsd->errstr, undef, 'Errstr should not be set'); is($dsd->validate_parameters( [ 'jezek1' => 'krtek', 'xx-1' => '14', 'xx-1' => 34, 'int' => 'x-56', 'num' => 'four', ] ), undef, 'Check valid parameters, should not fail.'); is($dsd->errstr, qq!Parameter 'int' has non-integer value ['x-56']\nUnknown parameter 'jezek1'='krtek'\nParameter 'num' has non-numeric value ['four']\nParameter 'xx-1' has multiple values ['14', '34']\n!, 'Errstr should not be set'); ok($dsd = $rayapp->load_dsd("t/complex_param1.xml"), 'Loading correct DSD t/complex_param1.xml'); is($rayapp->errstr, undef, 'Checking that there was no error'); my @parameters = ( 'id' => 123, 'action' => 'save', 'ns[1]/id' => 89, 'ns[1]/name' => 'First', 'ns[1]/ip[1]/type' => 'ipv4', 'ns[1]/ip[1]/value' => '127.0.0.1', 'ns[1]/ip[3]/type' => 'ipv1', 'ns[1]/ip[3]/value' => 1, 'ns[3]/name' => 'Third', ); is($dsd->validate_parameters( \@parameters), 1, 'Check valid parameters, should not fail.'); is($dsd->errstr, undef, 'Errstr should not be set'); is_deeply(\@parameters, [ 'id', 123, 'action', 'save', 'ns[1]/id', 89, 'ns[1]/name', 'First', 'ns[1]/ip[1]/type', 'ipv4', 'ns[1]/ip[1]/value', '127.0.0.1', 'ns[1]/ip[3]/type', 'ipv1', 'ns[1]/ip[3]/value', 1, 'ns[3]/name', 'Third', 'ns', [ { 'ip' => [ { 'value' => [ '127.0.0.1' ], 'type' => [ 'ipv4' ] }, { 'value' => [ 1 ], 'type' => [ 'ipv1' ] } ], 'name' => [ 'First' ], 'id' => [ 89 ] }, { 'name' => [ 'Third' ] } ] ], 'After sucessfull validation, parameters should be altered'); my %parameters = ( 'id' => 123, 'action' => 'save', 'ns[1]/id' => 89, 'ns[1]/name' => 'First', 'ns[1]/ip[1]/type' => 'ipv4', 'ns[1]/ip[1]/value' => '127.0.0.1', 'ns[1]/ip[3]/type' => 'ipv1', 'ns[1]/ip[3]/value' => 1, 'ns[3]/name' => 'Third', ); is($dsd->validate_parameters( \%parameters), 1, 'Check valid parameters, should not fail.'); is($dsd->errstr, undef, 'Errstr should not be set'); is_deeply(\%parameters, { 'ns[1]/ip[3]/type' => 'ipv1', 'ns[3]/name' => 'Third', 'ns[1]/id' => 89, 'ns' => [ { 'ip' => [ { 'value' => [ '127.0.0.1' ], 'type' => [ 'ipv4' ] }, { 'value' => [ 1 ], 'type' => [ 'ipv1' ] } ], 'name' => [ 'First' ], 'id' => [ 89 ] }, { 'name' => [ 'Third' ] } ], 'ns[1]/ip[3]/value' => 1, 'action' => 'save', 'id' => 123, 'ns[1]/name' => 'First', 'ns[1]/ip[1]/type' => 'ipv4', 'ns[1]/ip[1]/value' => '127.0.0.1' }, 'After sucessfull validation, parameters should be altered'); ok($dsd = $rayapp->load_dsd("t/complex_param1.xml"), 'Loading correct DSD t/complex_param1.xml'); is($rayapp->errstr, undef, 'Checking that there was no error'); is($dsd->validate_parameters( [ 'id' => 123, 'action' => 'save', 'ns[1]/id' => 'Name', 'ns[1]/name' => 'First', 'ns[1]/ip[1]/type[4]' => 'ipv4', 'ns[3]/name' => 'Third', ] ), undef, 'Check valid parameters, should not fail.'); is($dsd->errstr, qq!Parameter 'ns[1]/id' has non-integer value ['Name']\nParameter 'ns[1]/ip[1]/type[4]' does not match structure parameter name at 'type[4]'\n!, 'Errstr should be set');