Mercurial > pub > Impl
view _test/Test/DOM/Schema.pm @ 118:79cdd6c86409
JSON support (experimental)
author | wizard |
---|---|
date | Mon, 07 Jun 2010 08:21:26 +0400 |
parents | d8dc6cad3f55 |
children | 4267a2ac3d46 |
line wrap: on
line source
package Test::DOM::Schema; use strict; use warnings; use base qw(IMPL::Test::Unit); use IMPL::Test qw(test failed shared); use IMPL::Class::Property; __PACKAGE__->PassThroughArgs; use IMPL::DOM::Schema; use IMPL::DOM::Navigator::Builder; BEGIN { shared public property SampleSchema => prop_all; } test GetMetaSchema => sub { my $metaSchema = IMPL::DOM::Schema->MetaSchema(); }; test AutoverifyMetaSchema => sub { my $metaSchema = IMPL::DOM::Schema->MetaSchema(); if (my @errors = $metaSchema->Validate($metaSchema)) { failed "Self verification failed", map $_ ? $_->Message : 'unknown', @errors; } }; 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); }; test LoadXmlSchemaTypes => sub { my ($this) = @_; my $schema = IMPL::DOM::Schema->LoadSchema("Resources/types.xml") or failed "Failed to parse schema"; return 1; }; test LoadXmlSchemaData => sub { my ($this) = @_; my $schema = IMPL::DOM::Schema->LoadSchema("Resources/form.xml") or failed "Failed to parse schema"; return 1; }; 1;