#============================================================= -*-perl-*- # # t/particle.t # # Test the XML::Schema::Particle module. # # Written by Andy Wardley # # Copyright (C) 2001 Canon Research Centre Europe Ltd. # All Rights Reserved. # # This is free software; you can redistribute it and/or modify it # under the same terms as Perl itself. # # $Id: particle.t,v 1.1.1.1 2001/08/29 14:30:17 abw Exp $ # #======================================================================== $^W = 1; use strict; use lib qw( ./lib ../lib ); use XML::Schema::Test; use XML::Schema::Particle; use XML::Schema::Particle::Sequence; use XML::Schema::Element; use XML::Schema::Type; my $DEBUG = grep '-d', @ARGV; $XML::Schema::Particle::DEBUG = $DEBUG; $XML::Schema::Particle::Sequence::DEBUG = $DEBUG; $XML::Schema::Particle::Element::DEBUG = $DEBUG; #ntests(50); my $name = 'animal'; my $string = XML::Schema::Type::string->new( maxLength => 12 ); ok( $string, $XML::Schema::Type::string::ERROR ); my $element = XML::Schema::Element->new( name => 'animal', type => $string ); ok( $element, $XML::Schema::Element::ERROR ); my $package = 'XML::Schema::Particle'; my $particle = $package->new(); ok( ! $particle ); match( $package->error(), "particle expects one of: element, sequence, choice, model" ); $particle = $package->new( element => $element ); ok( $particle, $package->error() ); match( $particle->element(), $element ); match( $particle->minOccurs(), 1 ); match( $particle->maxOccurs(), 1 ); match( $particle->min(), 1 ); match( $particle->max(), 1 ); use XML::Schema::Particle::Element; $package = 'XML::Schema::Particle::Element'; $particle = $package->new( element => $element, minOccurs => 0, maxOccurs => 5 ); ok( $particle, $package->error() ); match( $particle->element(), $element ); match( $particle->minOccurs(), 0 ); match( $particle->maxOccurs(), 5 ); match( $particle->min(), 0 ); match( $particle->max(), 5 ); $particle = $package->new( element => $element, min => 5, max => 10 ); ok( $particle, $package->error() ); match( $particle->element(), $element ); match( $particle->minOccurs(), 5 ); match( $particle->maxOccurs(), 10 ); match( $particle->min(), 5 ); match( $particle->max(), 10 ); $particle = $package->new( element => $element, min => 10, max => 5 ); ok( ! $particle ); match( $package->error(), "maxOccurs (5) is less than minOccurs (10)" ); #------------------------------------------------------------------------ $particle = $package->new( element => $element, min => 1, max => 2 ); ok( $particle, $package->error() ); ok( $particle->start() ); my $e = $particle->element( $name ); ok( $e ); $e = $particle->element( $name ); ok( $e ); # should fail this time - had 2 already $e = $particle->element( $name ); ok( ! $e ); match( $particle->error(), 'maximum of 2 elements exceeded' ); # check it fails again $e = $particle->element( $name ); ok( ! $e ); match( $particle->error(), 'maximum of 2 elements exceeded' ); # reset and repeat the whole thing $particle->start(); $e = $particle->element( $name ); ok( $e ); $e = $particle->element( $name ); ok( $e ); match( $particle->occurs(), 2); $e = $particle->element( $name ); ok( ! $e ); match( $particle->error(), 'maximum of 2 elements exceeded' ); match( $particle->occurs(), 2); # now try a min failure $particle->start(); $e = $particle->element( 'nextelement' ); ok( ! $e ); match( $particle->error(), 'unexpected found (min. 1 element required)' ); $particle->start(); ok( ! $particle->end() ); match( $particle->error(), 'minimum of 1 element expected' ); $particle->min(2); $particle->start(); ok( ! $particle->end() ); match( $particle->error(), 'minimum of 2 elements expected' );