Mercurial > pub > Impl
diff _test/Test/DOM/Schema.pm @ 24:7f00786f8210
Первая рабочая реазизация схемы и навигаторов
author | Sergey |
---|---|
date | Mon, 05 Oct 2009 00:48:49 +0400 |
parents | 1ca530e5c9c5 |
children | 6d33f75c6e1f |
line wrap: on
line diff
--- a/_test/Test/DOM/Schema.pm Wed Sep 30 17:43:52 2009 +0400 +++ b/_test/Test/DOM/Schema.pm Mon Oct 05 00:48:49 2009 +0400 @@ -3,12 +3,17 @@ use warnings; use base qw(IMPL::Test::Unit); -use IMPL::Test qw(test failed); +use IMPL::Test qw(test failed shared); +use IMPL::Class::Property; __PACKAGE__->PassThroughArgs; require IMPL::DOM::Schema; +BEGIN { + shared public property SampleSchema => prop_all; +} + test GetMetaSchema => sub { my $metaSchema = IMPL::DOM::Schema->MetaSchema(); }; @@ -21,4 +26,79 @@ } }; +test VerifyCorrectSchema => sub { + my ($this) = @_; + my $metaSchema = IMPL::DOM::Schema->MetaSchema(); + + my $schema = new IMPL::DOM::Schema; + $schema->appendRange( + IMPL::DOM::Schema::ComplexNode->new( name => 'personInfo' )->appendRange( + IMPL::DOM::Schema::NodeSet->new()->appendRange( + new IMPL::DOM::Schema::SimpleNode( name => 'firstName' ), + new IMPL::DOM::Schema::SimpleNode( name => 'lastName' ), + new IMPL::DOM::Schema::ComplexNode( name => 'address' )->appendRange( + IMPL::DOM::Schema::NodeSet->new()->appendRange( + new IMPL::DOM::Schema::SimpleNode( name => 'street' ), + new IMPL::DOM::Schema::SimpleNode( name => 'line', minOccur => 0 ) + ) + ) + ) + ) + ); + + $this->SampleSchema($schema); + + my @errors = $metaSchema->Validate($schema); + failed "Failed to validate a wellformed schema", map $_->Message, @errors if @errors; +}; + +test VerifyWrongSchema => sub { + my $metaSchema = IMPL::DOM::Schema->MetaSchema(); + + my $schema = new IMPL::DOM::Schema; + $schema->appendRange( + IMPL::DOM::Schema::ComplexNode->new( name => 'personInfo' )->appendRange( + new IMPL::DOM::Schema::ComplexType( type => 'someType' ), + new IMPL::DOM::Schema::SimpleNode( name => 'lastName' ), + new IMPL::DOM::Schema::ComplexNode( name => 'address' )->appendRange( + new IMPL::DOM::Schema::SimpleNode( name => 'street' ), + new IMPL::DOM::Schema::SimpleNode( name => 'line' ) + ) + ) + ); + + my @errors = $metaSchema->Validate($schema); + failed "A not wellformed schema validated correctly" unless @errors; +}; + +test ValidateCorrectData => sub { + my ($this) = @_; + + my $data = IMPL::DOM::Node->new(nodeName => 'personInfo')->appendRange( + IMPL::DOM::Node->new(nodeName => 'firstName', nodeValue => 'John'), + IMPL::DOM::Node->new(nodeName => 'lastName', nodeValue => 'Smith'), + IMPL::DOM::Node->new(nodeName => 'address')->appendRange( + IMPL::DOM::Node->new(nodeName => 'street', nodeValue => 'main road') + ) + ); + + if (my @errors = $this->SampleSchema->Validate($data)) { + failed "Failed to validate a correct data", map $_->Message , @errors; + } +}; + +test ValidateWrongData => sub { + my ($this) = @_; + + my $data = IMPL::DOM::Node->new(nodeName => 'personInfo')->appendRange( + IMPL::DOM::Node->new(nodeName => 'firstName', nodeValue => 'John'), + IMPL::DOM::Node->new(nodeName => 'address')->appendRange( + IMPL::DOM::Node->new(nodeName => 'street', nodeValue => 'main road') + ) + ); + + failed "A wrong data validated corretly" unless $this->SampleSchema->Validate($data); +}; + + 1;