From 825bcda767d2bab9f470d81cd76b9e5985fbea9c Mon Sep 17 00:00:00 2001 From: Renaud G Date: Wed, 25 Dec 2019 03:48:11 +0100 Subject: Fix test of IF --- node/ifnode.cpp | 36 ++++++++++++++++++++++++++++++------ tests/dice/tst_dice.cpp | 6 +++++- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/node/ifnode.cpp b/node/ifnode.cpp index 43d055c..01b3f81 100644 --- a/node/ifnode.cpp +++ b/node/ifnode.cpp @@ -19,6 +19,7 @@ ***************************************************************************/ #include "ifnode.h" #include "result/diceresult.h" +#include "result/stringresult.h" PartialDiceRollNode::PartialDiceRollNode() : m_diceResult(new DiceResult) { @@ -117,9 +118,11 @@ void IfNode::run(ExecutionNode* previous) if(m_conditionType == OnEach) { - auto diceResult= new DiceResult; + auto resultOnEach= m_result; for(Die* dice : diceList) { + auto diceResult= new DiceResult; + StringResult* stringResult= nullptr; auto diceNode= new PartialDiceRollNode(); auto cpyDice= new Die(*dice); diceNode->insertDie(cpyDice); @@ -151,13 +154,34 @@ void IfNode::run(ExecutionNode* previous) { delete cpyDice; auto branchResult= previousLoop->getResult(); - auto val= branchResult->getResult(Dice::RESULT_TYPE::SCALAR).toInt(); - auto valDie= new Die(); - valDie->insertRollValue(val); - diceResult->insertResult(valDie); + if(branchResult->hasResultOfType(Dice::RESULT_TYPE::SCALAR)) + { + auto val= branchResult->getResult(Dice::RESULT_TYPE::SCALAR).toInt(); + auto valDie= new Die(); + valDie->insertRollValue(val); + diceResult->insertResult(valDie); + } + else if(branchResult->hasResultOfType(Dice::RESULT_TYPE::STRING)) + { + auto val= branchResult->getResult(Dice::RESULT_TYPE::STRING).toString(); + stringResult= new StringResult; + stringResult->setText(val); + } + } + if(nullptr != stringResult) + { + stringResult->setPrevious(resultOnEach); + resultOnEach= stringResult; + delete diceResult; + } + else + { + diceResult->setPrevious(resultOnEach); + resultOnEach= diceResult; } } - m_result= diceResult; + + m_result= resultOnEach; } else if((m_conditionType == OneOfThem) || (m_conditionType == AllOfThem)) { diff --git a/tests/dice/tst_dice.cpp b/tests/dice/tst_dice.cpp index 98dcdc1..8d6c1ad 100644 --- a/tests/dice/tst_dice.cpp +++ b/tests/dice/tst_dice.cpp @@ -850,7 +850,11 @@ void TestDice::ifTest() node.run(nullptr); - auto text= dynamic_cast(ifNode.getNextNode()->getResult())->getText(); + QString text; + if(nullptr != ifNode.getNextNode()) + text= dynamic_cast(ifNode.getNextNode()->getResult())->getText(); + else + text= dynamic_cast(ifNode.getResult())->getText(); QCOMPARE(expectedResult, text); -- cgit v1.2.3-70-g09d2