2010-04-13 06:37:21 +02:00
/*
QueryUtils ( Test ) - checking various utils provided for dealing with config queries
2010-12-17 23:28:49 +01:00
2010-04-13 06:37:21 +02:00
Copyright ( C ) Lumiera . org
2008 , Hermann Vosseler < Ichthyostega @ web . de >
2010-12-17 23:28:49 +01:00
2010-04-13 06:37:21 +02:00
This program is free software ; you can redistribute it and / or
modify it under the terms of the GNU General Public License as
2010-12-17 23:28:49 +01:00
published by the Free Software Foundation ; either version 2 of
the License , or ( at your option ) any later version .
2010-04-13 06:37:21 +02:00
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
2010-12-17 23:28:49 +01:00
2010-04-13 06:37:21 +02:00
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
2010-12-17 23:28:49 +01:00
2010-04-13 06:37:21 +02:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include "lib/test/run.hpp"
# include "lib/util.hpp"
# include "lib/util-foreach.hpp"
# include "lib/cmdline.hpp"
# include "lib/query.hpp"
# include "query/querydiagnostics.hpp"
# include <tr1/functional>
# include <iostream>
2012-11-26 01:22:01 +01:00
using lib : : Query ;
2011-02-05 23:53:37 +01:00
using lib : : Cmdline ;
2010-04-13 06:37:21 +02:00
using util : : isnil ;
using util : : contains ;
using util : : for_each ;
using std : : tr1 : : placeholders : : _1 ;
using std : : tr1 : : bind ;
using std : : string ;
using std : : cout ;
using std : : endl ;
2012-11-26 01:22:01 +01:00
namespace lib {
2010-04-13 06:37:21 +02:00
namespace query {
namespace test {
struct Thing
{
virtual ~ Thing ( ) { } // add RTTI for Query.asKey();
} ;
/************************************************************************
* @ test check the various small helpers and utilities we utilise
* for dealing with ConfigQuery
*/
class QueryUtils_test : public Test
{
virtual void
run ( Arg arg )
{
if ( isnil ( arg ) ) arg = Cmdline ( " Query normaliseID extractID removeTerm countPred " ) ;
if ( contains ( arg , " Query " ) ) check_Query ( ) ;
if ( contains ( arg , " normaliseID " ) ) check_normaliseID ( ) ;
if ( contains ( arg , " extractID " ) ) check_extractID ( ) ;
if ( contains ( arg , " removeTerm " ) ) check_removeTerm ( ) ;
if ( contains ( arg , " countPred " ) ) check_countPred ( ) ;
}
/** @test Query wrapper class basics */
void
check_Query ( )
{
2012-11-26 01:22:01 +01:00
UNIMPLEMENTED ( " generate a generic query key " ) ; ////////////////////////////////////////////////////////////////////////////////////////////TODO
// cout << Query<Thing> ("I am writing a test sentence.").asKey() << endl;////////////////////////////////////////////////////////////////////////////////////////////TODO
2010-04-13 06:37:21 +02:00
}
/** @test sanitising and normalising various tokens */
void
check_normaliseID ( )
{
Cmdline tokens ( " a A AA dufte 1a _1 A_A BÄH " ) ;
tokens . push_back ( " " ) ;
2010-04-17 01:56:14 +02:00
tokens . push_back ( " White \t space " ) ;
2010-04-13 06:37:21 +02:00
tokens . push_back ( " §&Ω%€GΩ%€ar ☠☠☠ baäääääge!!!!! " ) ;
cout < < " ..original : " < < tokens < < " : " < < endl ;
for_each ( tokens , normaliseID , _1 ) ;
cout < < " normalised : " < < tokens < < " : " < < endl ;
}
/** @test the simple regexp extracting a parameter token */
void
check_extractID ( )
{
2010-12-10 02:55:40 +01:00
CHECK ( " tok " = = extractID ( " pred " , " pred(tok). " ) ) ;
CHECK ( " tok " = = extractID ( " pred " , " pred( tok ) " ) ) ;
CHECK ( " tok " = = extractID ( " pred " , " pred(tok), pred(tux). " ) ) ;
CHECK ( " tok " = = extractID ( " pred " , " other(xyz) pred(tok) pred(tux) " ) ) ;
CHECK ( " tok " = = extractID ( " pred " , " some( pred(tok) " ) ) ;
2010-04-13 06:37:21 +02:00
2010-12-10 02:55:40 +01:00
CHECK ( isnil ( extractID ( " pred " , " pred (tok) " ) ) ) ;
CHECK ( isnil ( extractID ( " pred " , " pred tok) " ) ) ) ;
CHECK ( isnil ( extractID ( " pred " , " pred(tok " ) ) ) ;
2010-04-13 06:37:21 +02:00
}
/** @test the regexp based cutting of a term with given symbol */
void
check_removeTerm ( )
{
// successful------Symbol---input-string----------------------extracted------remaining-------------
2010-12-10 02:55:40 +01:00
CHECK_removeTerm ( " pred " , " pred(tok). " , " pred(tok) " , " . " ) ;
CHECK_removeTerm ( " pred " , " pred( tok ) " , " pred(tok) " , " " ) ;
CHECK_removeTerm ( " pred " , " pred(tok), pred(tux). " , " pred(tok) " , " pred(tux). " ) ;
CHECK_removeTerm ( " pred " , " other(xyz) pred(tok) pred(tux) " , " pred(tok) " , " other(xyz) pred(tux) " ) ;
CHECK_removeTerm ( " pred " , " some( pred(tok) " , " pred(tok) " , " some( " ) ;
2010-04-13 06:37:21 +02:00
// not successful
2010-12-10 02:55:40 +01:00
CHECK_removeTerm ( " pred " , " pred (tok " , " " , " pred (tok " ) ;
CHECK_removeTerm ( " pred " , " pred tok) " , " " , " pred tok) " ) ;
CHECK_removeTerm ( " pred " , " pred(tok " , " " , " pred(tok " ) ;
2010-04-13 06:37:21 +02:00
}
void
2010-12-10 02:55:40 +01:00
CHECK_removeTerm ( Symbol sym , string input , string extracted , string modified )
2010-04-13 06:37:21 +02:00
{
2010-12-10 02:55:40 +01:00
CHECK ( extracted = = removeTerm ( sym , input ) ) ;
CHECK ( modified = = input ) ;
2010-04-13 06:37:21 +02:00
}
/** @test counting of predicates in a query
* ( currently 4 / 08 regexp based . . . )
*/
void
check_countPred ( )
{
for ( uint i = 1 ; i < = 30 ; + + i )
2010-12-10 02:55:40 +01:00
CHECK ( i = = countPred ( garbage_query ( i ) ) ) ;
2010-04-13 06:37:21 +02:00
}
} ;
/** Register this test class... */
LAUNCHER ( QueryUtils_test , " unit query " ) ;
2012-11-26 01:22:01 +01:00
} } } // namespace lib::query::test