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;