summaryrefslogtreecommitdiffstats
path: root/tests/auto/statemachine/tst_statemachine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/statemachine/tst_statemachine.cpp')
-rw-r--r--tests/auto/statemachine/tst_statemachine.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/auto/statemachine/tst_statemachine.cpp b/tests/auto/statemachine/tst_statemachine.cpp
index a7464b3..03b30d6 100644
--- a/tests/auto/statemachine/tst_statemachine.cpp
+++ b/tests/auto/statemachine/tst_statemachine.cpp
@@ -33,6 +33,9 @@
#include <QtScxml/qscxmlstatemachine.h>
#include <QtScxml/qscxmlinvokableservice.h>
#include <QtScxml/private/qscxmlstatemachine_p.h>
+#include <QtScxml/QScxmlNullDataModel>
+
+#include "../shared/bindableutils.h"
enum { SpyWaitTime = 8000 };
@@ -57,6 +60,8 @@ private Q_SLOTS:
void multipleInvokableServices(); // QTBUG-61484
void logWithoutExpr();
+
+ void bindings();
};
void tst_StateMachine::stateNames_data()
@@ -455,6 +460,61 @@ void tst_StateMachine::logWithoutExpr()
QTRY_COMPARE(logSpy.count(), 1);
}
+void tst_StateMachine::bindings()
+{
+ // -- QScxmlStateMachine::initialized
+ std::unique_ptr<QScxmlStateMachine> stateMachine1(
+ QScxmlStateMachine::fromFile(QString(":/tst_statemachine/invoke.scxml")));
+ QVERIFY(stateMachine1.get());
+ testReadableBindableBasics<QScxmlStateMachine, bool>(
+ *stateMachine1, false, true, "initialized", [&](){ stateMachine1.get()->start(); });
+
+ // -- QScxmlStateMachine::initialValues
+ QVariantMap map1{{"map", 1}};
+ QVariantMap map2{{"map", 2}};
+ testWritableBindableBasics<QScxmlStateMachine, QVariantMap>(
+ *stateMachine1, map1, map2, "initialValues");
+
+ // -- QScxmlStateMachine::loader
+ class MockLoader: public QScxmlCompiler::Loader
+ {
+ public:
+ QByteArray load(const QString&, const QString&, QStringList*) override { return QByteArray(); }
+ };
+ MockLoader loader1;
+ MockLoader loader2;
+ testWritableBindableBasics<QScxmlStateMachine, QScxmlCompiler::Loader*>(
+ *stateMachine1, &loader1, &loader2, "loader");
+
+ // -- QScxmlStateMachine::dataModel
+ // Use non-existent file below, as valid file would initialize the model
+ std::unique_ptr<QScxmlStateMachine> stateMachine2(
+ QScxmlStateMachine::fromFile(QString("not_a_real_file")));
+ std::unique_ptr<QScxmlStateMachine> stateMachine3(
+ QScxmlStateMachine::fromFile(QString("not_a_real_file")));
+ QScxmlNullDataModel model1;
+ QScxmlNullDataModel model2;
+ // Use the "readable" test helper as the data can only change once
+ testReadableBindableBasics<QScxmlStateMachine, QScxmlDataModel*>(
+ *stateMachine2, nullptr, &model1, "dataModel",
+ [&](){ stateMachine2->setDataModel(&model1); });
+ // verify that setting the model twice will not break the binding (setting is ignored)
+ QProperty<QScxmlDataModel*> modelProperty(&model1);
+ stateMachine3.get()->bindableDataModel().setBinding(Qt::makePropertyBinding(modelProperty));
+ QVERIFY(stateMachine3.get()->bindableDataModel().hasBinding());
+ QVERIFY(stateMachine3.get()->dataModel() == &model1);
+ stateMachine3.get()->setDataModel(&model2); // should be ignored
+ QVERIFY(stateMachine3.get()->dataModel() == &model1);
+ QVERIFY(stateMachine3.get()->bindableDataModel().hasBinding());
+
+ // -- QScxmlStateMachine::tableData
+ // Use the statemachine to generate the tabledDatas for testing
+ std::unique_ptr<QScxmlStateMachine> stateMachine4(
+ QScxmlStateMachine::fromFile(QString(":/tst_statemachine/invoke.scxml")));
+ testWritableBindableBasics<QScxmlStateMachine, QScxmlTableData*>(
+ *stateMachine2, stateMachine1.get()->tableData(), stateMachine4.get()->tableData(), "tableData");
+}
+
QTEST_MAIN(tst_StateMachine)
#include "tst_statemachine.moc"