#!perl -T use Test::More tests => 6; use strict; use Data::Dumper; BEGIN { use_ok( 'Data::Validate::XSD' ); use_ok( 'Data::Validate::Structure' ); } my $structure = { root => [ { name => 'input', type => 'news' }, ], complexTypes => { news => [ { name => 'articles', type => 'article', maxOccurs => 4, minOccurs => 1 }, ], article => [ [ { name => 'title', type => 'string' }, [ { name => 'name', type => 'string' }, { name => 'author', type => 'string' }, ] ], { name => 'content', type => 'string' }, { name => 'tags', type => 'tag', maxOccurs => 'unbounded' }, ], tag => [ { name => 'name', type => 'string' }, { name => 'count', type => 'integer' }, ] }, }; # Odd should pass, Even should fail. my @dataToTest = ( { input => { articles => [ { title => 'Correct News', content => 'Foo', tags => [ { name => 'tag1', count => '2' }, { name => 'tag2', count => '0' }, ], }, { name => 'Correct News', author => 'This guy I Know', content => 'Bar', tags => { name => 'tag3', count => '9' }, }, ] } },{ input => { articles => { author => 'This guy', } } }, ); my @errors = ( undef, { 'input' => { 'articles' => { 'content' => 13, 'tags' => 13 } } }, ); my $validator = Data::Validate::XSD->new( $structure, $ENV{'DEBUG'} ); ok( ref($validator) eq 'Data::Validate::XSD', 'Validator Object' ); my $even; foreach my $data (@dataToTest) { my $errors = $validator->validate( $data ); my $against = shift @errors; # test booliean if($even) { ok( defined($errors), 'Errors Total' ); ok( (Data::Validate::Structure->new( $errors ) eq Data::Validate::Structure->new( $against )), 'Errors Structure' ); } else { ok( not($errors), 'Passes Total' ); } $even = not $even; } 1;