SVN commit 1215995 by trueg: Backport: fixed tests and handling of number literals M +15 -10 query/queryparser.cpp M +7 -7 test/queryparsertest.cpp --- branches/KDE/4.6/kdelibs/nepomuk/query/queryparser.cpp #1215994:1215995 @@ -1,6 +1,6 @@ /* This file is part of the Nepomuk KDE project. - Copyright (C) 2007-2010 Sebastian Trueg + Copyright (C) 2007-2011 Sebastian Trueg This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -131,21 +131,26 @@ } Soprano::LiteralValue createLiteral( const QString& s, bool globbing ) { + // 1. check if it is a number + QString clearString(s); + clearString.remove(QLatin1Char('\'')); + clearString.remove(QLatin1Char('"')); + bool b = false; + int i = clearString.toInt( &b ); + if ( b ) + return Soprano::LiteralValue( i ); + double d = clearString.toDouble( &b ); + if ( b ) + return Soprano::LiteralValue( d ); + + // 2. no number - continue with the original string + // no globbing if we have quotes or if there already is a wildcard if ( s[0] == QLatin1Char('\'') || s[0] == QLatin1Char('\"') ) { return s; } - // at this point we should have a string without spaces in it - bool b = false; - int i = s.toInt( &b ); - if ( b ) - return Soprano::LiteralValue( i ); - double d = s.toDouble( &b ); - if ( b ) - return Soprano::LiteralValue( d ); - // // we can only do query term globbing for strings longer than 3 chars // --- branches/KDE/4.6/kdelibs/nepomuk/test/queryparsertest.cpp #1215994:1215995 @@ -108,8 +108,8 @@ // simple literal queries QTest::newRow( "simple literal query" ) << QString( "Hello" ) << Query( LiteralTerm( "Hello" ) ); - QTest::newRow( "literal with spaces without quotes" ) << QString( "Hello World" ) << Query( AndTerm( LiteralTerm("Hello"), LiteralTerm("World" ) ) ); - QTest::newRow( "literal with spaces with quotes" ) << QString( "'Hello World'" ) << Query( LiteralTerm( "Hello World" ) ); + QTest::newRow( "literal with spaces without quotes" ) << QString( "Hello World" ) << Query( LiteralTerm("Hello AND World" ) ); + QTest::newRow( "literal with spaces with quotes" ) << QString( "'Hello World'" ) << Query( LiteralTerm( "'Hello World'" ) ); // comparison queries QTest::newRow( "simple field query" ) << QString( "hastag:nepomuk" ) @@ -135,8 +135,8 @@ QTest::newRow( "field negation" ) << QString( "-label:nepomuk" ) << Query( NegationTerm::negateTerm( ComparisonTerm( QUrl("onto:/label"), LiteralTerm( "nepomuk" ) ) ) ); // and query - QTest::newRow( "and: two literals" ) << QString( "Hello World" ) << Query( AndTerm( LiteralTerm( "Hello" ), LiteralTerm( "World" ) ) ); - QTest::newRow( "and: two literals with AND" ) << QString( "Hello AND World" ) << Query( AndTerm( LiteralTerm( "Hello" ), LiteralTerm( "World" ) ) ); + QTest::newRow( "and: two literals" ) << QString( "Hello World" ) << Query( LiteralTerm( "Hello AND World" ) ); + QTest::newRow( "and: two literals with AND" ) << QString( "Hello AND World" ) << Query( LiteralTerm( "Hello AND World" ) ) ; // or queries QTest::newRow( "or: two literals" ) << QString( "Hello OR World" ) << Query( OrTerm( LiteralTerm( "Hello" ), LiteralTerm( "World" ) ) ); @@ -161,9 +161,9 @@ // simple literal queries QTest::newRow( "simple literal query" ) << QString( "Hello" ) << Query( LiteralTerm( "Hello*" ) ); - QTest::newRow( "simple literal query" ) << QString( "\"Hello\"" ) << Query( LiteralTerm( "Hello" ) ); - QTest::newRow( "literal with spaces without quotes" ) << QString( "Hello World" ) << Query( AndTerm( LiteralTerm("Hello*"), LiteralTerm("World*" ) ) ); - QTest::newRow( "literal with spaces with quotes" ) << QString( "'Hello World'" ) << Query( LiteralTerm( "Hello World" ) ); + QTest::newRow( "simple literal query" ) << QString( "\"Hello\"" ) << Query( LiteralTerm( "\"Hello\"" ) ); + QTest::newRow( "literal with spaces without quotes" ) << QString( "Hello World" ) << Query( LiteralTerm("Hello* AND World*" ) ); + QTest::newRow( "literal with spaces with quotes" ) << QString( "'Hello World'" ) << Query( LiteralTerm( "'Hello World'" ) ); }