File indexing completed on 2024-04-28 08:40:11
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 }