Mercurial > pub > Impl
comparison _test/Test/DOM/Schema.pm @ 24:7f00786f8210
Первая рабочая реазизация схемы и навигаторов
author | Sergey |
---|---|
date | Mon, 05 Oct 2009 00:48:49 +0400 |
parents | 1ca530e5c9c5 |
children | 6d33f75c6e1f |
comparison
equal
deleted
inserted
replaced
23:716b287d4795 | 24:7f00786f8210 |
---|---|
1 package Test::DOM::Schema; | 1 package Test::DOM::Schema; |
2 use strict; | 2 use strict; |
3 use warnings; | 3 use warnings; |
4 | 4 |
5 use base qw(IMPL::Test::Unit); | 5 use base qw(IMPL::Test::Unit); |
6 use IMPL::Test qw(test failed); | 6 use IMPL::Test qw(test failed shared); |
7 use IMPL::Class::Property; | |
7 | 8 |
8 __PACKAGE__->PassThroughArgs; | 9 __PACKAGE__->PassThroughArgs; |
9 | 10 |
10 require IMPL::DOM::Schema; | 11 require IMPL::DOM::Schema; |
12 | |
13 BEGIN { | |
14 shared public property SampleSchema => prop_all; | |
15 } | |
11 | 16 |
12 test GetMetaSchema => sub { | 17 test GetMetaSchema => sub { |
13 my $metaSchema = IMPL::DOM::Schema->MetaSchema(); | 18 my $metaSchema = IMPL::DOM::Schema->MetaSchema(); |
14 }; | 19 }; |
15 | 20 |
19 if (my @errors = $metaSchema->Validate($metaSchema)) { | 24 if (my @errors = $metaSchema->Validate($metaSchema)) { |
20 failed "Self verification failed", map $_ ? $_->Message : 'unknown', @errors; | 25 failed "Self verification failed", map $_ ? $_->Message : 'unknown', @errors; |
21 } | 26 } |
22 }; | 27 }; |
23 | 28 |
29 test VerifyCorrectSchema => sub { | |
30 my ($this) = @_; | |
31 my $metaSchema = IMPL::DOM::Schema->MetaSchema(); | |
32 | |
33 my $schema = new IMPL::DOM::Schema; | |
34 $schema->appendRange( | |
35 IMPL::DOM::Schema::ComplexNode->new( name => 'personInfo' )->appendRange( | |
36 IMPL::DOM::Schema::NodeSet->new()->appendRange( | |
37 new IMPL::DOM::Schema::SimpleNode( name => 'firstName' ), | |
38 new IMPL::DOM::Schema::SimpleNode( name => 'lastName' ), | |
39 new IMPL::DOM::Schema::ComplexNode( name => 'address' )->appendRange( | |
40 IMPL::DOM::Schema::NodeSet->new()->appendRange( | |
41 new IMPL::DOM::Schema::SimpleNode( name => 'street' ), | |
42 new IMPL::DOM::Schema::SimpleNode( name => 'line', minOccur => 0 ) | |
43 ) | |
44 ) | |
45 ) | |
46 ) | |
47 ); | |
48 | |
49 $this->SampleSchema($schema); | |
50 | |
51 my @errors = $metaSchema->Validate($schema); | |
52 failed "Failed to validate a wellformed schema", map $_->Message, @errors if @errors; | |
53 }; | |
54 | |
55 test VerifyWrongSchema => sub { | |
56 my $metaSchema = IMPL::DOM::Schema->MetaSchema(); | |
57 | |
58 my $schema = new IMPL::DOM::Schema; | |
59 $schema->appendRange( | |
60 IMPL::DOM::Schema::ComplexNode->new( name => 'personInfo' )->appendRange( | |
61 new IMPL::DOM::Schema::ComplexType( type => 'someType' ), | |
62 new IMPL::DOM::Schema::SimpleNode( name => 'lastName' ), | |
63 new IMPL::DOM::Schema::ComplexNode( name => 'address' )->appendRange( | |
64 new IMPL::DOM::Schema::SimpleNode( name => 'street' ), | |
65 new IMPL::DOM::Schema::SimpleNode( name => 'line' ) | |
66 ) | |
67 ) | |
68 ); | |
69 | |
70 my @errors = $metaSchema->Validate($schema); | |
71 failed "A not wellformed schema validated correctly" unless @errors; | |
72 }; | |
73 | |
74 test ValidateCorrectData => sub { | |
75 my ($this) = @_; | |
76 | |
77 my $data = IMPL::DOM::Node->new(nodeName => 'personInfo')->appendRange( | |
78 IMPL::DOM::Node->new(nodeName => 'firstName', nodeValue => 'John'), | |
79 IMPL::DOM::Node->new(nodeName => 'lastName', nodeValue => 'Smith'), | |
80 IMPL::DOM::Node->new(nodeName => 'address')->appendRange( | |
81 IMPL::DOM::Node->new(nodeName => 'street', nodeValue => 'main road') | |
82 ) | |
83 ); | |
84 | |
85 if (my @errors = $this->SampleSchema->Validate($data)) { | |
86 failed "Failed to validate a correct data", map $_->Message , @errors; | |
87 } | |
88 }; | |
89 | |
90 test ValidateWrongData => sub { | |
91 my ($this) = @_; | |
92 | |
93 my $data = IMPL::DOM::Node->new(nodeName => 'personInfo')->appendRange( | |
94 IMPL::DOM::Node->new(nodeName => 'firstName', nodeValue => 'John'), | |
95 IMPL::DOM::Node->new(nodeName => 'address')->appendRange( | |
96 IMPL::DOM::Node->new(nodeName => 'street', nodeValue => 'main road') | |
97 ) | |
98 ); | |
99 | |
100 failed "A wrong data validated corretly" unless $this->SampleSchema->Validate($data); | |
101 }; | |
102 | |
103 | |
24 1; | 104 1; |