File indexing completed on 2024-05-12 16:45:20

0001 /***************************************************************************
0002  * SPDX-FileCopyrightText: 2022 S. MANKOWSKI stephane@mankowski.fr
0003  * SPDX-FileCopyrightText: 2022 G. DE BURE support@mankowski.fr
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  ***************************************************************************/
0006 /** @file
0007  * This file is a test script.
0008  *
0009  * @author Stephane MANKOWSKI / Guillaume DE BURE
0010  */
0011 #include "skgtestmacro.h"
0012 #include "skgbankincludes.h"
0013 
0014 /**
0015  * The main function of the unit test
0016  * @param argc the number of arguments
0017  * @param argv the list of arguments
0018  */
0019 int main(int argc, char** argv)
0020 {
0021     Q_UNUSED(argc)
0022     Q_UNUSED(argv)
0023 
0024     // Init test
0025     SKGINITTEST(true)
0026 
0027     {
0028         // Test category
0029         SKGDocumentBank document1;
0030         SKGTESTERROR(QStringLiteral("document1.initialize()"), document1.initialize(), true)
0031         SKGError err;
0032         SKGCategoryObject parent2;
0033         {
0034             // Scope of the transaction
0035             SKGBEGINTRANSACTION(document1, QStringLiteral("CAT_T1"), err)
0036 
0037             // Create category 0
0038             SKGCategoryObject cat0(&document1);
0039             SKGTESTERROR(QStringLiteral("CAT:setName+invalid name"), cat0.setName('a' % OBJECTSEPARATOR % 'b'), false)
0040             SKGTESTBOOL("CAT:exist", cat0.exist(), false)
0041             SKGTESTERROR(QStringLiteral("CAT:save"), cat0.save(), false)
0042 
0043             // Create category 1
0044             SKGCategoryObject cat1(&document1);
0045 
0046             SKGCategoryObject cat1_1;
0047             SKGTESTERROR(QStringLiteral("CAT:addCategory"), cat1.addCategory(cat1_1), false)
0048             SKGTESTERROR(QStringLiteral("CAT:setParentCategory"), cat1.setParentCategory(cat1_1), false)
0049 
0050             SKGTESTERROR(QStringLiteral("CAT:setName"), cat1.setName(QStringLiteral("root1")), true)
0051             SKGTESTBOOL("CAT:getFullName", cat1.isBookmarked(), false)
0052             SKGTESTERROR(QStringLiteral("CAT:bookmark"), cat1.bookmark(true), true)
0053             SKGTESTBOOL("CAT:getFullName", cat1.isBookmarked(), true)
0054             SKGTESTERROR(QStringLiteral("CAT:save"), cat1.save(), true)
0055             SKGTEST(QStringLiteral("CAT:getFullName"), cat1.getFullName(), QStringLiteral("root1"))
0056             SKGTESTERROR(QStringLiteral("CAT:load"), cat1.load(), true)
0057             SKGTEST(QStringLiteral("CAT:getFullName"), cat1.getFullName(), QStringLiteral("root1"))
0058 
0059             SKGTESTBOOL("REF:isClosed", cat1.isClosed(), false)
0060             SKGTESTERROR(QStringLiteral("REF:setClosed"), cat1.setClosed(true), true)
0061             SKGTESTBOOL("REF:isClosed", cat1.isClosed(), true)
0062 
0063             SKGObjectBase obj1 = static_cast<SKGObjectBase>(cat1);
0064             SKGCategoryObject cat11(obj1);
0065 
0066             // Update with bad name
0067             SKGTESTERROR(QStringLiteral("CAT:setName"), cat1.setName("root1" % OBJECTSEPARATOR % 'A'), false)
0068             SKGTESTERROR(QStringLiteral("CAT:load"), cat1.load(), true)
0069             SKGTEST(QStringLiteral("CAT:getFullName"), cat1.getFullName(), QStringLiteral("root1"))
0070 
0071             // Create category 1.1
0072             SKGTESTERROR(QStringLiteral("CAT:addCategory"), cat1.addCategory(cat1_1), true)
0073             SKGTESTERROR(QStringLiteral("CAT:setName"), cat1_1.setName(QStringLiteral("cat1")), true)
0074             SKGTESTERROR(QStringLiteral("CAT:save"), cat1_1.save(), true)
0075             SKGTEST(QStringLiteral("CAT:getFullName"), cat1_1.getFullName(), "root1" % OBJECTSEPARATOR % "cat1")
0076 
0077             // Update cat1_1
0078             SKGTESTERROR(QStringLiteral("CAT:setName"), cat1_1.setName(QStringLiteral("CAT1")), true)
0079             SKGTESTERROR(QStringLiteral("CAT:save"), cat1_1.save(), true)
0080             SKGTEST(QStringLiteral("CAT:getFullName"), cat1_1.getFullName(), "root1" % OBJECTSEPARATOR % "CAT1")
0081 
0082             // Update cat1
0083             SKGTESTERROR(QStringLiteral("CAT:setName"), cat1.setName(QStringLiteral("ROOT1")), true)
0084             SKGTESTERROR(QStringLiteral("CAT:save"), cat1.save(), true)
0085             SKGTEST(QStringLiteral("CAT:getFullName"), cat1.getFullName(), QStringLiteral("ROOT1"))
0086 
0087             SKGTESTERROR(QStringLiteral("CAT:load"), cat1_1.load(), true)
0088             SKGTEST(QStringLiteral("CAT:getFullName"), cat1_1.getFullName(), "ROOT1" % OBJECTSEPARATOR % "CAT1")
0089 
0090             // Create category 1.2
0091             SKGCategoryObject cat1_2;
0092             SKGTESTERROR(QStringLiteral("CAT:addCategory"), cat1.addCategory(cat1_2), true)
0093             SKGTESTERROR(QStringLiteral("CAT:setName"), cat1_2.setName(QStringLiteral("CAT2")), true)
0094             SKGTESTERROR(QStringLiteral("CAT:save"), cat1_2.save(), true)
0095             SKGTEST(QStringLiteral("CAT:getFullName"), cat1_2.getFullName(), "ROOT1" % OBJECTSEPARATOR % "CAT2")
0096 
0097             // Create category end
0098             SKGCategoryObject end1;
0099             SKGTESTERROR(QStringLiteral("CAT:addCategory"), cat1_1.addCategory(end1), true)
0100             SKGTESTERROR(QStringLiteral("CAT:setName"), end1.setName(QStringLiteral("END")), true)
0101             SKGTESTERROR(QStringLiteral("CAT:save"), end1.save(), true)
0102             SKGTEST(QStringLiteral("CAT:getFullName"), end1.getFullName(), "ROOT1" % OBJECTSEPARATOR % "CAT1" % OBJECTSEPARATOR % "END")
0103 
0104             // Create category end
0105             SKGCategoryObject end2;
0106             SKGTESTERROR(QStringLiteral("CAT:addCategory"), cat1_2.addCategory(end2), true)
0107             SKGTESTERROR(QStringLiteral("CAT:setName"), end2.setName(QStringLiteral("END")), true)
0108             SKGTESTERROR(QStringLiteral("CAT:save"), end2.save(), true)
0109             SKGTEST(QStringLiteral("CAT:getFullName"), end2.getFullName(), "ROOT1" % OBJECTSEPARATOR % "CAT2" % OBJECTSEPARATOR % "END")
0110 
0111             SKGCategoryObject end2_1;
0112             SKGTESTERROR(QStringLiteral("CAT:addCategory"), end2.addCategory(end2_1), true)
0113             SKGTESTERROR(QStringLiteral("CAT:setName"), end2_1.setName(QStringLiteral("REALEND")), true)
0114             SKGTESTERROR(QStringLiteral("CAT:save"), end2_1.save(), true)
0115             SKGTEST(QStringLiteral("CAT:getFullName"), end2_1.getFullName(), "ROOT1" % OBJECTSEPARATOR % "CAT2" % OBJECTSEPARATOR % "END" % OBJECTSEPARATOR % "REALEND")
0116 
0117             // Get parent
0118             SKGCategoryObject parent1;
0119             SKGTESTERROR(QStringLiteral("CAT:getParentCategory"), end2.getParentCategory(parent1), true)
0120             SKGTEST(QStringLiteral("CAT:getFullName"), parent1.getFullName(), "ROOT1" % OBJECTSEPARATOR % "CAT2")
0121 
0122             // Get parent
0123             SKGTESTERROR(QStringLiteral("CAT:getParentCategory"), parent1.getParentCategory(parent2), true)
0124             SKGTEST(QStringLiteral("CAT:getFullName"), parent2.getFullName(), QStringLiteral("ROOT1"))
0125 
0126             SKGCategoryObject root;
0127             SKGTESTERROR(QStringLiteral("CAT:getRootCategory"), end2_1.getRootCategory(root), true)
0128             SKGTEST(QStringLiteral("CAT:getFullName"), root.getFullName(), QStringLiteral("ROOT1"))
0129 
0130             // Get children
0131             SKGObjectBase::SKGListSKGObjectBase CategoryList;
0132             SKGTESTERROR(QStringLiteral("CAT:getCategories"), parent2.getCategories(CategoryList), true)
0133             SKGTEST(QStringLiteral("CAT:nb categories"), CategoryList.size(), 2)
0134 
0135             // Simple delete
0136             SKGTESTERROR(QStringLiteral("CAT:delete"), end1.remove(), true)
0137             QStringList oResult;
0138             SKGTESTERROR(QStringLiteral("CAT:getDistinctValues"), document1.getDistinctValues(QStringLiteral("category"), QStringLiteral("id"), oResult), true)
0139             SKGTEST(QStringLiteral("CAT:oResult.size"), oResult.size(), 5)
0140         }
0141         {
0142             // Scope of the transaction
0143             SKGBEGINTRANSACTION(document1, QStringLiteral("CAT_T2"), err)
0144 
0145             // Cascading delete
0146             SKGTESTERROR(QStringLiteral("CAT:delete"), parent2.remove(), true)
0147             QStringList oResult;
0148             SKGTESTERROR(QStringLiteral("CAT:getDistinctValues"), document1.getDistinctValues(QStringLiteral("category"), QStringLiteral("id"), oResult), true)
0149             SKGTEST(QStringLiteral("CAT:oResult.size"), oResult.size(), 0)
0150         }
0151 
0152         // Undo
0153         SKGTESTERROR(QStringLiteral("CAT:undoRedoTransaction"), document1.undoRedoTransaction(), true)
0154         QStringList oResult;
0155         SKGTESTERROR(QStringLiteral("CAT:getDistinctValues"), document1.getDistinctValues(QStringLiteral("category"), QStringLiteral("id"), oResult), true)
0156         SKGTEST(QStringLiteral("CAT:oResult.size"), oResult.size(), 5)
0157 
0158         SKGTESTERROR(QStringLiteral("CAT:undoRedoTransaction"), document1.undoRedoTransaction(), true)
0159         SKGTESTERROR(QStringLiteral("CAT:getDistinctValues"), document1.getDistinctValues(QStringLiteral("category"), QStringLiteral("id"), oResult), true)
0160         SKGTEST(QStringLiteral("CAT:oResult.size"), oResult.size(), 0)
0161 
0162         // Redo
0163         SKGTESTERROR(QStringLiteral("CAT:undoRedoTransaction(SKGDocument::REDO)"), document1.undoRedoTransaction(SKGDocument::REDO), true)
0164         SKGTESTERROR(QStringLiteral("CAT:getDistinctValues"), document1.getDistinctValues(QStringLiteral("category"), QStringLiteral("id"), oResult), true)
0165         SKGTEST(QStringLiteral("CAT:oResult.size"), oResult.size(), 5)
0166 
0167         SKGTESTERROR(QStringLiteral("CAT:undoRedoTransaction(SKGDocument::REDO)"), document1.undoRedoTransaction(SKGDocument::REDO), true)
0168         SKGTESTERROR(QStringLiteral("CAT:getDistinctValues"), document1.getDistinctValues(QStringLiteral("category"), QStringLiteral("id"), oResult), true)
0169         SKGTEST(QStringLiteral("CAT:oResult.size"), oResult.size(), 0)
0170     }
0171 
0172     {
0173         SKGDocumentBank document1;
0174         SKGTESTERROR(QStringLiteral("document1.initialize()"), document1.initialize(), true)
0175         SKGError err;
0176         {
0177             // Scope of the transaction
0178             SKGBEGINTRANSACTION(document1, QStringLiteral("CAT_T1"), err)
0179 
0180             SKGCategoryObject cat;
0181             SKGTESTERROR(QStringLiteral("CAT:createPathCategory"), SKGCategoryObject::createPathCategory(&document1, QLatin1String(""), cat), true)
0182             SKGTESTERROR(QStringLiteral("CAT:createPathCategory"), SKGCategoryObject::createPathCategory(&document1, 'A' % OBJECTSEPARATOR % 'A', cat, true), true)
0183             SKGTEST(QStringLiteral("CAT:getName"), cat.getName(), QStringLiteral("A"))
0184 
0185             QStringList oResult;
0186             SKGTESTERROR(QStringLiteral("CAT:getDistinctValues"), document1.getDistinctValues(QStringLiteral("category"), QStringLiteral("id"), oResult), true)
0187             SKGTEST(QStringLiteral("CAT:oResult.size"), oResult.size(), 2)
0188 
0189             SKGTESTERROR(QStringLiteral("CAT:createPathCategory"), SKGCategoryObject::createPathCategory(&document1, 'A' % OBJECTSEPARATOR % 'B', cat, true, true), true)
0190             SKGTEST(QStringLiteral("CAT:getName"), cat.getName(), QStringLiteral("B"))
0191             SKGTESTERROR(QStringLiteral("CAT:createPathCategory"), SKGCategoryObject::createPathCategory(&document1, 'A' % OBJECTSEPARATOR % 'B', cat, true, true), true)
0192             SKGTEST(QStringLiteral("CAT:getName"), cat.getName(), QStringLiteral("B (2)"))
0193 
0194             SKGTESTERROR(QStringLiteral("CAT:createPathCategory"), SKGCategoryObject::createPathCategory(&document1, QStringLiteral("C"), cat, true, true), true)
0195             SKGTEST(QStringLiteral("CAT:getName"), cat.getName(), QStringLiteral("C"))
0196             SKGTESTERROR(QStringLiteral("CAT:createPathCategory"), SKGCategoryObject::createPathCategory(&document1, QStringLiteral("C"), cat, true, true), true)
0197             SKGTEST(QStringLiteral("CAT:getName"), cat.getName(), QStringLiteral("C (2)"))
0198         }
0199     }
0200 
0201     {
0202         SKGDocumentBank document1;
0203         SKGTESTERROR(QStringLiteral("document1.initialize()"), document1.initialize(), true)
0204         SKGError err;
0205         {
0206             // Scope of the transaction
0207             SKGBEGINTRANSACTION(document1, QStringLiteral("NODE_T1"), err)
0208 
0209             SKGCategoryObject categoryB;
0210             SKGTESTERROR(QStringLiteral("NOD:createPathCategory"), SKGCategoryObject::createPathCategory(&document1, 'A' % OBJECTSEPARATOR % 'B', categoryB), true)
0211             SKGCategoryObject categoryC;
0212             SKGTESTERROR(QStringLiteral("NOD:createPathCategory"), SKGCategoryObject::createPathCategory(&document1, QStringLiteral("C"), categoryC), true)
0213             SKGCategoryObject categoryA;
0214             SKGTESTERROR(QStringLiteral("NOD:getParentCategory"), categoryB.getParentCategory(categoryA), true)
0215 
0216             SKGTESTERROR(QStringLiteral("NOD:setParentCategory"), categoryA.setParentCategory(categoryB), false)
0217             SKGTESTERROR(QStringLiteral("NOD:setParentCategory"), categoryA.setParentCategory(categoryA), false)
0218             SKGTESTERROR(QStringLiteral("NOD:setParentCategory"), categoryB.setParentCategory(categoryB), false)
0219             SKGTESTERROR(QStringLiteral("NOD:setParentCategory"), categoryC.setParentCategory(categoryB), true)
0220             SKGTESTERROR(QStringLiteral("NOD:removeParentCategory"), categoryB.removeParentCategory(), true)
0221         }
0222     }
0223 
0224     // Bug 245254
0225     {
0226         SKGDocumentBank document1;
0227         SKGTESTERROR(QStringLiteral("document1.initialize()"), document1.initialize(), true)
0228         SKGError err;
0229         {
0230             // Scope of the transaction
0231             SKGBEGINTRANSACTION(document1, QStringLiteral("NODE_T1"), err)
0232 
0233             SKGCategoryObject categoryB;
0234             SKGTESTERROR(QStringLiteral("NOD:createPathCategory"), SKGCategoryObject::createPathCategory(&document1, 'A' % OBJECTSEPARATOR % 'B', categoryB), true)
0235             SKGCategoryObject categoryC;
0236             SKGTESTERROR(QStringLiteral("NOD:createPathCategory"), SKGCategoryObject::createPathCategory(&document1, QStringLiteral("C"), categoryC), true)
0237             SKGCategoryObject categoryA;
0238             SKGTESTERROR(QStringLiteral("NOD:createPathCategory"), SKGCategoryObject::createPathCategory(&document1, 'C' % OBJECTSEPARATOR % 'A', categoryA), true)
0239 
0240             QStringList oResult;
0241             SKGTESTERROR(QStringLiteral("CAT:getDistinctValues"), document1.getDistinctValues(QStringLiteral("category"), QStringLiteral("id"), oResult), true)
0242             SKGTEST(QStringLiteral("CAT:oResult.size"), oResult.size(), 4)
0243 
0244             // Merge
0245             SKGTESTERROR(QStringLiteral("CAT:merge"), categoryB.merge(categoryA), true)
0246         }
0247     }
0248 
0249     // Cascading delete
0250     {
0251         SKGDocumentBank document1;
0252         SKGTESTERROR(QStringLiteral("document1.initialize()"), document1.initialize(), true)
0253         SKGError err;
0254         {
0255             // Scope of the transaction
0256             SKGBEGINTRANSACTION(document1, QStringLiteral("NODE_T1"), err)
0257 
0258             SKGCategoryObject categoryA;
0259             SKGTESTERROR(QStringLiteral("NOD:createPathCategory"), SKGCategoryObject::createPathCategory(&document1, QStringLiteral("A"), categoryA), true)
0260             SKGCategoryObject categoryC;
0261             SKGTESTERROR(QStringLiteral("NOD:createPathCategory"), SKGCategoryObject::createPathCategory(&document1, 'A' % OBJECTSEPARATOR % 'B' % OBJECTSEPARATOR % 'C', categoryC), true)
0262 
0263             QStringList oResult;
0264             SKGTESTERROR(QStringLiteral("CAT:getDistinctValues"), document1.getDistinctValues(QStringLiteral("category"), QStringLiteral("id"), oResult), true)
0265             SKGTEST(QStringLiteral("CAT:oResult.size"), oResult.size(), 3)
0266 
0267             // Delete
0268             SKGTESTERROR(QStringLiteral("CAT:remove"), categoryA.remove(), true)
0269 
0270             SKGTESTERROR(QStringLiteral("CAT:getDistinctValues"), document1.getDistinctValues(QStringLiteral("category"), QStringLiteral("id"), oResult), true)
0271             SKGTEST(QStringLiteral("CAT:oResult.size"), oResult.size(), 0)
0272         }
0273     }
0274     // End test
0275     SKGENDTEST()
0276 }