more tests for stateevaluator, fix found issues
This commit is contained in:
parent
16645498db
commit
55b6962ebc
@ -80,6 +80,16 @@ bool StateEvaluator::evaluate() const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_operatorType == StateOperatorOr) {
|
||||||
|
foreach (const StateEvaluator &stateEvaluator, m_childEvaluators) {
|
||||||
|
if (stateEvaluator.evaluate()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
foreach (const StateEvaluator &stateEvaluator, m_childEvaluators) {
|
foreach (const StateEvaluator &stateEvaluator, m_childEvaluators) {
|
||||||
if (!stateEvaluator.evaluate()) {
|
if (!stateEvaluator.evaluate()) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -44,6 +44,7 @@ private slots:
|
|||||||
void testStateEvaluator_data();
|
void testStateEvaluator_data();
|
||||||
void testStateEvaluator();
|
void testStateEvaluator();
|
||||||
|
|
||||||
|
void testStateEvaluator2_data();
|
||||||
void testStateEvaluator2();
|
void testStateEvaluator2();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -336,6 +337,9 @@ void TestRules::testStateEvaluator_data()
|
|||||||
QTest::addColumn<ValueOperator>("operatorType");
|
QTest::addColumn<ValueOperator>("operatorType");
|
||||||
QTest::addColumn<bool>("shouldMatch");
|
QTest::addColumn<bool>("shouldMatch");
|
||||||
|
|
||||||
|
QTest::newRow("invalid stateId") << m_mockDeviceId << StateTypeId::createStateTypeId() << QVariant(10) << ValueOperatorEquals << false;
|
||||||
|
QTest::newRow("invalid deviceId") << DeviceId::createDeviceId() << mockIntStateId << QVariant(10) << ValueOperatorEquals << false;
|
||||||
|
|
||||||
QTest::newRow("equals, not matching") << m_mockDeviceId << mockIntStateId << QVariant(7777) << ValueOperatorEquals << false;
|
QTest::newRow("equals, not matching") << m_mockDeviceId << mockIntStateId << QVariant(7777) << ValueOperatorEquals << false;
|
||||||
QTest::newRow("equals, matching") << m_mockDeviceId << mockIntStateId << QVariant(10) << ValueOperatorEquals << true;
|
QTest::newRow("equals, matching") << m_mockDeviceId << mockIntStateId << QVariant(10) << ValueOperatorEquals << true;
|
||||||
|
|
||||||
@ -365,19 +369,54 @@ void TestRules::testStateEvaluator()
|
|||||||
|
|
||||||
StateDescriptor descriptor(stateTypeId, deviceId, value, operatorType);
|
StateDescriptor descriptor(stateTypeId, deviceId, value, operatorType);
|
||||||
StateEvaluator evaluator(descriptor);
|
StateEvaluator evaluator(descriptor);
|
||||||
QVERIFY2(evaluator.evaluate() == shouldMatch, "State shouldn't match");
|
|
||||||
|
|
||||||
|
QVERIFY2(evaluator.evaluate() == shouldMatch, shouldMatch ? "State should match" : "State shouldn't match");
|
||||||
|
}
|
||||||
|
|
||||||
|
void TestRules::testStateEvaluator2_data()
|
||||||
|
{
|
||||||
|
QTest::addColumn<int>("intValue");
|
||||||
|
QTest::addColumn<ValueOperator>("intOperator");
|
||||||
|
|
||||||
|
QTest::addColumn<bool>("boolValue");
|
||||||
|
QTest::addColumn<ValueOperator>("boolOperator");
|
||||||
|
|
||||||
|
QTest::addColumn<StateOperator>("stateOperator");
|
||||||
|
|
||||||
|
QTest::addColumn<bool>("shouldMatch");
|
||||||
|
|
||||||
|
QTest::newRow("Y: 10 && false") << 10 << ValueOperatorEquals << false << ValueOperatorEquals << StateOperatorAnd << true;
|
||||||
|
QTest::newRow("N: 10 && true") << 10 << ValueOperatorEquals << true << ValueOperatorEquals << StateOperatorAnd << false;
|
||||||
|
QTest::newRow("N: 11 && false") << 11 << ValueOperatorEquals << false << ValueOperatorEquals << StateOperatorAnd << false;
|
||||||
|
QTest::newRow("Y: 11 || false") << 11 << ValueOperatorEquals << false << ValueOperatorEquals << StateOperatorOr << true;
|
||||||
|
QTest::newRow("Y: 10 || false") << 10 << ValueOperatorEquals << false << ValueOperatorEquals << StateOperatorOr << true;
|
||||||
|
QTest::newRow("Y: 10 || true") << 10 << ValueOperatorEquals << true << ValueOperatorEquals << StateOperatorOr << true;
|
||||||
|
QTest::newRow("N: 11 || true") << 11 << ValueOperatorEquals << true << ValueOperatorEquals << StateOperatorOr << false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestRules::testStateEvaluator2()
|
void TestRules::testStateEvaluator2()
|
||||||
{
|
{
|
||||||
// StateDescriptor descriptor1(mockIntStateId, deviceId, value, operatorType);
|
QFETCH(int, intValue);
|
||||||
// StateEvaluator evaluator1(descriptor);
|
QFETCH(ValueOperator, intOperator);
|
||||||
|
QFETCH(bool, boolValue);
|
||||||
|
QFETCH(ValueOperator, boolOperator);
|
||||||
|
QFETCH(StateOperator, stateOperator);
|
||||||
|
QFETCH(bool, shouldMatch);
|
||||||
|
|
||||||
// StateDescriptor descriptor2(mockBoolStateId, deviceId, value, operatorType);
|
StateDescriptor descriptor1(mockIntStateId, m_mockDeviceId, intValue, intOperator);
|
||||||
// StateEvaluator evaluator2(descriptor);
|
StateEvaluator evaluator1(descriptor1);
|
||||||
|
|
||||||
// StateEvaluator mainEvaluator()
|
StateDescriptor descriptor2(mockBoolStateId, m_mockDeviceId, boolValue, boolOperator);
|
||||||
|
StateEvaluator evaluator2(descriptor2);
|
||||||
|
|
||||||
|
QList<StateEvaluator> childEvaluators;
|
||||||
|
childEvaluators.append(evaluator1);
|
||||||
|
childEvaluators.append(evaluator2);
|
||||||
|
|
||||||
|
StateEvaluator mainEvaluator(childEvaluators);
|
||||||
|
mainEvaluator.setOperatorType(stateOperator);
|
||||||
|
|
||||||
|
QVERIFY2(mainEvaluator.evaluate() == shouldMatch, shouldMatch ? "State should match" : "State shouldn't match");
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "testrules.moc"
|
#include "testrules.moc"
|
||||||
|
|||||||
Reference in New Issue
Block a user