1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
#!/usr/bin/env perl
# Test key rewrite
use warnings;
use strict;
use lib 'lib','t';
use TestTools;
use XML::Compile::Schema;
use XML::Compile::Tester;
#use Log::Report mode => 3;
use Test::More tests => 44;
my $schema = XML::Compile::Schema->new( <<__SCHEMA__ );
<schema
targetNamespace="$TestNS"
xmlns="$SchemaNS"
xmlns:me="$TestNS">
<element name="test1">
<complexType>
<sequence>
<element name="t1-E1" type="int"/>
<element name="t1E2" type="int"/>
<element name="t1-e3" type="int"/>
</sequence>
<attribute name="t1-A1" type="int"/>
<attribute name="t1A2" type="int"/>
<attribute name="t1-a3" type="int"/>
</complexType>
</element>
<!-- to be used in substitutionGroup tests-->
<element name="t2a" type="int" />
<element name="t2b" substitutionGroup="me:t2a" />
<element name="test2">
<complexType>
<sequence>
<element ref="me:t2a" />
</sequence>
</complexType>
</element>
</schema>
__SCHEMA__
ok(defined $schema);
### stacked rewrites
my %rewrite_table = ( 't1-e3' => 'Tn3', 't1-a3' => 'Ta3' );
sub rewrite_dash { $_[1] =~ s/\-/_/g; $_[1] };
sub rewrite_lowercase { lc $_[1] }
set_compile_defaults
elements_qualified => 'NONE'
, key_rewrite => [ \%rewrite_table, \&rewrite_dash, \&rewrite_lowercase ];
my %t1a = (t1_e1 => 42, t1e2 => 43, tn3 => 44,
t1_a1 => 45, t1a2 => 46, ta3 => 47);
test_rw($schema, test1 => <<__XML, \%t1a);
<test1 t1-A1="45" t1A2="46" t1-a3="47">
<t1-E1>42</t1-E1>
<t1E2>43</t1E2>
<t1-e3>44</t1-e3>
</test1>
__XML
### pre-defined simplify
set_compile_defaults
elements_qualified => 'NONE'
, key_rewrite => 'SIMPLIFIED';
my %t1b = ( t1_e1 => 45, t1e2 => 46, t1_e3 => 47
, t1_a1 => 48, t1a2 => 49, t1_a3 => 50);
test_rw($schema, test1 => <<__XML, \%t1b);
<test1 t1-A1="48" t1A2="49" t1-a3="50">
<t1-E1>45</t1-E1>
<t1E2>46</t1E2>
<t1-e3>47</t1-e3>
</test1>
__XML
### pre-defined prefixed
set_compile_defaults
elements_qualified => 'NONE'
, key_rewrite => 'PREFIXED'
, prefixes => [ me => $TestNS ]
, elements_qualified => 1
, include_namespaces => 1;
my %t3 = ('me_t1-E1' => 50, 'me_t1E2' => 51, 'me_t1-e3' => 52);
test_rw($schema, test1 => <<__XML, \%t3);
<me:test1 xmlns:me="$TestNS">
<me:t1-E1>50</me:t1-E1>
<me:t1E2>51</me:t1E2>
<me:t1-e3>52</me:t1-e3>
</me:test1>
__XML
### example from the manual-page
set_compile_defaults
key_rewrite => [ qw/PREFIXED SIMPLIFIED/ ]
, prefixes => [ mine => $TestNS ]
, elements_qualified => 'ALL';
my $r4 = reader_create $schema, 'changed prefix', "{$TestNS}test1";
my $x4 = $r4->( <<__XML );
<test1 xmlns="$TestNS">
<t1-E1>60</t1-E1>
<t1E2>61</t1E2>
<t1-e3>62</t1-e3>
</test1>
__XML
is_deeply($x4, {mine_t1_e1 => 60, mine_t1e2 => 61, mine_t1_e3 => 62});
### substitutionGroup
set_compile_defaults
key_rewrite => sub { uc $_[1] }
, include_namespaces => 1
, elements_qualified => 'ALL';
test_rw($schema, test2 => <<__XML, {T2A => 70});
<test2 xmlns="$TestNS">
<t2a>70</t2a>
</test2>
__XML
test_rw($schema, test2 => <<__XML, {T2B => 71});
<test2 xmlns="$TestNS">
<t2b>71</t2b>
</test2>
__XML
my $out = templ_perl $schema, "{$TestNS}test2"
, key_rewrite => sub {uc $_[1]}, skip_header => 1;
# T2B "borrows" type of base type
is($out, <<'__TEMPL');
# Describing complex x0:test2
# {http://test-types}test2
# is an unnamed complex
{ # sequence of T2A
# substitutionGroup x0:t2a
# T2A xs:int
# T2B xs:int
T2A => { T2A => 42 }, }
__TEMPL
|