You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ja...@apache.org on 2006/01/02 05:56:43 UTC
svn commit: r365289 [4/4] - in /xerces/xerces-p/trunk: ./ Handler/ docs/
interface/ interface/Perl/ t/
Added: xerces/xerces-p/trunk/interface/Perl/typemaps.i
URL: http://svn.apache.org/viewcvs/xerces/xerces-p/trunk/interface/Perl/typemaps.i?rev=365289&view=auto
==============================================================================
--- xerces/xerces-p/trunk/interface/Perl/typemaps.i (added)
+++ xerces/xerces-p/trunk/interface/Perl/typemaps.i Sun Jan 1 20:55:53 2006
@@ -0,0 +1,72 @@
+//
+// FOR Perl*Handler MEMBER FUNCTIONS, SO PERL SCALAR DOESN'T GET WRAPPED
+//
+%typemap(in) SV * {
+ $1 = $input;
+}
+
+// For setProperty() - store the SV* directly
+%typemap(in) void * {
+ $1 = (void*) $input;
+}
+
+%typemap(in) (const XMLByte* const srcDocBytes,
+ unsigned int byteCount) {
+ if (SvPOK($input)||SvIOK($input)||SvNOK($input)) {
+ STRLEN len;
+ XMLByte *xmlbytes = (XMLByte *)SvPV($input, len);
+ $2 = len;
+ $1 = new XMLByte[len];
+ memcpy($1, xmlbytes, len);
+ } else {
+ SWIG_croak("Type error in argument 2 of $symname, Expected perl-string.");
+ }
+}
+
+// XMLByte arrays are just unisgned char*'s
+%typemap(out) const XMLByte* getRawBuffer() {
+ %set_output(SWIG_FromCharPtr((char*)result));
+}
+
+/*
+ * Adopting a validator
+ *
+ * we have to disown the validator, because Xerces will adopt it
+ * first we create a temp variable to store it's value in the
+ * 'in' typemap, and the after all conversion has succeeded
+ * the 'check' typemap will disown it.
+ */
+%typemap(in) XERCES_CPP_NAMESPACE::XMLValidator* valToAdopt (SV *temp)
+{
+ temp = $input;
+ if (SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor,0) < 0) {
+ SWIG_Perl_TypeError("$1_mangle",$argnum,"$symname");
+ }
+}
+
+%typemap(check) XERCES_CPP_NAMESPACE::XMLValidator* valToAdopt
+{
+ SWIG_Disown(temp$argnum);
+}
+
+// The typecheck functions are for use by SWIG's auto-overloading support
+%typemap(typecheck, precedence=60)
+SV*
+{
+ $1 = SvOK($input) ? 1 : 0;
+}
+
+// The typecheck functions are for use by SWIG's auto-overloading support
+%typemap(typecheck, precedence=60)
+SV*
+{
+ $1 = SvOK($input) ? 1 : 0;
+}
+
+// %typemap(typecheck, precedence=70)
+// as long as the SV is not undef, convert it to a string
+%typecheck(SWIG_TYPECHECK_UNISTRING)
+XMLCh*, const XMLCh*
+{
+ $1 = SvOK($input) ? 1 : 0;
+}
\ No newline at end of file
Modified: xerces/xerces-p/trunk/interface/defines.i
URL: http://svn.apache.org/viewcvs/xerces/xerces-p/trunk/interface/defines.i?rev=365289&r1=365288&r2=365289&view=diff
==============================================================================
--- xerces/xerces-p/trunk/interface/defines.i (original)
+++ xerces/xerces-p/trunk/interface/defines.i Sun Jan 1 20:55:53 2006
@@ -91,13 +91,6 @@
#include "xercesc/validators/datatype/InvalidDatatypeValueException.hpp"
#include "xercesc/validators/schema/identity/XPathException.hpp"
-#include "PerlCallbackHandler.hpp"
-#include "PerlErrorCallbackHandler.hpp"
-#include "PerlDocumentCallbackHandler.hpp"
-#include "PerlContentCallbackHandler.hpp"
-#include "PerlEntityResolverHandler.i"
-#include "PerlNodeFilterCallbackHandler.i"
-
XERCES_CPP_NAMESPACE_USE
// we initialize the static UTF-8 transcoding info
@@ -109,103 +102,24 @@
static bool DEBUG_UTF8_OUT = 0;
static bool DEBUG_UTF8_IN = 0;
-SV*
-XMLString2Perl(const XMLCh* input) {
- SV *output;
- unsigned int charsEaten = 0;
- int length = XMLString::stringLen(input); // string length
- // use +1 to make room for the '\0' at the end of the string
- // in the pathological case when each character of the string
- // is UTF8_MAXLEN bytes long
- XMLByte* res = new XMLByte[(length * UTF8_MAXLEN) + 1]; // output string
-
- unsigned int total_chars =
- UTF8_TRANSCODER->transcodeTo((const XMLCh*) input,
- (unsigned int) length,
- (XMLByte*) res,
- (unsigned int) (length*UTF8_MAXLEN),
- charsEaten,
- XMLTranscoder::UnRep_Throw
- );
- res[total_chars] = '\0';
-
-#if (0)
- if (DEBUG_UTF8_OUT) {
- printf("Xerces out length = %d: ",total_chars);
- for (int i=0;i<length;i++){
- printf("<0x%.4X>",res[i]);
- }
- printf("\n");
- }
-#endif
-
- output = sv_newmortal();
- sv_setpv((SV*)output, (char *)res );
- SvUTF8_on((SV*)output);
- delete[] res;
- return output;
-}
-
-XMLCh*
-Perl2XMLString(SV* input){
- XMLCh* output;
-
- STRLEN length;
- char *ptr = (char *)SvPVutf8(input,length);
-
-#if (0)
- if (DEBUG_UTF8_IN) {
- printf("Perl in length = %d: ",length);
- for (unsigned int i=0;i<length;i++){
- printf("<0x%.4X>",ptr[i]);
- }
- printf("\n");
- }
-#endif
+%}
- if (SvUTF8(input)) {
- unsigned int charsEaten = 0;
- unsigned char* sizes = new unsigned char[length+1];
- output = new XMLCh[length+1];
- unsigned int chars_stored =
- UTF8_TRANSCODER->transcodeFrom((const XMLByte*) ptr,
- (unsigned int) length,
- (XMLCh*) output,
- (unsigned int) length,
- charsEaten,
- (unsigned char*)sizes
- );
- delete [] sizes;
-
-#if (0)
- if (DEBUG_UTF8_IN) {
- printf("Xerces in length = %d: ",chars_stored);
- for (unsigned int i=0;i<chars_stored;i++){
- printf("<0x%.4X>",output[i]);
- }
- printf("\n");
- }
+/*
+ * Import the language specific includes
+ */
+
+#ifdef SWIGPERL
+%include "interface/Perl/defines.i"
+%include "interface/Perl/transcode.i"
+%include "interface/Perl/errors.i"
#endif
- // indicate the end of the string
- output[chars_stored] = '\0';
- } else {
- output = XMLString::transcode(ptr);
-
-#if (0)
- if (DEBUG_UTF8_IN) {
- printf("Xerces: ");
- for (int i=0;output[i];i++){
- printf("<0x%.4X>",output[i]);
- }
- printf("\n");
- }
-#endif
- }
- return(output);
-}
+// These get wrapped by SWIG so that we can modify them from the scripting language
+bool DEBUG_UTF8_OUT;
+bool DEBUG_UTF8_IN;
+%{
XMLException*
copyXMLException(const XMLException& e)
{
@@ -297,9 +211,12 @@
{
return (XMLException*)((XPathException*)&e)->duplicate();
}
+ else
+ {
+ SWIG_Perl_SetErrorf("Unknown Exception type: %d", e.getType());
+ }
}
-// These exception creation methods make the Xerces.cpp code *much* smaller
void
makeXMLException(const XMLException& e){
SV *error = ERRSV;
@@ -325,8 +242,3 @@
}
%}
-
-// These get wrapped by SWIG so that we can modify them within Perl
-bool DEBUG_UTF8_OUT;
-bool DEBUG_UTF8_IN;
-
Modified: xerces/xerces-p/trunk/interface/parsers.i
URL: http://svn.apache.org/viewcvs/xerces/xerces-p/trunk/interface/parsers.i?rev=365289&r1=365288&r2=365289&view=diff
==============================================================================
--- xerces/xerces-p/trunk/interface/parsers.i (original)
+++ xerces/xerces-p/trunk/interface/parsers.i Sun Jan 1 20:55:53 2006
@@ -7,34 +7,42 @@
%include "xercesc/parsers/XercesDOMParser.hpp"
%include "xercesc/parsers/SAXParser.hpp"
-//
-// define the exceptions for SAX2XMLReader
-//
+/*
+ * the SAX2XMLReader methods gets a special exception handler
+ * 'goto fail' must be called - either explicitly, or via SWIG_croak()
+ * to ensure that any variable cleanup is done - to avoid memory leaks.
+ * We make this a macro to be similar to the other exception handlers.
+ */
+%{
+#define CATCH_SAX_EXCEPTION \
+ catch (const XMLException& e) \
+ { \
+ makeXMLException(e); \
+ goto fail; \
+ } \
+ catch (const SAXNotSupportedException& e) \
+ { \
+ makeSAXNotSupportedException(e); \
+ goto fail; \
+ } \
+ catch (const SAXNotRecognizedException& e) \
+ { \
+ makeSAXNotRecognizedException(e); \
+ goto fail; \
+ } \
+ catch (...) \
+ { \
+ SWIG_croak("Handling Unknown exception"); \
+ goto fail; \
+ }
+%}
+
%define SAXEXCEPTION(method)
%exception method {
try {
$action
}
- catch (const XMLException& e)
- {
- makeXMLException(e);
- goto fail;
- }
- catch (const SAXNotSupportedException& e)
- {
- makeSAXNotSupportedException(e);
- goto fail;
- }
- catch (const SAXNotRecognizedException& e)
- {
- makeSAXNotRecognizedException(e);
- goto fail;
- }
- catch (...)
- {
- SWIG_croak("Handling Unknown exception");
- goto fail;
- }
+ CATCH_SAX_EXCEPTION
}
%enddef
Modified: xerces/xerces-p/trunk/interface/typemaps-general.i
URL: http://svn.apache.org/viewcvs/xerces/xerces-p/trunk/interface/typemaps-general.i?rev=365289&r1=365288&r2=365289&view=diff
==============================================================================
--- xerces/xerces-p/trunk/interface/typemaps-general.i (original)
+++ xerces/xerces-p/trunk/interface/typemaps-general.i Sun Jan 1 20:55:53 2006
@@ -15,19 +15,20 @@
*/
/*
+ * Scripting languages are not going to change the default memory manager
+ * so we always default this argument
+ */
+%typemap(in,numinputs=0) XERCES_CPP_NAMESPACE::MemoryManager* const manager "$1 = XERCES_CPP_NAMESPACE::XMLPlatformUtils::fgMemoryManager;"
+
+/*
* MemBufInputSource::MemBufInputSource()
*
- *
- *
* ALWAYS ADOPT BUFFER (I.E. MAKE A COPY OF IT) SINCE IT IS TAKEN FROM
- * PERL, AND WHO KNOWS WHAT WILL HAPPEN TO IT AFTER IT IS GIVEN TO THE
+ * THE SCRIPTING LANGUAGE, AND WHO KNOWS WHAT WILL HAPPEN TO IT AFTER
+ * IT IS GIVEN TO THE
* CONSTRUCTOR
*/
-//
-// Perl should ignore these arguments
-//
-
// %typemap(in,numinputs=0) (unsigned int byteCount) "$1 = 0;"
/*
@@ -40,48 +41,6 @@
%typemap(in,numinputs=0) const bool adoptBuffer "$1 = true;" // for MemBufInputSource
/*
- * Scripting languages are not going to change the default memory manager
- * so we always default this argument
- */
-%typemap(in,numinputs=0) XERCES_CPP_NAMESPACE::MemoryManager* const manager "$1 = XERCES_CPP_NAMESPACE::XMLPlatformUtils::fgMemoryManager;"
-
-%typemap(in) (const XMLByte* const srcDocBytes,
- unsigned int byteCount) {
- if (SvPOK($input)||SvIOK($input)||SvNOK($input)) {
- STRLEN len;
- XMLByte *xmlbytes = (XMLByte *)SvPV($input, len);
- $2 = len;
- $1 = new XMLByte[len];
- memcpy($1, xmlbytes, len);
- } else {
- SWIG_croak("Type error in argument 2 of $symname, Expected perl-string.");
- }
-}
-
-// XMLByte arrays are just char*'s
-%apply char * { XMLByte * }
-
-/*
- * Adopting a validator
- *
- * we have to disown the validator, because Xerces will adopt it
- * first we create a temp variable to store it's value in the
- * 'in' typemap, and the after all conversion has succeeded
- * the 'check' typemap will disown it.
- */
-%typemap(in) XERCES_CPP_NAMESPACE::XMLValidator* valToAdopt (SV *temp)
-{
- temp = $input;
- if (SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor,0) < 0) {
- SWIG_type_error("$1_mangle",$argnum,"$symname")
- }
-}
-%typemap(check) XERCES_CPP_NAMESPACE::XMLValidator* valToAdopt
-{
- SWIG_Disown(temp$argnum);
-}
-
-/*
* Dynamic Casts
*
* This very cool SWIG feature enables use to return the correct object
@@ -116,44 +75,6 @@
}
%}
-
-/*
- * PerlCallbackHandler* - this is broken and useless
- */
-
-%typemap(out) XERCES_CPP_NAMESPACE::PerlCallbackHandler * = SWIGTYPE *DYNAMIC;
-
-DYNAMIC_CAST(SWIGTYPE_p_PerlCallbackHandler, PerlCallbackHandler_dynamic_cast);
-
-%{
-static swig_type_info *
-PerlCallbackHandler_dynamic_cast(void **ptr) {
- PerlCallbackHandler **nptr = (PerlCallbackHandler **) ptr;
- if (*nptr == NULL) {
- return NULL;
- }
- short int type = (*nptr)->type();
- if (type == PERLCALLBACKHANDLER_BASE_TYPE) {
- die("Can't cast a PerlCallbackHandler base type node\n");
- }
- if (type == PERLCALLBACKHANDLER_ERROR_TYPE) {
- return SWIGTYPE_p_PerlErrorCallbackHandler;
- }
- if (type == PERLCALLBACKHANDLER_ENTITY_TYPE) {
- return SWIGTYPE_p_PerlEntityResolverHandler;
- }
- if (type == PERLCALLBACKHANDLER_CONTENT_TYPE) {
- return SWIGTYPE_p_PerlContentCallbackHandler;
- }
- if (type == PERLCALLBACKHANDLER_DOCUMENT_TYPE) {
- return SWIGTYPE_p_PerlDocumentCallbackHandler;
- }
- if (type == PERLCALLBACKHANDLER_NODE_TYPE) {
- return SWIGTYPE_p_PerlNodeFilterCallbackHandler;
- }
- return NULL;
-}
-%}
/*
* DOM_Node*
Modified: xerces/xerces-p/trunk/interface/typemaps.i
URL: http://svn.apache.org/viewcvs/xerces/xerces-p/trunk/interface/typemaps.i?rev=365289&r1=365288&r2=365289&view=diff
==============================================================================
--- xerces/xerces-p/trunk/interface/typemaps.i (original)
+++ xerces/xerces-p/trunk/interface/typemaps.i Sun Jan 1 20:55:53 2006
@@ -21,5 +21,8 @@
/**************/
%include typemaps-general.i
-%include typemaps-xmlch.i
+#ifdef SWIGPERL
+%include "interface/Perl/typemaps.i"
+%include "interface/Perl/typemaps-xmlch.i"
+#endif
\ No newline at end of file
Added: xerces/xerces-p/trunk/t/01utf8.t
URL: http://svn.apache.org/viewcvs/xerces/xerces-p/trunk/t/01utf8.t?rev=365289&view=auto
==============================================================================
--- xerces/xerces-p/trunk/t/01utf8.t (added)
+++ xerces/xerces-p/trunk/t/01utf8.t Sun Jan 1 20:55:53 2006
@@ -0,0 +1,332 @@
+# use blib;
+use XML::Xerces;
+use Cwd;
+use Test::More tests => 42;
+use vars qw($text);
+use utf8;
+use lib 't';
+use TestUtils qw($PERSONAL_NO_DOCTYPE);
+
+pass("loaded");
+
+ # NOTICE: We must now explicitly call XMLPlatformUtils::Initialize()
+ # when the module is loaded. Xerces.pm no longer does this.
+ #
+ #
+XML::Xerces::XMLPlatformUtils::Initialize();
+
+my $utf8_text = "\x{66}\x{128}\x{144}";
+my $ascii_text = "just a test";
+my $utf8_document = <<XML;
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<text>$utf8_text</text>
+XML
+
+my $ascii_document = <<XML;
+<?xml version="1.0" encoding="ASCII" standalone="yes"?>
+<text>$ascii_text</text>
+XML
+
+package MyContentHandler;
+use strict;
+use base qw(XML::Xerces::PerlContentHandler);
+
+sub start_element {
+ my ($self, $uri, $localname, $qname, $attrs) = @_;
+# print STDERR "Start element: uri: $uri, localname: $localname, qname: $qname, attrs: $attrs\n";
+ push(@{$self->{start_elem_list}}, {localname=>$localname,
+ uri=>$uri,
+ qname=>$qname,
+ });
+ push(@{$self->{attr_list}}, $attrs);
+}
+
+sub end_element {
+ my ($self, $uri, $localname, $qname) = @_;
+# print STDERR "End element: uri: $uri, localname: $localname, qname: $qname\n";
+ push(@{$self->{end_elem_list}}, {localname=>$localname,
+ uri=>$uri,
+ qname=>$qname,
+ });
+}
+
+sub characters {
+ my ($self,$str,$len) = @_;
+# print STDERR "Characters: len: $len, str: $str\n";
+ $::text .= $str;
+}
+sub ignorable_whitespace {
+ my ($self,$str,$len) = @_;
+}
+
+sub processing_instruction {
+ my ($self,$target,$data) = @_;
+ push(@{$self->{pi_list}}, {target=>$target,
+ data=>$data,
+ });
+}
+
+sub reset_document {
+ my ($self) = @_;
+ $self->{start_elem_list} = [];
+ $self->{end_elem_list} = [];
+ $self->{attr_list} = [];
+ $self->{pi_list} = [];
+ $self->{map_start} = undef;
+ $self->{map_end} = undef;
+ $::text = '';
+}
+
+sub start_prefix_mapping {
+ my ($self,$prefix,$uri) = @_;
+# print STDERR "Prefix mapping start: prefix: $prefix, uri: $uri\n";
+ $self->{map_start} = {prefix=>$prefix,
+ uri=>$uri,
+ };
+}
+
+sub end_prefix_mapping {
+ my ($self,$prefix) = @_;
+# print STDERR "Prefix mapping end: prefix: $prefix\n";
+ $self->{map_end} = {prefix=>$prefix,
+ };
+}
+
+package MyDocumentHandler;
+use strict;
+use base qw(XML::Xerces::PerlDocumentHandler);
+
+sub start_element {
+ my ($self, $name, $attrs) = @_;
+# print STDERR "Start element: name: $name, attrs: $attrs\n";
+ push(@{$self->{start_elem_list}}, {name=>$name,
+ });
+ push(@{$self->{attr_list}}, $attrs);
+}
+
+sub end_element {
+ my ($self, $name) = @_;
+# print STDERR "End element: uri: $uri, name: $name\n";
+ push(@{$self->{end_elem_list}}, {name=>$name,
+ });
+}
+
+sub characters {
+ my ($self,$str,$len) = @_;
+# print STDERR "Characters: len: $len, str: $str\n";
+ $::text .= $str;
+}
+sub ignorable_whitespace {
+ my ($self,$str,$len) = @_;
+}
+
+sub processing_instruction {
+ my ($self,$target,$data) = @_;
+ push(@{$self->{pi_list}}, {target=>$target,
+ data=>$data,
+ });
+}
+
+sub reset_document {
+ my ($self) = @_;
+ $self->{start_elem_list} = [];
+ $self->{end_elem_list} = [];
+ $self->{attr_list} = [];
+ $self->{pi_list} = [];
+ $::text = '';
+}
+
+package main;
+my $SAX2 = XML::Xerces::XMLReaderFactory::createXMLReader();
+isa_ok($SAX2, "XML::Xerces::SAX2XMLReader");
+
+$SAX2->setFeature("$XML::Xerces::XMLUni::fgSAX2CoreValidation", 0);
+$SAX2->setFeature("$XML::Xerces::XMLUni::fgXercesDynamic", 0);
+
+my $ERROR_HANDLER = XML::Xerces::PerlErrorHandler->new();
+isa_ok($ERROR_HANDLER, "XML::Xerces::PerlErrorHandler");
+
+$SAX2->setErrorHandler($ERROR_HANDLER);
+
+my $CONTENT_HANDLER = MyContentHandler->new();
+isa_ok($CONTENT_HANDLER, "MyContentHandler");
+isa_ok($CONTENT_HANDLER, "XML::Xerces::PerlContentHandler");
+
+$SAX2->setContentHandler($CONTENT_HANDLER);
+
+my $SAX = XML::Xerces::SAXParser->new();
+isa_ok($SAX, "XML::Xerces::SAXParser");
+
+$SAX->setValidationScheme ($XML::Xerces::SAXParser::Val_Never);
+$SAX->setErrorHandler($ERROR_HANDLER);
+
+my $DOCUMENT_HANDLER = MyDocumentHandler->new();
+isa_ok($DOCUMENT_HANDLER, "MyDocumentHandler");
+isa_ok($DOCUMENT_HANDLER, "XML::Xerces::PerlDocumentHandler");
+
+$SAX->setDocumentHandler($DOCUMENT_HANDLER);
+
+
+#
+# parse a document with only ASCII characters
+#
+$CONTENT_HANDLER->reset_document();
+
+my $is = eval {XML::Xerces::MemBufInputSource->new($ascii_document)};
+XML::Xerces::error($@) if $@;
+isa_ok($is, "XML::Xerces::MemBufInputSource");
+
+eval {$SAX2->parse($is)};
+XML::Xerces::error($@) if $@;
+
+is($text, $ascii_text, "ASCII text content - SAX2");
+
+$DOCUMENT_HANDLER->reset_document();
+
+eval {$SAX->parse($is)};
+XML::Xerces::error($@) if $@;
+
+is($text, $ascii_text, "ASCII text content - SAX");
+
+#
+# parse a document with UTF8 characters
+#
+$CONTENT_HANDLER->reset_document();
+
+$is = eval {XML::Xerces::MemBufInputSource->new($utf8_document)};
+XML::Xerces::error($@) if $@;
+isa_ok($is, "XML::Xerces::MemBufInputSource");
+
+eval {$SAX2->parse($is)};
+XML::Xerces::error($@) if $@;
+
+is($text, $utf8_text, "UTF8 text content - SAX2");
+
+$DOCUMENT_HANDLER->reset_document();
+
+eval {$SAX->parse($is)};
+XML::Xerces::error($@) if $@;
+
+is($text, $utf8_text, "UTF8 text content - SAX");
+
+$CONTENT_HANDLER->reset_document();
+
+#
+# parse a document with UTF8 element names
+#
+my $uri = "http://www.boyscouts.$utf8_text/";
+my $ns = "ns_$utf8_text";
+
+my $elem_name = "elem_$utf8_text";
+my $qname = "$ns:$elem_name";
+$utf8_document = <<XML;
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<test xmlns:$ns="$uri"><$ns:$elem_name>$utf8_text</$ns:$elem_name></test>
+XML
+
+$is = eval {XML::Xerces::MemBufInputSource->new($utf8_document)};
+XML::Xerces::error($@) if $@;
+isa_ok($is, "XML::Xerces::MemBufInputSource");
+
+eval {$SAX2->parse($is)};
+XML::Xerces::error($@) if $@;
+
+is($CONTENT_HANDLER->{start_elem_list}->[-1]->{localname}, $elem_name, "UTF8 element name - start handler");
+is($CONTENT_HANDLER->{start_elem_list}->[-1]->{uri}, $uri, "UTF8 uri - start handler");
+is($CONTENT_HANDLER->{start_elem_list}->[-1]->{qname}, $qname, "UTF8 qname - start handler");
+
+is($CONTENT_HANDLER->{end_elem_list}->[0]->{localname}, $elem_name, "UTF8 element name - end handler");
+is($CONTENT_HANDLER->{end_elem_list}->[0]->{uri}, $uri, "UTF8 uri - end handler");
+is($CONTENT_HANDLER->{end_elem_list}->[0]->{qname}, $qname, "UTF8 qname - end handler");
+
+is($text, $utf8_text, "UTF8 text content");
+
+is($CONTENT_HANDLER->{map_start}->{prefix}, $ns, "UTF8 namespace - map start handler");
+is($CONTENT_HANDLER->{map_start}->{uri}, $uri, "UTF8 uri - map start handler");
+
+is($CONTENT_HANDLER->{map_end}->{prefix}, $ns, "UTF8 namespace - map end handler");
+
+$DOCUMENT_HANDLER->reset_document();
+
+eval {$SAX->parse($is)};
+XML::Xerces::error($@) if $@;
+
+is($DOCUMENT_HANDLER->{start_elem_list}->[-1]->{name}, "$ns:$elem_name", "UTF8 element name - start handler");
+is($DOCUMENT_HANDLER->{end_elem_list}->[0]->{name}, "$ns:$elem_name", "UTF8 element name - end handler");
+
+is($text, $utf8_text, "UTF8 text content");
+
+$CONTENT_HANDLER->reset_document();
+
+#
+# parse a document with UTF8 attr names and values
+#
+my $attr_name = "attr_$utf8_text";
+$qname = "$ns:$attr_name";
+
+$utf8_document = <<XML;
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<test xmlns:$ns="$uri"><text $ns:$attr_name="$utf8_text">$utf8_text</text></test>
+XML
+
+$is = eval {XML::Xerces::MemBufInputSource->new($utf8_document)};
+XML::Xerces::error($@) if $@;
+isa_ok($is, "XML::Xerces::MemBufInputSource");
+
+eval {$SAX2->parse($is)};
+XML::Xerces::error($@) if $@;
+
+is($CONTENT_HANDLER->{attr_list}->[-1]->getLocalName(0), $attr_name, "UTF8 attr name");
+is($CONTENT_HANDLER->{attr_list}->[-1]->getValue(0), $utf8_text, "UTF8 attr value");
+is($CONTENT_HANDLER->{attr_list}->[-1]->getQName(0), $qname, "UTF8 attr qname");
+is($CONTENT_HANDLER->{attr_list}->[-1]->getURI(0), $uri, "UTF8 attr uri");
+
+is($text, $utf8_text, "UTF8 text content");
+
+$DOCUMENT_HANDLER->reset_document();
+
+eval {$SAX->parse($is)};
+XML::Xerces::error($@) if $@;
+
+is($DOCUMENT_HANDLER->{attr_list}->[-1]->getName(0), "$ns:$attr_name", "UTF8 attr name - SAX");
+is($DOCUMENT_HANDLER->{attr_list}->[-1]->getValue(0), $utf8_text, "UTF8 attr value - SAX");
+
+is($text, $utf8_text, "UTF8 text content - SAX");
+
+$CONTENT_HANDLER->reset_document();
+
+#
+# parse a document with UTF8 processing instruction
+#
+my $pi_name = "pi_$utf8_text";
+$utf8_document = <<XML;
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<?$pi_name $utf8_text?>
+<test/>
+XML
+
+$is = eval {XML::Xerces::MemBufInputSource->new($utf8_document)};
+XML::Xerces::error($@) if $@;
+isa_ok($is, "XML::Xerces::MemBufInputSource");
+
+eval {$SAX2->parse($is)};
+XML::Xerces::error($@) if $@;
+
+is($CONTENT_HANDLER->{pi_list}->[-1]->{target}, $pi_name, "UTF8 processing instruction name");
+is($CONTENT_HANDLER->{pi_list}->[-1]->{data}, $utf8_text, "UTF8 processing instruction data");
+
+$DOCUMENT_HANDLER->reset_document();
+
+eval {$SAX->parse($is)};
+XML::Xerces::error($@) if $@;
+
+is($DOCUMENT_HANDLER->{pi_list}->[-1]->{target}, $pi_name, "UTF8 processing instruction name - SAX");
+is($DOCUMENT_HANDLER->{pi_list}->[-1]->{data}, $utf8_text, "UTF8 processing instruction data - SAX");
+
+END {
+ # NOTICE: We must now explicitly call XMLPlatformUtils::Terminate()
+ # when the module is unloaded. Xerces.pm no longer does this for us
+ #
+ #
+ XML::Xerces::XMLPlatformUtils::Terminate();
+}
Modified: xerces/xerces-p/trunk/t/DOMNode.t
URL: http://svn.apache.org/viewcvs/xerces/xerces-p/trunk/t/DOMNode.t?rev=365289&r1=365288&r2=365289&view=diff
==============================================================================
--- xerces/xerces-p/trunk/t/DOMNode.t (original)
+++ xerces/xerces-p/trunk/t/DOMNode.t Sun Jan 1 20:55:53 2006
@@ -61,7 +61,8 @@
my @persons2 = $doc2->getElementsByTagName('person');
my @names2 = $doc1->getElementsByTagName('name');
-ok($root1 != $root2);
+ok(($root1 != $root2),
+ "root1 and root2 are different");
# importing a child from a different document
eval {
@@ -69,9 +70,12 @@
$root1->appendChild($copy);
};
ok(!$@ &&
- scalar @persons1 < scalar ($root1->getElementsByTagName('person')));
+ scalar @persons1 < scalar ($root1->getElementsByTagName('person')),
+ "import node");
# test the equality operators
my @people = $doc1->getElementsByTagName('person');
-ok($root1 != $root2);
-ok($people[0] == $persons1[0]);
+ok(($root1 != $root2),
+ "root nodes are unequal");
+ok(($people[0] == $persons1[0]),
+ "nodes are equal");
Modified: xerces/xerces-p/trunk/t/DOMWriter.t
URL: http://svn.apache.org/viewcvs/xerces/xerces-p/trunk/t/DOMWriter.t?rev=365289&r1=365288&r2=365289&view=diff
==============================================================================
--- xerces/xerces-p/trunk/t/DOMWriter.t (original)
+++ xerces/xerces-p/trunk/t/DOMWriter.t Sun Jan 1 20:55:53 2006
@@ -51,6 +51,8 @@
my $doc = $dom->getDocument();
$writer->writeNode($target,$doc);
my $output = $target->getRawBuffer();
-ok($output);
-ok($output eq $document);
+
+ok($output, "output written");
+is($output, $document, "got expected document");
+
Modified: xerces/xerces-p/trunk/t/MemBufInputSource.t
URL: http://svn.apache.org/viewcvs/xerces/xerces-p/trunk/t/MemBufInputSource.t?rev=365289&r1=365288&r2=365289&view=diff
==============================================================================
--- xerces/xerces-p/trunk/t/MemBufInputSource.t (original)
+++ xerces/xerces-p/trunk/t/MemBufInputSource.t Sun Jan 1 20:55:53 2006
@@ -9,7 +9,7 @@
use Carp;
# use blib;
use XML::Xerces;
-use Test::More tests => 5;
+use Test::More tests => 6;
use lib 't';
use TestUtils qw($DOM $PERSONAL_NO_DOCTYPE);
@@ -23,19 +23,20 @@
my $is = eval{XML::Xerces::MemBufInputSource->new($PERSONAL_NO_DOCTYPE,'foo')};
XML::Xerces::error($@) if $@;
-ok(UNIVERSAL::isa($is,'XML::Xerces::InputSource')
- && $is->isa('XML::Xerces::MemBufInputSource')
- );
+isa_ok($is, 'XML::Xerces::InputSource');
+isa_ok($is, 'XML::Xerces::MemBufInputSource');
eval {$DOM->parse($is)};
XML::Xerces::error($@) if $@;
my $serialize = $DOM->getDocument->serialize;
-ok($serialize eq $PERSONAL_NO_DOCTYPE);
+is($serialize, $PERSONAL_NO_DOCTYPE,
+ "doctype");
# now test that the fake system ID is optional
$is = eval{XML::Xerces::MemBufInputSource->new($PERSONAL_NO_DOCTYPE)};
XML::Xerces::error($@) if $@;
-ok($is->getSystemId() eq 'FAKE_SYSTEM_ID');
+is($is->getSystemId(), 'FAKE_SYSTEM_ID',
+ "system id");
# test that a blank document does not segfault
$is = eval{XML::Xerces::MemBufInputSource->new('')};
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org