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

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 
0013 /**
0014  * The main function of the unit test
0015  * @param argc the number of arguments
0016  * @param argv the list of arguments
0017  */
0018 int main(int argc, char** argv)
0019 {
0020     Q_UNUSED(argc)
0021     Q_UNUSED(argv)
0022 
0023     // Init test
0024     SKGINITTEST(true)
0025 
0026     {
0027         // Test node
0028         SKGDocument document1;
0029         SKGTESTERROR(QStringLiteral("document1.initialize()"), document1.initialize(), true)
0030         SKGError err;
0031         SKGNodeObject parent2;
0032         {
0033             // Scope of the transaction
0034             SKGBEGINTRANSACTION(document1, QStringLiteral("NODE_T1"), err)
0035 
0036             // Create node 0
0037             SKGNodeObject nod0(&document1);
0038             SKGTESTERROR(QStringLiteral("NOD:setName+invalid name"), nod0.setName('a' % OBJECTSEPARATOR % 'b'), false)
0039             SKGTESTERROR(QStringLiteral("NOD:save"), nod0.save(), false)
0040 
0041             // Create node 1
0042             SKGNodeObject nod1(&document1);
0043             SKGTESTERROR(QStringLiteral("NOD:setName"), nod1.setName(QStringLiteral("root1")), true)
0044             SKGTESTERROR(QStringLiteral("NOD:setData"), nod1.setData(QStringLiteral("data1")), true)
0045             SKGTESTERROR(QStringLiteral("NOD:setOrder"), nod1.setOrder(12), true)
0046             SKGTESTERROR(QStringLiteral("NOD:setAutoStart"), nod1.setAutoStart(true), true)
0047             SKGTESTBOOL("NOD:exist", nod1.exist(), false)
0048             SKGTESTERROR(QStringLiteral("NOD:save"), nod1.save(), true)
0049             SKGTESTBOOL("NOD:exist", nod1.exist(), true)
0050             SKGTEST(QStringLiteral("NOD:getFullName"), nod1.getFullName(), QStringLiteral("root1"))
0051             SKGTEST(QStringLiteral("NOD:getData"), nod1.getData(), QStringLiteral("data1"))
0052             SKGTEST(QStringLiteral("NOD:getOrder"), nod1.getOrder(), 12)
0053             SKGTESTBOOL("NOD:isFolder", nod1.isFolder(), false)
0054             SKGTESTBOOL("NOD:isAutoStart", nod1.isAutoStart(), true)
0055             nod1.getIcon();
0056 
0057             // Update with bad name
0058             SKGTESTERROR(QStringLiteral("NOD:setName"), nod1.setName("root1" % OBJECTSEPARATOR % 'A'), false)
0059             SKGTESTERROR(QStringLiteral("NOD:load"), nod1.load(), true)
0060             SKGTEST(QStringLiteral("NOD:getFullName"), nod1.getFullName(), QStringLiteral("root1"))
0061 
0062             // Create node 1.1
0063             SKGNodeObject nod1_1;
0064             SKGTESTERROR(QStringLiteral("NOD:addNode"), nod1.addNode(nod1_1), true)
0065             SKGTESTERROR(QStringLiteral("NOD:setName"), nod1_1.setName(QStringLiteral("nod1")), true)
0066             SKGTESTERROR(QStringLiteral("NOD:setOrder"), nod1_1.setOrder(1), true)
0067             SKGTESTERROR(QStringLiteral("NOD:save"), nod1_1.save(), true)
0068             SKGTEST(QStringLiteral("NOD:getFullName"), nod1_1.getFullName(), "root1" % OBJECTSEPARATOR % "nod1")
0069 
0070             // Update nod1_1
0071             SKGTESTERROR(QStringLiteral("NOD:setName"), nod1_1.setName(QStringLiteral("NODE1")), true)
0072             SKGTESTERROR(QStringLiteral("NOD:save"), nod1_1.save(), true)
0073             SKGTEST(QStringLiteral("NOD:getFullName"), nod1_1.getFullName(), "root1" % OBJECTSEPARATOR % "NODE1")
0074 
0075             // Update nod1
0076             SKGTESTERROR(QStringLiteral("NOD:setName"), nod1.setName(QStringLiteral("ROOT1")), true)
0077             SKGTESTERROR(QStringLiteral("NOD:save"), nod1.save(), true)
0078             SKGTEST(QStringLiteral("NOD:getFullName"), nod1.getFullName(), QStringLiteral("ROOT1"))
0079 
0080             SKGTESTERROR(QStringLiteral("NOD:load"), nod1_1.load(), true)
0081             SKGTEST(QStringLiteral("NOD:getFullName"), nod1_1.getFullName(), "ROOT1" % OBJECTSEPARATOR % "NODE1")
0082 
0083             // Create node 1.2
0084             SKGNodeObject nod1_2;
0085             SKGTESTERROR(QStringLiteral("NOD:addNode"), nod1.addNode(nod1_2), true)
0086             SKGTESTERROR(QStringLiteral("NOD:setName"), nod1_2.setName(QStringLiteral("NODE2")), true)
0087             SKGTESTERROR(QStringLiteral("NOD:setOrder"), nod1_2.setOrder(2), true)
0088             SKGTESTERROR(QStringLiteral("NOD:save"), nod1_2.save(), true)
0089             SKGTEST(QStringLiteral("NOD:getFullName"), nod1_2.getFullName(), "ROOT1" % OBJECTSEPARATOR % "NODE2")
0090             SKGTESTBOOL("NOD:<", (nod1_1 < nod1_2), true)
0091             SKGTESTBOOL("NOD:>", (nod1_1 > nod1_2), false)
0092             SKGTESTBOOL("NOD:<", (nod1_1 < nod1_1), false)
0093             SKGTESTBOOL("NOD:>", (nod1_1 > nod1_1), false)
0094 
0095             // Create node end
0096             SKGNodeObject end1;
0097             SKGTESTERROR(QStringLiteral("NOD:addNode"), nod1_1.addNode(end1), true)
0098             SKGTESTERROR(QStringLiteral("NOD:setName"), end1.setName(QStringLiteral("END")), true)
0099             SKGTESTERROR(QStringLiteral("NOD:save"), end1.save(), true)
0100             SKGTEST(QStringLiteral("NOD:getFullName"), end1.getFullName(), "ROOT1" % OBJECTSEPARATOR % "NODE1" % OBJECTSEPARATOR % "END")
0101 
0102             // Create node end
0103             SKGNodeObject end2;
0104             SKGTESTERROR(QStringLiteral("NOD:addNode"), nod1_2.addNode(end2), true)
0105             SKGTESTERROR(QStringLiteral("NOD:setName"), end2.setName(QStringLiteral("END")), true)
0106             SKGTESTERROR(QStringLiteral("NOD:save"), end2.save(), true)
0107             SKGTEST(QStringLiteral("NOD:getFullName"), end2.getFullName(), "ROOT1" % OBJECTSEPARATOR % "NODE2" % OBJECTSEPARATOR % "END")
0108 
0109             SKGNodeObject end2_1;
0110             SKGTESTERROR(QStringLiteral("NOD:addNode"), end2.addNode(end2_1), true)
0111             SKGTESTERROR(QStringLiteral("NOD:setName"), end2_1.setName(QStringLiteral("REALEND")), true)
0112             SKGTESTERROR(QStringLiteral("NOD:save"), end2_1.save(), true)
0113             SKGTEST(QStringLiteral("NOD:getFullName"), end2_1.getFullName(), "ROOT1" % OBJECTSEPARATOR % "NODE2" % OBJECTSEPARATOR % "END" % OBJECTSEPARATOR % "REALEND")
0114 
0115             // Get parent
0116             SKGNodeObject parent1;
0117             SKGTESTERROR(QStringLiteral("NOD:addNode"), end2.getParentNode(parent1), true)
0118             SKGTEST(QStringLiteral("NOD:getFullName"), parent1.getFullName(), "ROOT1" % OBJECTSEPARATOR % "NODE2")
0119 
0120             // Get parent
0121             SKGTESTERROR(QStringLiteral("NOD:addNode"), parent1.getParentNode(parent2), true)
0122             SKGTEST(QStringLiteral("NOD:getFullName"), parent2.getFullName(), QStringLiteral("ROOT1"))
0123 
0124             // Get children
0125             SKGObjectBase::SKGListSKGObjectBase NodeList;
0126             SKGTESTERROR(QStringLiteral("NOD:getNodes"), parent2.getNodes(NodeList), true)
0127             SKGTEST(QStringLiteral("NOD:nb nodegories"), NodeList.size(), 2)
0128 
0129             // Simple delete
0130             SKGTESTERROR(QStringLiteral("NOD:delete"), end1.remove(), true)
0131             QStringList oResult;
0132             SKGTESTERROR(QStringLiteral("NOD:getDistinctValues"), document1.getDistinctValues(QStringLiteral("node"), QStringLiteral("id"), oResult), true)
0133             SKGTEST(QStringLiteral("NOD:oResult.size"), oResult.size(), 5)
0134 
0135             SKGNodeObject nodeROOT1BC;
0136             SKGTESTERROR(QStringLiteral("NOD:addNode"), SKGNodeObject::createPathNode(&document1, "ROOT1" % OBJECTSEPARATOR % 'B' % OBJECTSEPARATOR % 'C', nodeROOT1BC), true)
0137 
0138             SKGNodeObject nodeROOT1DE;
0139             SKGTESTERROR(QStringLiteral("NOD:addNode"), SKGNodeObject::createPathNode(&document1, "ROOT1" % OBJECTSEPARATOR % 'D' % OBJECTSEPARATOR % 'E', nodeROOT1DE), true)
0140         }
0141         {
0142             // Scope of the transaction
0143             SKGBEGINTRANSACTION(document1, QStringLiteral("NODE_T2"), err)
0144 
0145             // Cascading delete
0146             SKGTESTERROR(QStringLiteral("NOD:delete"), parent2.remove(), true)
0147             QStringList oResult;
0148             SKGTESTERROR(QStringLiteral("NOD:getDistinctValues"), document1.getDistinctValues(QStringLiteral("node"), QStringLiteral("id"), oResult), true)
0149             SKGTEST(QStringLiteral("NOD:oResult.size"), oResult.size(), 0)
0150         }
0151 
0152         // Undo
0153         SKGTESTERROR(QStringLiteral("NOD:undoRedoTransaction"), document1.undoRedoTransaction(), true)
0154         QStringList oResult;
0155         SKGTESTERROR(QStringLiteral("NOD:getDistinctValues"), document1.getDistinctValues(QStringLiteral("node"), QStringLiteral("id"), oResult), true)
0156         SKGTEST(QStringLiteral("NOD:oResult.size"), oResult.size(), 9)
0157 
0158         SKGTESTERROR(QStringLiteral("NOD:undoRedoTransaction"), document1.undoRedoTransaction(), true)
0159         SKGTESTERROR(QStringLiteral("NOD:getDistinctValues"), document1.getDistinctValues(QStringLiteral("node"), QStringLiteral("id"), oResult), true)
0160         SKGTEST(QStringLiteral("NOD:oResult.size"), oResult.size(), 0)
0161 
0162         // Redo
0163         SKGTESTERROR(QStringLiteral("NOD:undoRedoTransaction(SKGDocument::REDO)"), document1.undoRedoTransaction(SKGDocument::REDO), true)
0164         SKGTESTERROR(QStringLiteral("NOD:getDistinctValues"), document1.getDistinctValues(QStringLiteral("node"), QStringLiteral("id"), oResult), true)
0165         SKGTEST(QStringLiteral("NOD:oResult.size"), oResult.size(), 9)
0166 
0167         SKGTESTERROR(QStringLiteral("NOD:undoRedoTransaction(SKGDocument::REDO)"), document1.undoRedoTransaction(SKGDocument::REDO), true)
0168         SKGTESTERROR(QStringLiteral("NOD:getDistinctValues"), document1.getDistinctValues(QStringLiteral("node"), QStringLiteral("id"), oResult), true)
0169         SKGTEST(QStringLiteral("NOD:oResult.size"), oResult.size(), 0)
0170     }
0171 
0172     {
0173         SKGDocument document1;
0174         SKGTESTERROR(QStringLiteral("document1.initialize()"), document1.initialize(), true)
0175         SKGError err;
0176         {
0177             // Scope of the transaction
0178             SKGBEGINTRANSACTION(document1, QStringLiteral("NODE_T1"), err)
0179 
0180             SKGNodeObject node;
0181             SKGTESTERROR(QStringLiteral("NOD:createPathNode"), SKGNodeObject::createPathNode(&document1, 'A' % OBJECTSEPARATOR % "B1" % OBJECTSEPARATOR % 'C', node), true)
0182             SKGTESTERROR(QStringLiteral("NOD:createPathNode"), SKGNodeObject::createPathNode(&document1, 'A' % OBJECTSEPARATOR % "B1" % OBJECTSEPARATOR % 'D', node), true)
0183             SKGTESTERROR(QStringLiteral("NOD:createPathNode"), SKGNodeObject::createPathNode(&document1, 'A' % OBJECTSEPARATOR % "B2" % OBJECTSEPARATOR % 'E', node), true)
0184             QStringList oResult;
0185             SKGTESTERROR(QStringLiteral("NOD:getDistinctValues"), document1.getDistinctValues(QStringLiteral("node"), QStringLiteral("id"), oResult), true)
0186             SKGTEST(QStringLiteral("NOD:oResult.size"), oResult.size(), 6)
0187         }
0188     }
0189 
0190     {
0191         SKGDocument document1;
0192         SKGTESTERROR(QStringLiteral("document1.initialize()"), document1.initialize(), true)
0193         SKGError err;
0194         {
0195             // Scope of the transaction
0196             SKGBEGINTRANSACTION(document1, QStringLiteral("NODE_T1"), err)
0197 
0198             SKGNodeObject node;
0199             SKGTESTERROR(QStringLiteral("NOD:createPathNode"), SKGNodeObject::createPathNode(&document1, 'A' % OBJECTSEPARATOR % "B1" % OBJECTSEPARATOR % 'C', node), true)
0200             SKGTESTERROR(QStringLiteral("NOD:createPathNode"), SKGNodeObject::createPathNode(&document1, 'A' % OBJECTSEPARATOR % "B2" % OBJECTSEPARATOR % 'C', node), true)
0201             QStringList oResult;
0202             SKGTESTERROR(QStringLiteral("NOD:getDistinctValues"), document1.getDistinctValues(QStringLiteral("node"), QStringLiteral("id"), oResult), true)
0203             SKGTEST(QStringLiteral("NOD:oResult.size"), oResult.size(), 5)
0204         }
0205     }
0206 
0207     {
0208         SKGDocument document1;
0209         SKGTESTERROR(QStringLiteral("document1.initialize()"), document1.initialize(), true)
0210         SKGError err;
0211         {
0212             // Scope of the transaction
0213             SKGBEGINTRANSACTION(document1, QStringLiteral("NODE_T1"), err)
0214 
0215             SKGNodeObject node;
0216             SKGTESTERROR(QStringLiteral("NOD:createPathNode"), SKGNodeObject::createPathNode(&document1, 'A' % OBJECTSEPARATOR % 'A', node), true)
0217             QStringList oResult;
0218             SKGTESTERROR(QStringLiteral("NOD:getDistinctValues"), document1.getDistinctValues(QStringLiteral("node"), QStringLiteral("id"), oResult), true)
0219             SKGTEST(QStringLiteral("NOD:oResult.size"), oResult.size(), 2)
0220         }
0221     }
0222 
0223     {
0224         SKGDocument document1;
0225         SKGTESTERROR(QStringLiteral("document1.initialize()"), document1.initialize(), true)
0226         SKGError err;
0227         {
0228             // Scope of the transaction
0229             SKGBEGINTRANSACTION(document1, QStringLiteral("NODE_T1"), err)
0230 
0231             SKGNodeObject nodeB;
0232             SKGTESTERROR(QStringLiteral("NOD:createPathNode"), SKGNodeObject::createPathNode(&document1, 'A' % OBJECTSEPARATOR % 'B', nodeB), true)
0233             SKGNodeObject nodeC;
0234             SKGTESTERROR(QStringLiteral("NOD:createPathNode"), SKGNodeObject::createPathNode(&document1, QStringLiteral("C"), nodeC), true)
0235             SKGNodeObject nodeA;
0236             SKGTESTERROR(QStringLiteral("NOD:getParentNode"), nodeB.getParentNode(nodeA), true)
0237 
0238             SKGNamedObject nameB = static_cast<SKGNamedObject>(nodeB);  // For coverage
0239             SKGNodeObject nodeC2(static_cast<SKGObjectBase>(nodeC));  // For coverage
0240 
0241             SKGTESTERROR(QStringLiteral("NOD:setParentNode"), nodeA.setParentNode(nodeB), false)
0242             SKGTESTERROR(QStringLiteral("NOD:setParentNode"), nodeA.setParentNode(nodeA), false)
0243             SKGTESTERROR(QStringLiteral("NOD:setParentNode"), nodeB.setParentNode(nodeB), false)
0244             SKGTESTERROR(QStringLiteral("NOD:setParentNode"), nodeC.setParentNode(nodeB), true)
0245             SKGTESTERROR(QStringLiteral("NOD:removeParentNode"), nodeB.removeParentNode(), true)
0246         }
0247     }
0248 
0249     {
0250         SKGDocument document1;
0251         SKGTESTERROR(QStringLiteral("document1.initialize()"), document1.initialize(), true)
0252         SKGError err;
0253         {
0254             // Scope of the transaction
0255             SKGBEGINTRANSACTION(document1, QStringLiteral("NODE_T1"), err)
0256 
0257             SKGNodeObject nodeB1;
0258             SKGTESTERROR(QStringLiteral("NOD:createPathNode"), SKGNodeObject::createPathNode(&document1, 'A' % OBJECTSEPARATOR % 'B', nodeB1, true), true)
0259             SKGNodeObject nodeB2;
0260             SKGTESTERROR(QStringLiteral("NOD:createPathNode"), SKGNodeObject::createPathNode(&document1, 'A' % OBJECTSEPARATOR % 'B', nodeB2, true), true)
0261             document1.dump(DUMPALL);
0262 
0263             QStringList oResult;
0264             SKGTESTERROR(QStringLiteral("NOD:getDistinctValues"), document1.getDistinctValues(QStringLiteral("node"), QStringLiteral("id"), oResult), true)
0265             SKGTEST(QStringLiteral("NOD:oResult.size"), oResult.size(), 3)
0266         }
0267     }
0268 
0269     {
0270         SKGDocument document1;
0271         SKGTESTERROR(QStringLiteral("document1.initialize()"), document1.initialize(), true)
0272         SKGError err;
0273         {
0274             // Scope of the transaction
0275             SKGBEGINTRANSACTION(document1, QStringLiteral("NODE_T1"), err)
0276 
0277             SKGNodeObject nodeB1;
0278             SKGTESTERROR(QStringLiteral("NOD:createPathNode"), SKGNodeObject::createPathNode(&document1, QStringLiteral("B"), nodeB1, true), true)
0279             SKGNodeObject nodeB2;
0280             SKGTESTERROR(QStringLiteral("NOD:createPathNode"), SKGNodeObject::createPathNode(&document1, QStringLiteral("B"), nodeB2, true), true)
0281 
0282             QStringList oResult;
0283             SKGTESTERROR(QStringLiteral("NOD:getDistinctValues"), document1.getDistinctValues(QStringLiteral("node"), QStringLiteral("id"), oResult), true)
0284             SKGTEST(QStringLiteral("NOD:oResult.size"), oResult.size(), 2)
0285         }
0286     }
0287 
0288     // Test properties
0289     {
0290         SKGDocument document1;
0291         SKGTESTERROR(QStringLiteral("document1.initialize()"), document1.initialize(), true)
0292         SKGError err;
0293         {
0294             // Scope of the transaction
0295             SKGBEGINTRANSACTION(document1, QStringLiteral("NODE_T1"), err)
0296 
0297             SKGNodeObject node1;
0298             SKGTESTERROR(QStringLiteral("NOD:createPathNode"), SKGNodeObject::createPathNode(&document1, QStringLiteral("1"), node1, true), true)
0299             SKGNodeObject node2;
0300             SKGTESTERROR(QStringLiteral("NOD:createPathNode"), SKGNodeObject::createPathNode(&document1, QStringLiteral("2"), node2, true), true)
0301 
0302             SKGTESTERROR(QStringLiteral("NOD:setProperty"), node1.setProperty(QStringLiteral("prop"), QStringLiteral("val1")), true)
0303             SKGTESTERROR(QStringLiteral("NOD:setProperty"), node2.setProperty(QStringLiteral("prop"), QStringLiteral("val2")), true)
0304 
0305             SKGTEST(QStringLiteral("NOD:getProperty"), node1.getProperty(QStringLiteral("prop")), QStringLiteral("val1"))
0306             SKGTEST(QStringLiteral("NOD:getProperty"), node2.getProperty(QStringLiteral("prop")), QStringLiteral("val2"))
0307 
0308             SKGTESTERROR(QStringLiteral("NOD:setProperty"), node1.setProperty(QStringLiteral("prop"), QStringLiteral("val3")), true)
0309 
0310             SKGTEST(QStringLiteral("NOD:getProperty"), node1.getProperty(QStringLiteral("prop")), QStringLiteral("val3"))
0311             SKGTEST(QStringLiteral("NOD:getProperty"), node2.getProperty(QStringLiteral("prop")), QStringLiteral("val2"))
0312         }
0313     }
0314 
0315     // Test setAttribute
0316     {
0317         SKGDocument document1;
0318         SKGTESTERROR(QStringLiteral("document1.initialize()"), document1.initialize(), true)
0319         SKGError err;
0320         {
0321             // Scope of the transaction
0322             SKGBEGINTRANSACTION(document1, QStringLiteral("NODE_T1"), err)
0323 
0324             SKGNodeObject node1;
0325             SKGTESTERROR(QStringLiteral("NOD:save"), node1.save(), false)
0326             SKGTESTERROR(QStringLiteral("NOD:remove"), node1.remove(), false)
0327 
0328             SKGNodeObject node2;
0329             SKGTESTERROR(QStringLiteral("NOD:addNode"), node1.addNode(node2), false)
0330             SKGTESTERROR(QStringLiteral("NOD:setParentNode"), node1.setParentNode(node2), false)
0331 
0332             SKGTESTERROR(QStringLiteral("NOD:createPathNode"), SKGNodeObject::createPathNode(&document1, QStringLiteral("ABC DEF "), node1, true), true)
0333 
0334             SKGTESTERROR(QStringLiteral("NOD:setAttribute"), node1.setAttribute(QStringLiteral("t_name"), QStringLiteral("=lower")), true)
0335             SKGTEST(QStringLiteral("NOD:getAttribute"), node1.getAttribute(QStringLiteral("t_name")), QStringLiteral("abc def "))
0336 
0337             SKGTESTERROR(QStringLiteral("NOD:setAttribute"), node1.setAttribute(QStringLiteral("t_name"), QStringLiteral("=upper")), true)
0338             SKGTEST(QStringLiteral("NOD:getAttribute"), node1.getAttribute(QStringLiteral("t_name")), QStringLiteral("ABC DEF "))
0339 
0340             SKGTESTERROR(QStringLiteral("NOD:setAttribute"), node1.setAttribute(QStringLiteral("t_name"), QStringLiteral("=capwords")), true)
0341             SKGTEST(QStringLiteral("NOD:getAttribute"), node1.getAttribute(QStringLiteral("t_name")), QStringLiteral("Abc Def "))
0342 
0343             SKGTESTERROR(QStringLiteral("NOD:setAttribute"), node1.setAttribute(QStringLiteral("t_name"), QStringLiteral("=capitalize")), true)
0344             SKGTEST(QStringLiteral("NOD:getAttribute"), node1.getAttribute(QStringLiteral("t_name")), QStringLiteral("Abc def "))
0345 
0346             SKGTESTERROR(QStringLiteral("NOD:setAttribute"), node1.setAttribute(QStringLiteral("t_name"), QStringLiteral("=trim")), true)
0347             SKGTEST(QStringLiteral("NOD:getAttribute"), node1.getAttribute(QStringLiteral("t_name")), QStringLiteral("Abc def"))
0348 
0349             SKGTESTERROR(QStringLiteral("NOD:setProperty"), node1.setProperty(QStringLiteral("prop"), QStringLiteral("prop on node 1")), true)
0350             SKGTEST(QStringLiteral("NOD:getProperty"), node1.getProperty(QStringLiteral("prop")), QStringLiteral("prop on node 1"))
0351             SKGTEST(QStringLiteral("NOD:getAttribute"), node1.getAttribute(QStringLiteral("p_prop")), QStringLiteral("prop on node 1"))
0352 
0353             SKGTESTERROR(QStringLiteral("NOD:save"), node1.save(), true)
0354 
0355             SKGTESTERROR(QStringLiteral("NOD:addNode"), node1.addNode(node2), true)
0356             SKGTESTERROR(QStringLiteral("NOD:setAttribute"), node2.setAttribute(QStringLiteral("t_name"), QStringLiteral("node2")), true)
0357             SKGTESTERROR(QStringLiteral("NOD:save"), node2.save(), true)
0358 
0359             SKGTEST(QStringLiteral("NOD:getAttribute"), node2.getAttribute(QStringLiteral("rd_node_id.(v_node)t_name")), QStringLiteral("Abc def"))
0360             SKGTEST(QStringLiteral("NOD:getAttribute"), node2.getAttribute(QStringLiteral("rd_node_id.(v_node)p_prop")), QStringLiteral("prop on node 1"))
0361 
0362             SKGTEST(QStringLiteral("NOD:getAttribute"), node2.getAttribute(QStringLiteral("rd_node_id.t_name")), QStringLiteral("Abc def"))
0363             SKGTEST(QStringLiteral("NOD:getAttribute"), node2.getAttribute(QStringLiteral("rd_node_id.p_prop")), QStringLiteral("prop on node 1"))
0364 
0365             SKGNodeObject node3;
0366             SKGTESTERROR(QStringLiteral("NOD:addNode"), node2.addNode(node3), true)
0367             SKGTESTERROR(QStringLiteral("NOD:setAttribute"), node3.setAttribute(QStringLiteral("t_name"), QStringLiteral("node3")), true)
0368             SKGTESTERROR(QStringLiteral("NOD:save"), node3.save(), true)
0369 
0370             SKGTEST(QStringLiteral("NOD:getAttribute"), node3.getAttribute(QStringLiteral("rd_node_id.(v_node)t_name")), QStringLiteral("node2"))
0371             SKGTEST(QStringLiteral("NOD:getAttribute"), node3.getAttribute(QStringLiteral("rd_node_id.(v_node)p_prop")), QLatin1String(""))
0372 
0373             SKGTEST(QStringLiteral("NOD:getAttribute"), node3.getAttribute(QStringLiteral("rd_node_id.t_name")), QStringLiteral("node2"))
0374             SKGTEST(QStringLiteral("NOD:getAttribute"), node3.getAttribute(QStringLiteral("rd_node_id.p_prop")), QLatin1String(""))
0375 
0376             SKGTEST(QStringLiteral("NOD:getAttribute"), node3.getAttribute(QStringLiteral("rd_node_id.(v_node)rd_node_id.(v_node)t_name")), QStringLiteral("Abc def"))
0377             SKGTEST(QStringLiteral("NOD:getAttribute"), node3.getAttribute(QStringLiteral("rd_node_id.(v_node)rd_node_id.(v_node)p_prop")), QStringLiteral("prop on node 1"))
0378 
0379             SKGTEST(QStringLiteral("NOD:getAttribute"), node3.getAttribute(QStringLiteral("rd_node_id.rd_node_id.t_name")), QStringLiteral("Abc def"))
0380             SKGTEST(QStringLiteral("NOD:getAttribute"), node3.getAttribute(QStringLiteral("rd_node_id.rd_node_id.p_prop")), QStringLiteral("prop on node 1"))
0381         }
0382     }
0383     // End test
0384     SKGENDTEST()
0385 }