1 /***************************************************************************
2  * SPDX-FileCopyrightText: 2021 S. MANKOWSKI stephane@mankowski.fr
3  * SPDX-FileCopyrightText: 2021 G. DE BURE support@mankowski.fr
4  * SPDX-License-Identifier: GPL-3.0-or-later
5  ***************************************************************************/
6 /** @file
7  * This file is a test script.
8  *
9  * @author Stephane MANKOWSKI / Guillaume DE BURE
10  */
11 #include "skgtestmacro.h"
12 
13 /**
14  * The main function of the unit test
15  * @param argc the number of arguments
16  * @param argv the list of arguments
17  */
test_getPeriodWhereClause(int & nberror,int & nbcheck,bool showonlyfailures)18 void test_getPeriodWhereClause(int& nberror, int& nbcheck, bool showonlyfailures)
19 {
20     SKGTEST(QStringLiteral("CONV:getPeriodWhereClause"), SKGServices::getPeriodWhereClause(QStringLiteral("2014"), QStringLiteral("my_date"), QStringLiteral("<")), QStringLiteral("(STRFTIME('%Y',my_date)<'2014' OR my_date='0000-00-00')"))
21     SKGTEST(QStringLiteral("CONV:getPeriodWhereClause"), SKGServices::getPeriodWhereClause(QStringLiteral("2014")), QStringLiteral("STRFTIME('%Y',d_date)='2014'"))
22     SKGTEST(QStringLiteral("CONV:getPeriodWhereClause"), SKGServices::getPeriodWhereClause(QStringLiteral("2014-02")), QStringLiteral("STRFTIME('%Y-%m',d_date)='2014-02'"))
23     SKGTEST(QStringLiteral("CONV:getPeriodWhereClause"), SKGServices::getPeriodWhereClause(QStringLiteral("2014-10")), QStringLiteral("STRFTIME('%Y-%m',d_date)='2014-10'"))
24     SKGTEST(QStringLiteral("CONV:getPeriodWhereClause"), SKGServices::getPeriodWhereClause(QStringLiteral("2014-Q2")), QStringLiteral("STRFTIME('%Y',d_date)||'-Q'||(CASE WHEN STRFTIME('%m',d_date)<='03' THEN '1' WHEN STRFTIME('%m',d_date)<='06' THEN '2' WHEN STRFTIME('%m',d_date)<='09' THEN '3' ELSE '4' END)='2014-Q2'"))
25     SKGTEST(QStringLiteral("CONV:getPeriodWhereClause"), SKGServices::getPeriodWhereClause(QStringLiteral("2014-S2")), QStringLiteral("STRFTIME('%Y',d_date)||'-S'||(CASE WHEN STRFTIME('%m',d_date)<='06' THEN '1' ELSE '2' END)='2014-S2'"))
26     SKGTEST(QStringLiteral("CONV:getPeriodWhereClause"), SKGServices::getPeriodWhereClause(QStringLiteral("INVALID STRING")), QStringLiteral("1=0"))
27     SKGTEST(QStringLiteral("CONV:getPeriodWhereClause"), SKGServices::getPeriodWhereClause(QStringLiteral("ALL")), QStringLiteral("1=1"))
28 }
29 
test_getNeighboringPeriod(int & nberror,int & nbcheck,bool showonlyfailures)30 void test_getNeighboringPeriod(int& nberror, int& nbcheck, bool showonlyfailures)
31 {
32     SKGTEST(QStringLiteral("CONV:getNeighboringPeriod"), SKGServices::getNeighboringPeriod(QStringLiteral("2014")), QStringLiteral("2013"))
33     SKGTEST(QStringLiteral("CONV:getNeighboringPeriod"), SKGServices::getNeighboringPeriod(QStringLiteral("2014-10")), QStringLiteral("2014-09"))
34     SKGTEST(QStringLiteral("CONV:getNeighboringPeriod"), SKGServices::getNeighboringPeriod(QStringLiteral("2014-01")), QStringLiteral("2013-12"))
35     SKGTEST(QStringLiteral("CONV:getNeighboringPeriod"), SKGServices::getNeighboringPeriod(QStringLiteral("2014-Q2")), QStringLiteral("2014-Q1"))
36     SKGTEST(QStringLiteral("CONV:getNeighboringPeriod"), SKGServices::getNeighboringPeriod(QStringLiteral("2014-Q1")), QStringLiteral("2013-Q4"))
37     SKGTEST(QStringLiteral("CONV:getNeighboringPeriod"), SKGServices::getNeighboringPeriod(QStringLiteral("2014-S2")), QStringLiteral("2014-S1"))
38     SKGTEST(QStringLiteral("CONV:getNeighboringPeriod"), SKGServices::getNeighboringPeriod(QStringLiteral("2014-S1")), QStringLiteral("2013-S2"))
39     SKGTEST(QStringLiteral("CONV:getNeighboringPeriod"), SKGServices::getNeighboringPeriod(QStringLiteral("INVALID STRING")), QStringLiteral("1=0"))
40     SKGTEST(QStringLiteral("CONV:getNeighboringPeriod"), SKGServices::getNeighboringPeriod(QStringLiteral("ALL")), QStringLiteral("1=0"))
41 
42     SKGTEST(QStringLiteral("CONV:getNeighboringPeriod +1"), SKGServices::getNeighboringPeriod(QStringLiteral("2014"), 1), QStringLiteral("2015"))
43     SKGTEST(QStringLiteral("CONV:getNeighboringPeriod +1"), SKGServices::getNeighboringPeriod(QStringLiteral("2014-10"), 1), QStringLiteral("2014-11"))
44     SKGTEST(QStringLiteral("CONV:getNeighboringPeriod +1"), SKGServices::getNeighboringPeriod(QStringLiteral("2014-01"), 1), QStringLiteral("2014-02"))
45     SKGTEST(QStringLiteral("CONV:getNeighboringPeriod +1"), SKGServices::getNeighboringPeriod(QStringLiteral("2014-Q4"), 1), QStringLiteral("2015-Q1"))
46     SKGTEST(QStringLiteral("CONV:getNeighboringPeriod +1"), SKGServices::getNeighboringPeriod(QStringLiteral("2014-Q2"), 1), QStringLiteral("2014-Q3"))
47     SKGTEST(QStringLiteral("CONV:getNeighboringPeriod +1"), SKGServices::getNeighboringPeriod(QStringLiteral("2014-Q1"), 1), QStringLiteral("2014-Q2"))
48     SKGTEST(QStringLiteral("CONV:getNeighboringPeriod +1"), SKGServices::getNeighboringPeriod(QStringLiteral("2014-S2"), 1), QStringLiteral("2015-S1"))
49     SKGTEST(QStringLiteral("CONV:getNeighboringPeriod +1"), SKGServices::getNeighboringPeriod(QStringLiteral("2014-S1"), 1), QStringLiteral("2014-S2"))
50 }
51 
test_periodToDate(int & nberror,int & nbcheck,bool showonlyfailures)52 void test_periodToDate(int& nberror, int& nbcheck, bool showonlyfailures)
53 {
54     SKGTEST(QStringLiteral("CONV:periodToDate"), SKGServices::periodToDate(QStringLiteral("2014")).toString(), QDate(2014, 12, 31).toString())
55     SKGTEST(QStringLiteral("CONV:periodToDate"), SKGServices::periodToDate(QStringLiteral("2014-S1")).toString(), QDate(2014, 6, 30).toString())
56     SKGTEST(QStringLiteral("CONV:periodToDate"), SKGServices::periodToDate(QStringLiteral("2014-S2")).toString(), QDate(2014, 12, 31).toString())
57     SKGTEST(QStringLiteral("CONV:periodToDate"), SKGServices::periodToDate(QStringLiteral("2014-Q1")).toString(), QDate(2014, 3, 31).toString())
58     SKGTEST(QStringLiteral("CONV:periodToDate"), SKGServices::periodToDate(QStringLiteral("2014-Q2")).toString(), QDate(2014, 6, 30).toString())
59     SKGTEST(QStringLiteral("CONV:periodToDate"), SKGServices::periodToDate(QStringLiteral("2014-Q3")).toString(), QDate(2014, 9, 30).toString())
60     SKGTEST(QStringLiteral("CONV:periodToDate"), SKGServices::periodToDate(QStringLiteral("2014-Q4")).toString(), QDate(2014, 12, 31).toString())
61     SKGTEST(QStringLiteral("CONV:periodToDate"), SKGServices::periodToDate(QStringLiteral("2014-01")).toString(), QDate(2014, 1, 31).toString())
62     SKGTEST(QStringLiteral("CONV:periodToDate"), SKGServices::periodToDate(QStringLiteral("2014-07")).toString(), QDate(2014, 7, 31).toString())
63     SKGTEST(QStringLiteral("CONV:periodToDate"), SKGServices::periodToDate(QStringLiteral("ALL")).toString(), QDate::currentDate().toString())
64 }
65 
test_partialStringToDate(int & nberror,int & nbcheck,bool showonlyfailures)66 void test_partialStringToDate(int& nberror, int& nbcheck, bool showonlyfailures)
67 {
68     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("INVALID"), true).toString(), QLatin1String(""))
69 
70     QDate currentMonth10 = QDate::currentDate();
71     currentMonth10 = currentMonth10.addDays(10 - QDate::currentDate().day());
72     QDate current0102(QDate::currentDate().year(), 2, 1);
73     QDate current3112(QDate::currentDate().year(), 12, 31);
74     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("10"), true).toString(), (currentMonth10 <= QDate::currentDate() ? currentMonth10 : currentMonth10.addMonths(-1)).toString())
75     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("1/2"), true).toString(), (current0102 <= QDate::currentDate() ? current0102 : current0102.addYears(-1)).toString())
76     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("31/12"), true).toString(), (current3112 <= QDate::currentDate() ? current3112 : current3112.addYears(-1)).toString())
77 
78     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("1/2/14"), true).toString(), QDate(2014, 2, 1).toString())
79     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("1/2/99"), true).toString(), QDate(1999, 2, 1).toString())
80     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("1/2/014"), true).toString(), QDate(2014, 2, 1).toString())
81     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("1/2/199"), true).toString(), QDate(1199, 2, 1).toString())
82     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("1/2/1014"), true).toString(), QDate(1014, 2, 1).toString())
83     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("1/2/2222"), true).toString(), QDate(2222, 2, 1).toString())
84 
85     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("10"), false).toString(), (currentMonth10 >= QDate::currentDate() ? currentMonth10 : currentMonth10.addMonths(1)).toString())
86     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("1/2"), false).toString(), (current0102 >= QDate::currentDate() ? current0102 : current0102.addYears(1)).toString())
87     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("1/2/14"), false).toString(), QDate(2114, 2, 1).toString())
88     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("1/2/99"), false).toString(), QDate(2099, 2, 1).toString())
89     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("1/2/014"), false).toString(), QDate(3014, 2, 1).toString())
90     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("1/2/199"), false).toString(), QDate(2199, 2, 1).toString())
91     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("1/2/1014"), false).toString(), QDate(1014, 2, 1).toString())
92     SKGTEST(QStringLiteral("CONV:partialStringToDate"), SKGServices::partialStringToDate(QStringLiteral("1/2/2222"), false).toString(), QDate(2222, 2, 1).toString())
93 }
94 
test_conversions(int & nberror,int & nbcheck,bool showonlyfailures)95 void test_conversions(int& nberror, int& nbcheck, bool showonlyfailures)
96 {
97     SKGTEST(QStringLiteral("CONV:dateToPeriod"), SKGServices::dateToPeriod(QDate(2013, 03, 05), QStringLiteral("D")), QStringLiteral("2013-03-05"))
98     SKGTEST(QStringLiteral("CONV:dateToPeriod"), SKGServices::dateToPeriod(QDate(2013, 01, 01), QStringLiteral("W")), QStringLiteral("2013-W01"))
99     SKGTEST(QStringLiteral("CONV:dateToPeriod"), SKGServices::dateToPeriod(QDate(2013, 03, 05), QStringLiteral("W")), QStringLiteral("2013-W10"))
100     SKGTEST(QStringLiteral("CONV:dateToPeriod"), SKGServices::dateToPeriod(QDate(2013, 03, 05), QStringLiteral("M")), QStringLiteral("2013-03"))
101     SKGTEST(QStringLiteral("CONV:dateToPeriod"), SKGServices::dateToPeriod(QDate(2013, 03, 05), QStringLiteral("Q")), QStringLiteral("2013-Q1"))
102     SKGTEST(QStringLiteral("CONV:dateToPeriod"), SKGServices::dateToPeriod(QDate(2013, 03, 05), QStringLiteral("S")), QStringLiteral("2013-S1"))
103     SKGTEST(QStringLiteral("CONV:dateToPeriod"), SKGServices::dateToPeriod(QDate(2013, 03, 05), QStringLiteral("Y")), QStringLiteral("2013"))
104 
105     SKGTEST(QStringLiteral("CONV:intToString"), SKGServices::intToString(10), QStringLiteral("10"))
106     SKGTEST(QStringLiteral("CONV:intToString"), SKGServices::intToString(5490990004), QStringLiteral("5490990004"))
107     SKGTEST(QStringLiteral("CONV:stringToInt"), SKGServices::stringToInt(QStringLiteral("56")), 56)
108     SKGTEST(QStringLiteral("CONV:stringToInt"), SKGServices::stringToInt(QStringLiteral("HELLO")), 0)
109     SKGTEST(QStringLiteral("CONV:stringToInt"), SKGServices::stringToInt(QStringLiteral("5HELLO")), 0)
110     SKGTEST(QStringLiteral("CONV:stringToInt"), SKGServices::stringToInt(QStringLiteral("5490990004")), 5490990004)
111     SKGTEST(QStringLiteral("CONV:doubleToString"), SKGServices::doubleToString(10), QStringLiteral("10"))
112     SKGTEST(QStringLiteral("CONV:doubleToString"), SKGServices::doubleToString(5.3), QStringLiteral("5.3"))
113     SKGTEST(QStringLiteral("CONV:doubleToString"), SKGServices::doubleToString(11111115.33), QStringLiteral("11111115.33"))
114     SKGTEST(QStringLiteral("CONV:doubleToString"), SKGServices::doubleToString(119999.11), QStringLiteral("119999.11"))
115     SKGTEST(QStringLiteral("CONV:stringToDouble"), SKGServices::stringToDouble(QStringLiteral("10")) - 10, 0)
116     SKGTEST(QStringLiteral("CONV:stringToDouble"), SKGServices::stringToDouble(QStringLiteral("5.3")) - 5.3, 0)
117     SKGTEST(QStringLiteral("CONV:stringToDouble"), SKGServices::stringToDouble(QStringLiteral("11111115.33")) - 11111115.33, 0)
118     SKGTEST(QStringLiteral("CONV:stringToDouble"), SKGServices::stringToDouble(QStringLiteral("25,000.00")) - 25000.00, 0)
119     SKGTEST(QStringLiteral("CONV:stringToDouble"), SKGServices::stringToDouble(QStringLiteral("1.307,40")) - 1307.40, 0)
120     SKGTEST(QStringLiteral("CONV:stringToDouble"), SKGServices::stringToDouble(QStringLiteral("2 150,10")) - 2150.10, 0)
121     SKGTEST(QStringLiteral("CONV:stringToDouble"), SKGServices::stringToDouble(QStringLiteral("-$8.35")) + 8.35, 0)
122     SKGTEST(QStringLiteral("CONV:stringToDouble"), SKGServices::stringToDouble(QStringLiteral("8.35€")) - 8.35, 0)
123     SKGTEST(QStringLiteral("CONV:stringToDouble"), SKGServices::stringToDouble(QStringLiteral("1234.56e-02")) - 12.3456, 0)
124     SKGTEST(QStringLiteral("CONV:stringToDouble"), SKGServices::stringToDouble(QStringLiteral("31238/100")) - 312.38, 0)
125     SKGTEST(QStringLiteral("CONV:stringToDouble"), SKGServices::stringToDouble(QStringLiteral("31238/abc")), 0)
126     SKGTEST(QStringLiteral("CONV:stringToDouble"), SKGServices::stringToDouble(QStringLiteral("nan")), 0)
127     SKGTEST(QStringLiteral("CONV:stringToDouble"), SKGServices::stringToDouble(QStringLiteral("inf")), 1e300)
128     SKGTEST(QStringLiteral("CONV:stringToDouble"), SKGServices::stringToDouble(QStringLiteral("-inf")), -1e300)
129     SKGTEST(QStringLiteral("CONV:stringToDouble"), SKGServices::stringToDouble(QStringLiteral("00000000194065")), 194065)
130     SKGServices::timeToString(QDateTime());
131     SKGTEST(QStringLiteral("CONV:stringToTime"), SKGServices::timeToString(SKGServices::stringToTime(QStringLiteral("1970-07-16"))), QStringLiteral("1970-07-16 00:00:00"))
132     SKGTEST(QStringLiteral("CONV:stringToTime"), SKGServices::timeToString(SKGServices::stringToTime(QStringLiteral("2008-04-20"))), QStringLiteral("2008-04-20 00:00:00"))
133     SKGTEST(QStringLiteral("CONV:stringToTime"), SKGServices::dateToSqlString(SKGServices::stringToTime(QStringLiteral("1970-07-16"))), QStringLiteral("1970-07-16"))
134     SKGTEST(QStringLiteral("CONV:stringToTime"), SKGServices::dateToSqlString(SKGServices::stringToTime(QStringLiteral("2008-04-20"))), QStringLiteral("2008-04-20"))
135 
136     SKGTESTBOOL("CONV:SKGServices::getMicroTime", (SKGServices::getMicroTime() > 0), true)
137 
138     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("20080525"), QStringLiteral("YYYYMMDD")), QStringLiteral("2008-05-25"))
139     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("2008-05-25"), QStringLiteral("YYYY-MM-DD")), QStringLiteral("2008-05-25"))
140     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("2008-05-25 00:00:00"), QStringLiteral("YYYY-MM-DD")), QStringLiteral("2008-05-25"))
141 
142     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("05/25/08"), QStringLiteral("MM/DD/YY")), QStringLiteral("2008-05-25"))
143     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("05/25/78"), QStringLiteral("MM/DD/YY")), QStringLiteral("1978-05-25"))
144     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("05-25-08"), QStringLiteral("MM-DD-YY")), QStringLiteral("2008-05-25"))
145     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("05-25-78"), QStringLiteral("MM-DD-YY")), QStringLiteral("1978-05-25"))
146 
147     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("5/25/08"), QStringLiteral("MM/DD/YY")), QStringLiteral("2008-05-25"))
148     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("5/25/78"), QStringLiteral("MM/DD/YY")), QStringLiteral("1978-05-25"))
149     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("5-25-08"), QStringLiteral("MM-DD-YY")), QStringLiteral("2008-05-25"))
150     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("5-6-08"), QStringLiteral("MM-DD-YY")), QStringLiteral("2008-05-06"))
151     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("5-25-78"), QStringLiteral("MM-DD-YY")), QStringLiteral("1978-05-25"))
152 
153     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("25/05/08"), QStringLiteral("DD/MM/YY")), QStringLiteral("2008-05-25"))
154     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("25/05/78"), QStringLiteral("DD/MM/YY")), QStringLiteral("1978-05-25"))
155     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("25-05-08"), QStringLiteral("DD-MM-YY")), QStringLiteral("2008-05-25"))
156     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("25-05-78"), QStringLiteral("DD-MM-YY")), QStringLiteral("1978-05-25"))
157 
158     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("25/05/2008"), QStringLiteral("DD/MM/YYYY")), QStringLiteral("2008-05-25"))
159     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("25-05-2008"), QStringLiteral("DD-MM-YYYY")), QStringLiteral("2008-05-25"))
160 
161     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("5/25/2008"), QStringLiteral("MM/DD/YYYY")), QStringLiteral("2008-05-25"))
162     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("5-25-2008"), QStringLiteral("MM-DD-YYYY")), QStringLiteral("2008-05-25"))
163     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("5-6-2008"), QStringLiteral("MM-DD-YYYY")), QStringLiteral("2008-05-06"))
164     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("5-6-8"), QStringLiteral("MM-DD-YYYY")), QStringLiteral("2008-05-06"))
165 
166     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("3.21.01"), QStringLiteral("MM-DD-YY")), QStringLiteral("2001-03-21"))
167     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("1/ 1' 6"), QStringLiteral("DD-MM-YY")), QStringLiteral("2006-01-01"))
168     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("6/ 1/94"), QStringLiteral("DD-MM-YY")), QStringLiteral("1994-01-06"))
169     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("21/12'2001"), QStringLiteral("DD-MM-YYYY")), QStringLiteral("2001-12-21"))
170     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("21122001"), QStringLiteral("DDMMYYYY")), QStringLiteral("2001-12-21"))
171     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("12212001"), QStringLiteral("MMDDYYYY")), QStringLiteral("2001-12-21"))
172     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("010203"), QStringLiteral("MMDDYY")), QStringLiteral("2003-01-02"))
173     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("010203"), QStringLiteral("DDMMYY")), QStringLiteral("2003-02-01"))
174     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("3/9/04"), QStringLiteral("DD-MM-YY")), QStringLiteral("2004-09-03"))
175     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("31Dec2005"), QStringLiteral("DDMMMYYYY")), QStringLiteral("2005-12-31"))
176     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("31-Dec-2005"), QStringLiteral("DD-MMM-YYYY")), QStringLiteral("2005-12-31"))
177     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("31/Dec/2005"), QStringLiteral("DD/MMM/YYYY")), QStringLiteral("2005-12-31"))
178     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("31Dec05"), QStringLiteral("DDMMMYY")), QStringLiteral("2005-12-31"))
179     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("31-Dec-05"), QStringLiteral("DD-MMM-YY")), QStringLiteral("2005-12-31"))
180     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("31/Dec/05"), QStringLiteral("DD/MMM/YY")), QStringLiteral("2005-12-31"))
181     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("31DEC2005"), QStringLiteral("DDMMMYYYY")), QStringLiteral("2005-12-31"))
182     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("INVALIDDATE"), QStringLiteral("DD-MM-YY")), SKGServices::dateToSqlString(QDateTime::currentDateTime()))
183     SKGTEST(QStringLiteral("STR:dateToSqlString"), SKGServices::dateToSqlString(QStringLiteral("02.01.2015"), QStringLiteral("DD-MM-YYYY")), QStringLiteral("2015-01-02"))
184 }
185 
test_nbWorkingDays(int & nberror,int & nbcheck,bool showonlyfailures)186 void test_nbWorkingDays(int& nberror, int& nbcheck, bool showonlyfailures)
187 {
188     SKGTEST(QStringLiteral("SKGServices::nbWorkingDays"), SKGServices::nbWorkingDays(QDate(2010, 9, 3), QDate(2010, 9, 6)), 1)
189     SKGTEST(QStringLiteral("SKGServices::nbWorkingDays"), SKGServices::nbWorkingDays(QDate(2010, 9, 6), QDate(2010, 9, 3)), 1)
190     SKGTEST(QStringLiteral("SKGServices::nbWorkingDays"), SKGServices::nbWorkingDays(QDate(2010, 9, 3), QDate(2010, 9, 3)), 1)
191     SKGTEST(QStringLiteral("SKGServices::nbWorkingDays"), SKGServices::nbWorkingDays(QDate(2010, 9, 1), QDate(2010, 9, 3)), 2)
192     SKGTEST(QStringLiteral("SKGServices::nbWorkingDays"), SKGServices::nbWorkingDays(QDate(2010, 9, 1), QDate(2010, 9, 8)), 5)
193 }
194 
test_getnext(int & nberror,int & nbcheck,bool showonlyfailures)195 void test_getnext(int& nberror, int& nbcheck, bool showonlyfailures)
196 {
197     SKGTEST(QStringLiteral("SKGServices::getNextString"), SKGServices::getNextString(QStringLiteral("12345")), QStringLiteral("12346"))
198     SKGTEST(QStringLiteral("SKGServices::getNextString"), SKGServices::getNextString(QStringLiteral("9")), QStringLiteral("10"))
199 }
200 
test_errors(int & nberror,int & nbcheck,bool showonlyfailures)201 void test_errors(int& nberror, int& nbcheck, bool showonlyfailures)
202 {
203     {
204         SKGTraces::cleanProfilingStatistics();
205 
206         SKGError err;
207         SKGTEST(QStringLiteral("ERR:Default RC"), err.getReturnCode(), 0)
208         SKGTEST(QStringLiteral("ERR:Default RC"), err.getReturnCode(), 0)
209         SKGTESTBOOL("ERR:isWarning", err.isWarning(), false)
210         SKGTESTBOOL("ERR:isSucceeded", err.isSucceeded(), true)
211         SKGTESTBOOL("ERR:isFailed", err.isFailed(), false)
212         SKGTESTBOOL("ERR:!", !err, true)
213         SKGTESTBOOL("ERR:operator bool", err, false)
214         SKGTESTBOOL("ERR:getPreviousError", (err.getPreviousError() == nullptr), true)
215 
216         SKGTEST(QStringLiteral("ERR:Default message"), err.getMessage(), QLatin1String(""))
217         err.setReturnCode(10);
218         err.setMessage(QStringLiteral("Invalid parameter"));
219         SKGTEST(QStringLiteral("ERR:getHistoricalSize"), err.getHistoricalSize(), 0)
220         SKGTEST(QStringLiteral("ERR:RC 10"), err.getReturnCode(), 10)
221         SKGTEST(QStringLiteral("ERR:MSG Invalid parameter"), err.getMessage(), QStringLiteral("Invalid parameter"))
222         err.addError(11, QStringLiteral("Message 11"));
223         SKGTESTBOOL("ERR:isWarning", err.isWarning(), false)
224         SKGTESTBOOL("ERR:isSucceeded", err.isSucceeded(), false)
225         SKGTESTBOOL("ERR:isFailed", err.isFailed(), true)
226         SKGTESTBOOL("ERR:!", !err, false)
227         SKGTESTBOOL("ERR:operator bool", err, true)
228 
229         SKGTEST(QStringLiteral("ERR:getHistoricalSize"), err.getHistoricalSize(), 1)
230         err.addError(-12, QStringLiteral("Message 12"));
231         SKGTESTBOOL("ERR:isWarning", err.isWarning(), true)
232         SKGTESTBOOL("ERR:isSucceeded", err.isSucceeded(), true)
233         SKGTESTBOOL("ERR:isFailed", err.isFailed(), false)
234         SKGTESTBOOL("ERR:!", !err, true)
235         SKGTESTBOOL("ERR:operator bool", err, false)
236         SKGTEST(QStringLiteral("ERR:getHistoricalSize"), err.getHistoricalSize(), 2)
237         SKGTEST(QStringLiteral("ERR:getFullMessageWithHistorical"), err.getFullMessageWithHistorical(), QStringLiteral("[WAR--12]: Message 12\n[ERR-11]: Message 11\n[ERR-10]: Invalid parameter"))
238     }
239 
240     {
241         SKGTraces::cleanProfilingStatistics();
242 
243         SKGError err;
244         err.setReturnCode(10).setMessage(QStringLiteral("Invalid parameter")).addError(11, QStringLiteral("Message 11"));
245         SKGTEST(QStringLiteral("ERR:getHistoricalSize"), err.getHistoricalSize(), 1)
246         SKGTEST(QStringLiteral("ERR:RC 10"), err.getReturnCode(), 11)
247         SKGTEST(QStringLiteral("ERR:MSG Message 11"), err.getMessage(), QStringLiteral("Message 11"))
248         err.setProperty(QStringLiteral("ABC"));
249         SKGTEST(QStringLiteral("ERR:Property ABC"), err.getProperty(), QStringLiteral("ABC"))
250     }
251 }
252 
test_getDateFormat(int & nberror,int & nbcheck,bool showonlyfailures)253 void test_getDateFormat(int& nberror, int& nbcheck, bool showonlyfailures)
254 {
255     {
256         QStringList dates;
257         dates << QStringLiteral("19/08/2008");
258         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("DD-MM-YYYY"))
259     }
260     {
261         QStringList dates;
262         dates << QStringLiteral("20080819");
263         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("YYYYMMDD"))
264     }
265     {
266         QStringList dates;
267         dates << QStringLiteral("10141989");
268         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("MMDDYYYY"))
269     }
270     {
271         QStringList dates;
272         dates << QStringLiteral("14101989");
273         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("DDMMYYYY"))
274     }
275     {
276         QStringList dates;
277         dates << QStringLiteral("05/08/2008") << QStringLiteral("19/08/2008");
278         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("DD-MM-YYYY"))
279     }
280     {
281         QStringList dates;
282         dates << QStringLiteral("19/ 1' 6");
283         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("DD-MM-YYYY"))
284     }
285     {
286         QStringList dates;
287         dates << QStringLiteral("21/12'2001");
288         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("DD-MM-YYYY"))
289     }
290     {
291         QStringList dates;
292         dates << QStringLiteral("6/ 1/94");
293         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("DD-MM-YYYY"))
294     }
295     {
296         QStringList dates;
297         dates << QStringLiteral("10.29.07");
298         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("MM-DD-YY"))
299     }
300     {
301         QStringList dates;
302         dates << QStringLiteral("10.05.07");
303         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("DD-MM-YY"))
304     }
305     {
306         QStringList dates;
307         dates << QStringLiteral("2001.10.25");
308         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("YYYY-MM-DD"))
309     }
310     {
311         QStringList dates;
312         dates << QStringLiteral("45450116");
313         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("YYYYMMDD"))
314     }
315     {
316         QStringList dates;
317         dates << QStringLiteral("7/14' 0") << QStringLiteral("11/30/99");
318         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("MM-DD-YYYY"))
319     }
320     {
321         QStringList dates;
322         dates << QStringLiteral("10/ 8'10");
323         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("DD-MM-YYYY"))
324     }
325     {
326         QStringList dates;
327         dates << QStringLiteral("7/8/06");
328         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("DD-MM-YY"))
329     }
330     {
331         QStringList dates;
332         dates << QStringLiteral("7/8/06") << QStringLiteral("11/30/99") << QStringLiteral("7/14' 0");
333         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("MM-DD-YYYY"))
334     }
335     {
336         QStringList dates;
337         dates << QStringLiteral("3/9/04");
338         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("DD-MM-YY"))
339     }
340     {
341         QStringList dates;
342         dates << QStringLiteral("31Dec2005");
343         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("DDMMMYYYY"))
344     }
345     {
346         QStringList dates;
347         dates << QStringLiteral("31-Dec-05");
348         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("DD-MMM-YY"))
349     }
350     {
351         QStringList dates;
352         dates << QStringLiteral("2008-05-25 00:00:00");
353         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("YYYY-MM-DD"))
354     }
355     {
356         QStringList dates;
357         dates << QStringLiteral("2008-05-25 01:02:03");
358         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("YYYY-MM-DD"))
359     }
360     {
361         QStringList dates;
362         QFile inputFile(SKGTest::getTestPath(QStringLiteral("IN")) % "/dates.txt");
363         if (inputFile.open(QIODevice::ReadOnly)) {
364             QTextStream in(&inputFile);
365             while (!in.atEnd()) {
366                 QString l = in.readLine().trimmed();
367                 if (!l.isEmpty()) {
368                     dates << l;
369                 }
370             }
371 
372             inputFile.close();
373         }
374         SKGTEST(QStringLiteral("STR:dats.count"), dates.count(), 2364)
375         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("MM-DD-YY"))
376     }
377     {
378         QStringList dates;
379         dates << QStringLiteral("  7/8/06    ") << QLatin1String("");
380         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QStringLiteral("DD-MM-YY"))
381     }
382     {
383         QStringList dates;
384         dates << QStringLiteral("99999999") << QStringLiteral("9999999999");
385         SKGTEST(QStringLiteral("STR:getDateFormat"), SKGServices::getDateFormat(dates), QLatin1String(""))
386     }
387 }
388 
test_csv(int & nberror,int & nbcheck,bool showonlyfailures)389 void test_csv(int& nberror, int& nbcheck, bool showonlyfailures)
390 {
391     SKGTEST(QStringLiteral("STR:stringToCsv"), SKGServices::stringToCsv(QStringLiteral("ABC")), QStringLiteral("\"ABC\""))
392     SKGTEST(QStringLiteral("STR:stringToCsv"), SKGServices::stringToCsv(QStringLiteral("ABC;CDE")), QStringLiteral("\"ABC;CDE\""))
393     SKGTEST(QStringLiteral("STR:stringToCsv"), SKGServices::stringToCsv(QStringLiteral("AB \"C\" DE")), QStringLiteral("\"AB \"\"C\"\" DE\""))
394     SKGTEST(QStringLiteral("STR:stringToCsv"), SKGServices::stringToCsv(QStringLiteral("AB \"C\";DE")), QStringLiteral("\"AB \"\"C\"\";DE\""))
395 
396     QStringList parameters = SKGServices::splitCSVLine(QStringLiteral("52.33,\"9/28/2010\",52.36,231803,52.33,0.00,+0.15,-,0.00,-,0.00,0.00,0.00,0.00,\"- - -\",\"-\",-,\"n\",N/A,0,+15.82,+43.33%,9,672,-1.08,-2.02%,-,-,\"51.76 - 52.57\",0.00,0.00,N/A,N/A,N/A,N/A,\"-\",51.91,52.18,-,\"+0.29%\",N/A,N/A,\"N/A\",N/A,\"N/A\",N/A,N/A,N/A,-,N/A,\"11:35am\",N/A,211524,-,\"36.51 - 53.41\",\"- - +0.29%\",\"Paris\",N/A,\"DASSAULT SYST.\""), ',');
397     SKGTEST(QStringLiteral("STR:splitCSVLine count"), parameters.count(), 59)
398 
399     parameters = SKGServices::splitCSVLine(QStringLiteral("2013-04-02;transfer;\"a2\";'some text 2';-20,13"), ';', true);
400     SKGTEST(QStringLiteral("STR:splitCSVLine count"), parameters.count(), 5)
401     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[0], QStringLiteral("2013-04-02"))
402     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[1], QStringLiteral("transfer"))
403     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[2], QStringLiteral("a2"))
404     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[3], QStringLiteral("some text 2"))
405     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[4], QStringLiteral("-20,13"))
406 
407     parameters = SKGServices::splitCSVLine(QStringLiteral("\"A;'B\";'A;\"B'"), ';', true);
408     SKGTEST(QStringLiteral("STR:splitCSVLine count"), parameters.count(), 2)
409     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[0], QStringLiteral("A;'B"))
410     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[1], QStringLiteral("A;\"B"))
411 
412     SKGTEST(QStringLiteral("STR:stringToHtml"), SKGServices::stringToHtml(QStringLiteral("<hello>&<world>")), QStringLiteral("&lt;hello&gt;&amp;&lt;world&gt;"))
413     SKGTEST(QStringLiteral("STR:htmlToString"), SKGServices::htmlToString(QStringLiteral("&lt;hello&gt;&amp;&lt;world&gt;")), QStringLiteral("<hello>&<world>"))
414 
415     parameters = SKGServices::splitCSVLine(SKGServices::stringToCsv(QStringLiteral("Y")) % ';' % SKGServices::stringToCsv(QStringLiteral("A;B")));
416     SKGTEST(QStringLiteral("STR:splitCSVLine count"), parameters.count(), 2)
417     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[0], QStringLiteral("Y"))
418     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[1], QStringLiteral("A;B"))
419 
420     parameters = SKGServices::splitCSVLine(QStringLiteral("A;\"B;C\";D"));
421     SKGTEST(QStringLiteral("STR:splitCSVLine count"), parameters.count(), 3)
422     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[0], QStringLiteral("A"))
423     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[1], QStringLiteral("B;C"))
424     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[2], QStringLiteral("D"))
425 
426     parameters = SKGServices::splitCSVLine(QStringLiteral("'A';'B'"));
427     SKGTEST(QStringLiteral("STR:splitCSVLine count"), parameters.count(), 2)
428     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[0], QStringLiteral("A"))
429     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[1], QStringLiteral("B"))
430 
431     parameters = SKGServices::splitCSVLine(QStringLiteral("\"A ' B\",\"C\""));
432     SKGTEST(QStringLiteral("STR:splitCSVLine count"), parameters.count(), 2)
433     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[0], QStringLiteral("A ' B"))
434     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[1], QStringLiteral("C"))
435 
436     parameters = SKGServices::splitCSVLine(QStringLiteral("'A \" B','C'"));
437     SKGTEST(QStringLiteral("STR:splitCSVLine count"), parameters.count(), 2)
438     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[0], QStringLiteral("A \" B"))
439     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[1], QStringLiteral("C"))
440 
441     QChar realsep;
442     parameters = SKGServices::splitCSVLine(QStringLiteral("\"A\",18,\"B\""), ';', true, &realsep);
443     SKGTEST(QStringLiteral("STR:splitCSVLine count"), parameters.count(), 3)
444     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[0], QStringLiteral("A"))
445     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[1], QStringLiteral("18"))
446     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[2], QStringLiteral("B"))
447     SKGTEST(QStringLiteral("STR:sep"), realsep, ',')
448 
449     parameters = SKGServices::splitCSVLine(QStringLiteral("30/05/2008;RETRAIT ESPECES AGENCE;                                ;      100,00;DEBIT;"));
450     SKGTEST(QStringLiteral("STR:splitCSVLine count"), parameters.count(), 6)
451 
452     parameters = SKGServices::splitCSVLine(QStringLiteral("A|\"B\";\"C\""), '|', false);
453     SKGTEST(QStringLiteral("STR:splitCSVLine count"), parameters.count(), 2)
454     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[0], QStringLiteral("A"))
455     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[1], QStringLiteral("\"B\";\"C\""))
456 
457     parameters = SKGServices::splitCSVLine(QStringLiteral("+123 \"-abc def\" \"e:f\" e:f"), ' ', true);
458     SKGTEST(QStringLiteral("STR:splitCSVLine count"), parameters.count(), 4)
459     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[0], QStringLiteral("+123"))
460     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[1], QStringLiteral("-abc def"))
461     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[2], QStringLiteral("e:f"))
462     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[3], QStringLiteral("e:f"))
463 
464     parameters = SKGServices::splitCSVLine(QStringLiteral("A; \"B\"; \"C\" ;\"D\" ;E"), ';', true);
465     SKGTEST(QStringLiteral("STR:splitCSVLine count"), parameters.count(), 5)
466     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[0], QStringLiteral("A"))
467     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[1], QStringLiteral("B"))
468     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[2], QStringLiteral("C"))
469     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[3], QStringLiteral("D"))
470     SKGTEST(QStringLiteral("STR:splitCSVLine"), parameters[4], QStringLiteral("E"))
471 
472     SKGTEST(QStringLiteral("STR:splitCSVLine words"), SKGServices::splitCSVLine(QStringLiteral("w1 w2"), ' ', true).count(), 2)
473     SKGTEST(QStringLiteral("STR:splitCSVLine words"), SKGServices::splitCSVLine(QStringLiteral("\"w1 w1\""), ' ', true).count(), 1)
474     SKGTEST(QStringLiteral("STR:splitCSVLine words"), SKGServices::splitCSVLine(QStringLiteral("\"w1 w1\" w2 \"w3 w3 w3\" w4"), ' ', true).count(), 4)
475 
476     QChar realseparator;
477     SKGTEST(QStringLiteral("STR:splitCSVLine comma"), SKGServices::splitCSVLine(QStringLiteral("date,payee,amount"), ';', true, &realseparator).count(), 1)
478     SKGTEST(QStringLiteral("STR:splitCSVLine comma"), realseparator, ';')
479 
480     QString t(QStringLiteral("Export Format, Date (YYYY-MM-DD as UTC), Time (HH:MM:SS), Merchant, Txn Amount (Funding Card), Txn Currency (Funding Card), Txn Amount (Foreign Spend), Txn Currency (Foreign Spend), Card Name, Card Last 4 Digits, Type, Category, Notes"));
481     SKGTEST(QStringLiteral("STR:splitCSVLine comma"), SKGServices::splitCSVLine(t, ';', true, &realseparator).count(), 1)
482     SKGTEST(QStringLiteral("STR:splitCSVLine comma"), SKGServices::splitCSVLine(t, ',', true, &realseparator).count(), 13)
483 }
484 
test_stringToSearchCriterias(int & nberror,int & nbcheck,bool showonlyfailures)485 void test_stringToSearchCriterias(int& nberror, int& nbcheck, bool showonlyfailures)
486 {
487     SKGServices::SKGSearchCriteriaList criterias = SKGServices::stringToSearchCriterias(QStringLiteral("abc +def +ghi"));
488     SKGTEST(QStringLiteral("STR:stringToSearchCriterias count"), criterias.count(), 3)
489     SKGTEST(QStringLiteral("STR:stringToSearchCriterias mode"), criterias[0].mode, '+')
490     SKGTEST(QStringLiteral("STR:stringToSearchCriterias words count"), criterias[0].words.count(), 1)
491     SKGTEST(QStringLiteral("STR:stringToSearchCriterias word"), criterias[0].words[0], QStringLiteral("ghi"))
492     SKGTEST(QStringLiteral("STR:stringToSearchCriterias mode"), criterias[1].mode, '+')
493     SKGTEST(QStringLiteral("STR:stringToSearchCriterias words count"), criterias[1].words.count(), 1)
494     SKGTEST(QStringLiteral("STR:stringToSearchCriterias word"), criterias[1].words[0], QStringLiteral("def"))
495     SKGTEST(QStringLiteral("STR:stringToSearchCriterias mode"), criterias[2].mode, '+')
496     SKGTEST(QStringLiteral("STR:stringToSearchCriterias words count"), criterias[2].words.count(), 1)
497     SKGTEST(QStringLiteral("STR:stringToSearchCriterias word"), criterias[2].words[0], QStringLiteral("abc"))
498 
499     criterias = SKGServices::stringToSearchCriterias(QStringLiteral("-abc +def ghi"));
500     SKGTEST(QStringLiteral("STR:stringToSearchCriterias count"), criterias.count(), 2)
501     SKGTEST(QStringLiteral("STR:stringToSearchCriterias mode"), criterias[0].mode, '+')
502     SKGTEST(QStringLiteral("STR:stringToSearchCriterias words count"), criterias[0].words.count(), 2)
503     SKGTEST(QStringLiteral("STR:stringToSearchCriterias word"), criterias[0].words[0], QStringLiteral("def"))
504     SKGTEST(QStringLiteral("STR:stringToSearchCriterias word"), criterias[0].words[1], QStringLiteral("ghi"))
505     SKGTEST(QStringLiteral("STR:stringToSearchCriterias mode"), criterias[1].mode, '-')
506     SKGTEST(QStringLiteral("STR:stringToSearchCriterias words count"), criterias[1].words.count(), 1)
507     SKGTEST(QStringLiteral("STR:stringToSearchCriterias word"), criterias[1].words[0], QStringLiteral("abc"))
508 
509     criterias = SKGServices::stringToSearchCriterias(QStringLiteral("-abc +def ghi -10"));
510     SKGTEST(QStringLiteral("STR:stringToSearchCriterias count"), criterias.count(), 2)
511     SKGTEST(QStringLiteral("STR:stringToSearchCriterias mode"), criterias[0].mode, '+')
512     SKGTEST(QStringLiteral("STR:stringToSearchCriterias words count"), criterias[0].words.count(), 3)
513     SKGTEST(QStringLiteral("STR:stringToSearchCriterias word"), criterias[0].words[0], QStringLiteral("def"))
514     SKGTEST(QStringLiteral("STR:stringToSearchCriterias word"), criterias[0].words[1], QStringLiteral("ghi"))
515     SKGTEST(QStringLiteral("STR:stringToSearchCriterias word"), criterias[0].words[2], QStringLiteral("-10"))
516     SKGTEST(QStringLiteral("STR:stringToSearchCriterias mode"), criterias[1].mode, '-')
517     SKGTEST(QStringLiteral("STR:stringToSearchCriterias words count"), criterias[1].words.count(), 1)
518     SKGTEST(QStringLiteral("STR:stringToSearchCriterias word"), criterias[1].words[0], QStringLiteral("abc"))
519 
520     criterias = SKGServices::stringToSearchCriterias(QStringLiteral("-10"));
521     SKGTEST(QStringLiteral("STR:stringToSearchCriterias count"), criterias.count(), 1)
522     SKGTEST(QStringLiteral("STR:stringToSearchCriterias mode"), criterias[0].mode, '+')
523     SKGTEST(QStringLiteral("STR:stringToSearchCriterias words count"), criterias[0].words.count(), 1)
524     SKGTEST(QStringLiteral("STR:stringToSearchCriterias word"), criterias[0].words[0], QStringLiteral("-10"))
525 
526     criterias = SKGServices::stringToSearchCriterias(QStringLiteral("-abc"));
527     SKGTEST(QStringLiteral("STR:stringToSearchCriterias count"), criterias.count(), 2)
528     SKGTEST(QStringLiteral("STR:stringToSearchCriterias mode"), criterias[0].mode, '+')
529     SKGTEST(QStringLiteral("STR:stringToSearchCriterias words count"), criterias[0].words.count(), 1)
530     SKGTEST(QStringLiteral("STR:stringToSearchCriterias word"), criterias[0].words[0], QLatin1String(""))
531     SKGTEST(QStringLiteral("STR:stringToSearchCriterias mode"), criterias[1].mode, '-')
532     SKGTEST(QStringLiteral("STR:stringToSearchCriterias words count"), criterias[1].words.count(), 1)
533     SKGTEST(QStringLiteral("STR:stringToSearchCriterias word"), criterias[1].words[0], QStringLiteral("abc"))
534 
535     criterias = SKGServices::stringToSearchCriterias(QStringLiteral("\"abc def ghi\" \"123 456\""));
536     SKGTEST(QStringLiteral("STR:stringToSearchCriterias count"), criterias.count(), 1)
537     SKGTEST(QStringLiteral("STR:stringToSearchCriterias mode"), criterias[0].mode, '+')
538     SKGTEST(QStringLiteral("STR:stringToSearchCriterias words count"), criterias[0].words.count(), 2)
539     SKGTEST(QStringLiteral("STR:stringToSearchCriterias word"), criterias[0].words[0], QStringLiteral("abc def ghi"))
540     SKGTEST(QStringLiteral("STR:stringToSearchCriterias word"), criterias[0].words[1], QStringLiteral("123 456"))
541 
542     criterias = SKGServices::stringToSearchCriterias(QStringLiteral("\"-payee:abc def : ghi\" +amount:25"));
543     SKGTEST(QStringLiteral("STR:stringToSearchCriterias count"), criterias.count(), 2)
544     SKGTEST(QStringLiteral("STR:stringToSearchCriterias mode"), criterias[0].mode, '+')
545     SKGTEST(QStringLiteral("STR:stringToSearchCriterias words count"), criterias[0].words.count(), 1)
546     SKGTEST(QStringLiteral("STR:stringToSearchCriterias word"), criterias[0].words[0], QStringLiteral("amount:25"))
547     SKGTEST(QStringLiteral("STR:stringToSearchCriterias mode"), criterias[1].mode, '-')
548     SKGTEST(QStringLiteral("STR:stringToSearchCriterias words count"), criterias[1].words.count(), 1)
549     SKGTEST(QStringLiteral("STR:stringToSearchCriterias word"), criterias[1].words[0], QStringLiteral("payee:abc def : ghi"))
550 
551     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
552             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("ToTo")),
553                     QStringList() << QStringLiteral("d_DATEOP") << QStringLiteral("i_number") << QStringLiteral("t_PAYEE") << QStringLiteral("t_bookmarked"), nullptr),
554             QStringLiteral("((lower(d_DATEOP) LIKE '%toto%' OR lower(i_number) LIKE '%toto%' OR lower(t_PAYEE) LIKE '%toto%' OR lower(t_bookmarked) LIKE '%toto%'))"));
555 
556     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
557             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("i_num:ToTo")),
558                     QStringList() << QStringLiteral("d_DATEOP") << QStringLiteral("i_number") << QStringLiteral("t_PAYEE") << QStringLiteral("t_bookmarked"), nullptr),
559             QStringLiteral("((lower(i_number) LIKE '%toto%'))"));
560 
561     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
562             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("i_num=1234")),
563                     QStringList() << QStringLiteral("d_DATEOP") << QStringLiteral("i_number") << QStringLiteral("t_PAYEE") << QStringLiteral("t_bookmarked"), nullptr),
564             QStringLiteral("((i_number=1234))"));
565 
566     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
567             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("t_PAYEE>ToTo")),
568                     QStringList() << QStringLiteral("d_DATEOP") << QStringLiteral("i_number") << QStringLiteral("t_PAYEE") << QStringLiteral("t_bookmarked"), nullptr),
569             QStringLiteral("((lower(t_PAYEE)>'toto'))"));
570 
571     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
572             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("t_PAYEE<ToTo")),
573                     QStringList() << QStringLiteral("d_DATEOP") << QStringLiteral("i_number") << QStringLiteral("t_PAYEE") << QStringLiteral("t_bookmarked"), nullptr),
574             QStringLiteral("((lower(t_PAYEE)<'toto'))"));
575 
576     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
577             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("t_PAYEE>=ToTo")),
578                     QStringList() << QStringLiteral("d_DATEOP") << QStringLiteral("i_number") << QStringLiteral("t_PAYEE") << QStringLiteral("t_bookmarked"), nullptr),
579             QStringLiteral("((lower(t_PAYEE)>='toto'))"));
580 
581     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
582             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("t_PAYEE<=ToTo")),
583                     QStringList() << QStringLiteral("d_DATEOP") << QStringLiteral("i_number") << QStringLiteral("t_PAYEE") << QStringLiteral("t_bookmarked"), nullptr),
584             QStringLiteral("((lower(t_PAYEE)<='toto'))"));
585 
586     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
587             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("t_PAYEE=ToTo")),
588                     QStringList() << QStringLiteral("d_DATEOP") << QStringLiteral("i_number") << QStringLiteral("t_PAYEE") << QStringLiteral("t_bookmarked"), nullptr),
589             QStringLiteral("((lower(t_PAYEE)='toto'))"));
590 
591     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
592             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("t_PAYEE#^t[o|a]to$")),
593                     QStringList() << QStringLiteral("d_DATEOP") << QStringLiteral("i_number") << QStringLiteral("t_PAYEE") << QStringLiteral("t_bookmarked"), nullptr),
594             QStringLiteral("((REGEXP('^t[o|a]to$',t_PAYEE)))"));
595 
596     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
597             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("+i_number<20 +i_number>30")),
598                     QStringList() << QStringLiteral("d_DATEOP") << QStringLiteral("i_number") << QStringLiteral("t_PAYEE") << QStringLiteral("t_bookmarked"), nullptr),
599             QStringLiteral("((i_number>30)) OR ((i_number<20))"));
600 
601     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
602             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("d_DATEOP>2015-05-04")),
603                     QStringList() << QStringLiteral("d_DATEOP") << QStringLiteral("i_number") << QStringLiteral("t_PAYEE") << QStringLiteral("t_bookmarked"), nullptr),
604             QStringLiteral("((lower(d_DATEOP)>'2015-05-04'))"));
605 
606     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
607             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("notfound:ToTo")),
608                     QStringList() << QStringLiteral("d_DATEOP") << QStringLiteral("i_number") << QStringLiteral("t_PAYEE") << QStringLiteral("t_bookmarked"), nullptr),
609             QStringLiteral("(1=0)"));
610 
611     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
612             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("v1 v2 +v3 -v4 -v5")),
613                     QStringList() << QStringLiteral("t_comment"), nullptr),
614             QStringLiteral("((lower(t_comment) LIKE '%v3%')) OR ((lower(t_comment) LIKE '%v1%') AND (lower(t_comment) LIKE '%v2%')) AND NOT((lower(t_comment) LIKE '%v4%')) AND NOT((lower(t_comment) LIKE '%v5%'))"));
615 
616     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
617             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("v1 v2 +v3 -v4 -v5")),
618                     QStringList() << QStringLiteral("t_comment"), nullptr, true),
619             QStringLiteral("(((t_comment:v3) and ((t_comment:v1) and (t_comment:v2))) and not (t_comment:v4)) and not (t_comment:v5)"));
620 
621     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
622             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("-v5")),
623                     QStringList() << QStringLiteral("t_comment"), nullptr),
624             QStringLiteral("((lower(t_comment) LIKE '%%')) AND NOT((lower(t_comment) LIKE '%v5%'))"));
625 
626     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
627             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("a'b")),
628                     QStringList() << QStringLiteral("t_comment"), nullptr),
629             QStringLiteral("((lower(t_comment) LIKE '%a''b%'))"));
630 
631     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
632             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("-v5")),
633                     QStringList() << QStringLiteral("t_comment"), nullptr, true),
634             QStringLiteral("(t_comment:) and not (t_comment:v5)"));
635 
636     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
637             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral(":ToTo")),
638                     QStringList() << QStringLiteral("p_prop1") << QStringLiteral("p_prop2"), nullptr),
639             QStringLiteral("((i_PROPPNAME='prop1' AND (lower(i_PROPVALUE) LIKE '%toto%') OR i_PROPPNAME='prop2' AND (lower(i_PROPVALUE) LIKE '%toto%')))"));
640 
641     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
642             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral(":ToTo")),
643                     QStringList() << QStringLiteral("p_prop1") << QStringLiteral("p_prop2"), nullptr, true),
644             QStringLiteral("p_prop1:toto or p_prop2:toto"));
645 
646     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
647             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("#ToTo")),
648                     QStringList() << QStringLiteral("p_prop1") << QStringLiteral("p_prop2"), nullptr),
649             QStringLiteral("((i_PROPPNAME='prop1' AND REGEXP('toto',i_PROPVALUE) OR i_PROPPNAME='prop2' AND REGEXP('toto',i_PROPVALUE)))"));
650 
651     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
652             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("t_att>10")),
653                     QStringList() << QStringLiteral("t_att") << QStringLiteral("t_att1"), nullptr),
654             QStringLiteral("((lower(t_att)>'10' OR lower(t_att1)>'10'))"));
655 
656     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
657             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("t_att.>10")),
658                     QStringList() << QStringLiteral("t_att") << QStringLiteral("t_att1"), nullptr),
659             QStringLiteral("((lower(t_att)>'10'))"));
660 
661     SKGTEST(QStringLiteral("STR:searchCriteriasToWhereClause"),
662             SKGServices::searchCriteriasToWhereClause(SKGServices::stringToSearchCriterias(QStringLiteral("t_att.>10")),
663                     QStringList() << QStringLiteral("t_att") << QStringLiteral("t_att1"), nullptr, true),
664             QStringLiteral("t_att>10"));
665 }
666 
main(int argc,char ** argv)667 int main(int argc, char** argv)
668 {
669     Q_UNUSED(argc)
670     Q_UNUSED(argv)
671 
672     // Init test
673     SKGINITTEST(true)
674 
675     // Test class SKGError
676     test_errors(nberror, nbcheck, showonlyfailures);
677 
678     // SKGServices
679     {
680         test_getPeriodWhereClause(nberror, nbcheck, showonlyfailures);
681 
682         test_getNeighboringPeriod(nberror, nbcheck, showonlyfailures);
683 
684         test_periodToDate(nberror, nbcheck, showonlyfailures);
685 
686         test_partialStringToDate(nberror, nbcheck, showonlyfailures);
687 
688         test_conversions(nberror, nbcheck, showonlyfailures);
689 
690         test_nbWorkingDays(nberror, nbcheck, showonlyfailures);
691 
692         test_getDateFormat(nberror, nbcheck, showonlyfailures);
693 
694         test_csv(nberror, nbcheck, showonlyfailures);
695 
696         test_stringToSearchCriterias(nberror, nbcheck, showonlyfailures);
697 
698         test_getnext(nberror, nbcheck, showonlyfailures);
699 
700         // Various test
701         SKGStringListList table;
702         table.push_back(QStringList() << QStringLiteral("Person") << QStringLiteral("Salary") << QStringLiteral("Age"));
703         table.push_back(QStringList() << QStringLiteral("John") << QStringLiteral("58000") << QStringLiteral("33"));
704         table.push_back(QStringList() << QStringLiteral("Paul") << QStringLiteral("42000") << QStringLiteral("25"));
705         table.push_back(QStringList() << QStringLiteral("Alan") << QStringLiteral("65000") << QStringLiteral("41"));
706 
707         SKGServices::getBase100Table(table);
708         SKGServices::getPercentTable(table, true, false);
709         SKGServices::getPercentTable(table, false, true);
710         SKGServices::getHistorizedTable(table);
711 
712         SKGTEST(QStringLiteral("STR:encodeForUrl"), SKGServices::encodeForUrl(QStringLiteral("abc")), QStringLiteral("abc"))
713 
714         SKGTEST(QStringLiteral("STR:getMajorVersion"), SKGServices::getMajorVersion(QStringLiteral("4.3.12.3")), QStringLiteral("4.3"))
715         SKGTEST(QStringLiteral("STR:getMajorVersion"), SKGServices::getMajorVersion(QStringLiteral("4.3.12")), QStringLiteral("4.3"))
716         SKGTEST(QStringLiteral("STR:getMajorVersion"), SKGServices::getMajorVersion(QStringLiteral("4.3")), QStringLiteral("4.3"))
717         SKGTEST(QStringLiteral("STR:getMajorVersion"), SKGServices::getMajorVersion(QStringLiteral("4")), QStringLiteral("4"))
718 
719         SKGTEST(QStringLiteral("STR:toCurrencyString"), SKGServices::toCurrencyString(5.12341234, QStringLiteral("F"), 2).remove(' '), QStringLiteral("5.12F"))
720         SKGTEST(QStringLiteral("STR:toCurrencyString"), SKGServices::toCurrencyString(-5.12341234, QStringLiteral("F"), 4).remove(' '), QStringLiteral("-5.1234F"))
721 
722         SKGTEST(QStringLiteral("STR:toPercentageString"), SKGServices::toPercentageString(5.12341234, 2), QStringLiteral("5.12 %"))
723         SKGTEST(QStringLiteral("STR:toPercentageString"), SKGServices::toPercentageString(5.12341234, 4), QStringLiteral("5.1234 %"))
724 
725         QByteArray tmp;
726         SKGTESTERROR(QStringLiteral("STR:downloadToStream"), SKGServices::downloadToStream(QUrl::fromLocalFile(QStringLiteral("notfound")), tmp), false)
727 
728         SKGTEST(QStringLiteral("STR:getFullPathCommandLine"), SKGServices::getFullPathCommandLine(QStringLiteral("skrooge-release.py --help")), QStringLiteral("skrooge-release.py --help"))
729     }
730 
731     // End test
732     SKGENDTEST()
733 }
734