saveXml(); $document = new DOMDocument(); $document->loadXml( $xml ); $oldSetting = libxml_use_internal_errors( true ); $document->schemaValidate( dirname( __FILE__ ) . '/files/schemas/docbook/docbook.xsd' ); // Severity types of XML errors $errorTypes = array( LIBXML_ERR_WARNING => 'Warning', LIBXML_ERR_ERROR => 'Error', LIBXML_ERR_FATAL => 'Fatal error', ); // Get all errors $xmlErrors = libxml_get_errors(); $errors = array(); foreach ( $xmlErrors as $error ) { $errors[] = sprintf( "%s in %d:%d: %s.", $errorTypes[$error->level], $error->line, $error->column, str_replace( '{http://docbook.org/ns/docbook}', 'docbook:', trim( $error->message ) ) ); } libxml_clear_errors(); libxml_use_internal_errors( $oldSetting ); $this->assertEquals( array(), $errors, 'Docbook document is not valid.' ); } /** * @dataProvider getTestDocuments */ public function testParseRstFile( $from, $to ) { if ( !is_file( $to ) ) { $this->markTestSkipped( "Comparision file '$to' not yet defined." ); } $document = new ezcDocumentRst(); $document->options->errorReporting = E_PARSE | E_ERROR | E_WARNING; $document->registerDirective( 'my_custom_directive', 'ezcDocumentTestDummyDirective' ); $document->registerDirective( 'user', 'ezcDocumentTestDummyDirective' ); $document->registerDirective( 'book', 'ezcDocumentTestDummyDirective' ); $document->registerDirective( 'function', 'ezcDocumentTestDummyDirective' ); $document->registerDirective( 'replace', 'ezcDocumentTestDummyDirective' ); $document->loadFile( $from ); $docbook = $document->getAsDocbook(); $xml = $docbook->save(); // Store test file, to have something to compare on failure $tempDir = $this->createTempDir( 'docbook_' ) . '/'; file_put_contents( $tempDir . basename( $to ), $xml ); // We need a proper XSD first, the current one does not accept legal // XML. // $this->checkDocbook( $docbook->getDomDocument() ); $this->assertEquals( file_get_contents( $to ), $xml, 'Document not visited as expected.' ); // Remove tempdir, when nothing failed. $this->removeTempDir(); } public static function getErroneousTestDocuments() { // return array(); return array( array( dirname( __FILE__ ) . '/files/rst/docbook/e_001_missing_directive.txt', 'Visitor error: Warning: \'No directive handler registered for directive \'missing_directive_dclaration\'.\' in line 7 at position 1.' ), ); } /** * @dataProvider getErroneousTestDocuments */ public function testParseErroneousRstFile( $file, $message ) { try { $document = new ezcDocumentRst(); $document->options->errorReporting = E_PARSE | E_ERROR | E_WARNING; $document->registerDirective( 'my_custom_directive', 'ezcDocumentTestDummyDirective' ); $document->registerDirective( 'user', 'ezcDocumentTestDummyDirective' ); $document->registerDirective( 'book', 'ezcDocumentTestDummyDirective' ); $document->registerDirective( 'function', 'ezcDocumentTestDummyDirective' ); $document->registerDirective( 'replace', 'ezcDocumentTestDummyDirective' ); $document->loadFile( $file ); $docbook = $document->getAsDocbook(); $xml = $docbook->save(); $document = $parser->parse( $tokenizer->tokenizeFile( $file ) ); $this->fail( 'Expected some exception.' ); } catch ( ezcDocumentException $e ) { $this->assertSame( $message, $e->getMessage(), 'Different parse error expected.' ); } } } ?>