File indexing completed on 2024-04-21 04:48:06

0001 /***************************************************************************
0002  *   Copyright (c) 2009 Sven Krohlas <sven@asbest-online.de>               *
0003  *                                                                         *
0004  *   This program is free software; you can redistribute it and/or modify  *
0005  *   it under the terms of the GNU General Public License as published by  *
0006  *   the Free Software Foundation; either version 2 of the License, or     *
0007  *   (at your option) any later version.                                   *
0008  *                                                                         *
0009  *   This program is distributed in the hope that it will be useful,       *
0010  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
0011  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
0012  *   GNU General Public License for more details.                          *
0013  *                                                                         *
0014  *   You should have received a copy of the GNU General Public License     *
0015  *   along with this program; if not, write to the                         *
0016  *   Free Software Foundation, Inc.,                                       *
0017  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
0018  ***************************************************************************/
0019 
0020 #include "TestExpression.h"
0021 
0022 #include "core/support/Debug.h"
0023 #include "core-impl/collections/support/Expression.h"
0024 
0025 #include <QTest>
0026 
0027 QTEST_GUILESS_MAIN( TestExpression )
0028 
0029 //required for Debug.h
0030 QMutex Debug::mutex;
0031 
0032 TestExpression::TestExpression()
0033 {
0034 }
0035 
0036 void TestExpression::testParse()
0037 {
0038     ParsedExpression result;
0039     expression_element element;
0040     result = ExpressionParser::parse( "" );
0041     QCOMPARE( result.isEmpty(), true );
0042 
0043     result = ExpressionParser::parse( "love artist:cure album:\"Best of\" year:<1990 playcount:>2 -score:<50" );
0044     int i = 6;
0045     QCOMPARE( result.size(), i );
0046 
0047     while( !result.isEmpty() )
0048     {
0049         element = result.takeFirst().takeFirst();
0050 
0051         if( element.text == "love" )
0052         {
0053             QCOMPARE( element.field, QString( "" ) );
0054             QCOMPARE( element.negate, false );
0055             QVERIFY( element.match == expression_element::Contains );
0056         }
0057 
0058         else if( element.text == "cure" )
0059         {
0060             QCOMPARE( element.field, QString( "artist" ) );
0061             QCOMPARE( element.negate, false );
0062             QVERIFY( element.match == expression_element::Contains );
0063         }
0064 
0065         else if( element.text == "Best of" )
0066         {
0067             QCOMPARE( element.field, QString( "album" ) );
0068             QCOMPARE( element.negate, false );
0069             QVERIFY( element.match == expression_element::Contains );
0070         }
0071 
0072         else if( element.text == "1990" )
0073         {
0074             QCOMPARE( element.field, QString( "year" ) );
0075             QCOMPARE( element.negate, false );
0076             QVERIFY( element.match == expression_element::Less );
0077         }
0078 
0079         else if( element.text == "2" )
0080         {
0081             QCOMPARE( element.field, QString( "playcount" ) );
0082             QCOMPARE( element.negate, false );
0083             QVERIFY( element.match == expression_element::More );
0084         }
0085 
0086         else if( element.text == "50" )
0087         {
0088             QCOMPARE( element.field, QString( "score" ) );
0089             QCOMPARE( element.negate, true );
0090             QVERIFY( element.match == expression_element::Less );
0091         }
0092 
0093         i--;
0094         QCOMPARE( result.size(), i );
0095     }
0096 
0097     /* another more complex one */
0098     result = ExpressionParser::parse( "artist:cure OR album:\"Best of\" OR year:2009" );
0099     i = 1;
0100     QCOMPARE( result.size(), i ); // only 1 or_list
0101 
0102     QList<expression_element> elementList;
0103 
0104     if( !result.isEmpty() )
0105         elementList = result.at(0);
0106 
0107     QCOMPARE( elementList.size(), 3 );
0108 
0109     while( !elementList.isEmpty() )
0110     {
0111         element = elementList.takeFirst();
0112 
0113         if( element.text == "cure" )
0114         {
0115             QCOMPARE( element.field, QString( "artist" ) );
0116             QCOMPARE( element.negate, false );
0117             QVERIFY( element.match == expression_element::Contains );
0118         }
0119 
0120         else if( element.text == "Best of" )
0121         {
0122             QCOMPARE( element.field, QString( "album" ) );
0123             QCOMPARE( element.negate, false );
0124             QVERIFY( element.match == expression_element::Contains );
0125         }
0126 
0127         else if( element.text == "2009" )
0128         {
0129             QCOMPARE( element.field, QString( "year" ) );
0130             QCOMPARE( element.negate, false );
0131             QVERIFY( element.match == expression_element::Contains );
0132         }
0133     }
0134 }
0135 
0136 void TestExpression::testIsAdvancedExpression()
0137 {
0138     QCOMPARE( ExpressionParser::isAdvancedExpression( "" ), false );
0139 
0140     QCOMPARE( ExpressionParser::isAdvancedExpression( "test" ), false );
0141     QCOMPARE( ExpressionParser::isAdvancedExpression( "foo bar" ), false );
0142     QCOMPARE( ExpressionParser::isAdvancedExpression( "\"foo bar\"" ), true );
0143     QCOMPARE( ExpressionParser::isAdvancedExpression( "artist:cure" ), true );
0144     QCOMPARE( ExpressionParser::isAdvancedExpression( "year:<1990" ), true );
0145     QCOMPARE( ExpressionParser::isAdvancedExpression( "artist:cure year:<1990" ), true );
0146     QCOMPARE( ExpressionParser::isAdvancedExpression( "artist:cure AND year:<1990" ), true );
0147     QCOMPARE( ExpressionParser::isAdvancedExpression( "artist:cure OR year:<1990" ), true );
0148     QCOMPARE( ExpressionParser::isAdvancedExpression( "-artist:madonna" ), true );
0149     QCOMPARE( ExpressionParser::isAdvancedExpression( "album:\"Best of\"" ), true );
0150 }