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

use warnings;
use strict;

use lib 'lib','t';
use TestTools;

use XML::Compile::Schema;
use XML::Compile::Tester;

use Test::More tests => 92;

set_compile_defaults
    elements_qualified => 'NONE';

my $schema   = XML::Compile::Schema->new( <<__SCHEMA );
<schema targetNamespace="$TestNS"
        xmlns="$SchemaNS"
        xmlns:me="$TestNS">

<simpleType name="t1">
  <list itemType="int" />
</simpleType>

<element name="test1" type="me:t1" />

<simpleType name="t2">
  <list>
    <simpleType>
      <restriction base="int" />
    </simpleType>
  </list>
</simpleType>

<element name="test2" type="me:t2" />

<element name="test3">
  <simpleType>
    <restriction base="me:t2">
      <enumeration value="1 2" />
      <enumeration value="2 1" />
    </restriction>
  </simpleType>
</element>

<element name="test4">
  <simpleType>
    <restriction base="NMTOKENS">
      <enumeration value="3 4" />
      <enumeration value="5 6" />
    </restriction>
  </simpleType>
</element>

</schema>
__SCHEMA

ok(defined $schema);

test_rw($schema, test1 => <<__XML, [1]);
<test1>1</test1>
__XML

test_rw($schema, test1 => <<__XML, [2, 3]);
<test1>2 3</test1>
__XML

test_rw($schema, test1 => <<__XML, [4, 5, 6]);
<test1> 4
  5\t  6 </test1>
__XML

test_rw($schema, test2 => <<__XML, [1]);
<test2>1</test2>
__XML

test_rw($schema, test2 => <<__XML, [2, 3]);
<test2>2 3</test2>
__XML

test_rw($schema, test2 => <<__XML, [4, 5, 6]);
<test2> 4
  5\t  6 </test2>
__XML


# restriction on simple-list base

test_rw($schema, test3 => <<__XML, [1, 2]);
<test3>1 2</test3>
__XML

test_rw($schema, test3 => <<__XML, [2, 1]);
<test3>2 1</test3>
__XML

my $error = error_r($schema, test3 => '<test3>2 2</test3>');
is($error, "invalid enumerate `2 2' at {http://test-types}test3#facet");

$error = error_w($schema, test3 => [3, 3]);
is($error, "invalid enumerate `3 3' at {http://test-types}test3#facet");

# predefined

test_rw($schema, test4 => <<__XML, [3, 4]);
<test4>3 4</test4>
__XML

$error = error_w($schema, test4 => [3, 3]);
is($error, "invalid enumerate `3 3' at {http://test-types}test4#facet");

# element has attributes as well

my $w1 = writer_create($schema, "HASH param" => "{$TestNS}test1");
my $x1 = writer_test($w1, {_ => [7,8]});

compare_xml($x1->toString, <<'_XML');
<test1>7 8</test1>
_XML