/* * parser_tester.cc - Copyright 2005 Frerich Raabe * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "parsedstatement.h" #include #include QString indentedTree( const QString &markup ) { QDomDocument doc; doc.setContent( markup ); return doc.toString( 2 ); } void check( const QString &statement, const QString &expected ) { QString result = ParsedStatement( statement ).dump(); if ( indentedTree( result ) != indentedTree( expected ) ) { qDebug() << "ERROR! Failed to parse '" << statement << "' as expected!"; qDebug() << "Expected:"; qDebug() << indentedTree( expected ); qDebug() << "Got:"; qDebug() << indentedTree( result ); exit( 1 ); } } extern int xpathyydebug; int main() { // xpathyydebug=1; check( "/book", "" ); check( "book/self::chapter/@id", "" ); check( "child[\"foo\"=\"bar\" ]", "foobar" ); check( "//parent[position() < last()-1]", "1" ); check( "/foo[true()][substring-after(\"First name=Joe\", \"=\") != \"Mary\"]", "First name=Joe=Mary" ); check( "/foo[true()][substring-after(\"First name=Joe\", \"=\") != \"Mary\"]/child[false()][substring-before(\"First name=Joe\", '=') != 'Mary']", "First name=Joe=Mary First name=Joe=Mary" ); check( "following::this[@that]", "" ); check( "descendant::para[@type != $type]", "" ); check( "child::processing-instruction()", "" ); check( "child::processing-instruction(\"someParameter\")", "" ); check( "*", "" ); check( "comment()", "" ); check( "comment() | text() | processing-instruction() | node()", "" ); qDebug( "All OK!" ); }