#!/usr/bin/perl
use warnings;
use strict;
use lib 'lib','t';
use TestTools;
use XML::Compile::Schema;
use XML::Compile::Tester;
use Test::More tests => 95;
set_compile_defaults
elements_qualified => 'NONE';
my $schema = XML::Compile::Schema->new( <<__SCHEMA__ );
__SCHEMA__
ok(defined $schema);
## test 1
my %t1 = (t1_a => 10, t1_b => 9, a1_a => 11, a1_b => 12);
test_rw($schema, test1 => <<__XML, \%t1);
10
9
__XML
my %t1_b = (t1_a => 20, t1_b => 21, a1_b => 23);
test_rw($schema, test1 => <<__XML, \%t1_b);
20
21
__XML
my $error = error_r($schema, test1 => <<__XML);
25
26
__XML
is($error, "attribute `a1_b' is required at {http://test-types}test1/\@a1_b");
my %t1_c = (a1_b => 24, t1_a => 25);
$error = error_w($schema, test1 => \%t1_c);
is($error, "required value for element `t1_b' missing at {http://test-types}test1");
## test 2 attributeGroup
my %t2_a = (a2_a => 30, a2_b => 31, a2_c => 29, t2_b => 100);
test_rw($schema, test2 => <<__XML, \%t2_a);
100
__XML
my %t2_b = (a2_a => 32, a2_b => 33, a2_c => 34, a2_d => 35
, t2_a => 99, t2_b => 101);
test_rw($schema, test2 => <<__XML, \%t2_b);
99101
__XML
$error = error_r($schema, test2 => <<__XML);
102
__XML
is($error, "attribute `a2_e' is prohibited at {http://test-types}test2/\@a2_e");
$error = error_w($schema, test2
=> {a2_c => 29, a2_e => 666, t2_b => 77} );
is($error, "attribute `a2_e' is prohibited at {http://test-types}test2/\@a2_e");
test_rw($schema, test3 => '', { a3 => 41 });
### toplevel attributes
# test 4
test_rw($schema, test4 => '', { a4 => 42 });
test_rw($schema, a4 => XML::LibXML::Attr->new('a4', 43), 43, ' a4="43"');
# test 5
test_rw($schema, test5 => '', { a5 => 'only-one' });
$error = error_r($schema, test5 => '');
is($error, "invalid enumerate `not-two' at {http://test-types}test5#facet");
test_rw($schema, a5 => XML::LibXML::Attr->new(a5 => 'only-one')
, 'only-one', ' a5="only-one"');