Add test for entry state machine.
diff --git a/include/rive/artboard.hpp b/include/rive/artboard.hpp
index 3c52a68..2dfc2f5 100644
--- a/include/rive/artboard.hpp
+++ b/include/rive/artboard.hpp
@@ -164,6 +164,7 @@
std::unique_ptr<StateMachineInstance> stateMachineAt(size_t index);
std::unique_ptr<StateMachineInstance> stateMachineNamed(const std::string& name);
+ std::unique_ptr<StateMachineInstance> defaultStateMachineInstance();
};
} // namespace rive
diff --git a/src/artboard.cpp b/src/artboard.cpp
index 1d862b7..5a865ea 100644
--- a/src/artboard.cpp
+++ b/src/artboard.cpp
@@ -528,7 +528,7 @@
}
StateMachine* Artboard::defaultStateMachine() const {
- if (defaultStateMachineId() > m_StateMachines.size()) {
+ if (defaultStateMachineId() >= m_StateMachines.size()) {
return nullptr;
}
return m_StateMachines[defaultStateMachineId()];
@@ -616,3 +616,8 @@
auto sm = this->stateMachine(name);
return sm ? std::make_unique<StateMachineInstance>(sm, this) : nullptr;
}
+
+std::unique_ptr<StateMachineInstance> ArtboardInstance::defaultStateMachineInstance() {
+ auto sm = this->defaultStateMachine();
+ return sm ? std::make_unique<StateMachineInstance>(sm, this) : nullptr;
+}
\ No newline at end of file
diff --git a/test/assets/entry.riv b/test/assets/entry.riv
new file mode 100644
index 0000000..22b208f
--- /dev/null
+++ b/test/assets/entry.riv
Binary files differ
diff --git a/test/default_state_machine_test.cpp b/test/default_state_machine_test.cpp
new file mode 100644
index 0000000..f9f8ff6
--- /dev/null
+++ b/test/default_state_machine_test.cpp
@@ -0,0 +1,27 @@
+#include <rive/file.hpp>
+#include <rive/node.hpp>
+#include <rive/shapes/clipping_shape.hpp>
+#include <rive/shapes/rectangle.hpp>
+#include <rive/shapes/shape.hpp>
+#include <rive/animation/state_machine_instance.hpp>
+#include "no_op_factory.hpp"
+#include "no_op_renderer.hpp"
+#include "rive_file_reader.hpp"
+#include <catch.hpp>
+#include <cstdio>
+
+TEST_CASE("default state machine is detected at load", "[file]") {
+ auto file = ReadRiveFile("../../test/assets/entry.riv");
+
+ auto artboard = file->artboard();
+
+ REQUIRE(artboard->defaultStateMachine() != nullptr);
+ REQUIRE(artboard->defaultStateMachine()->name() == "State Machine 1");
+
+ auto artboardInstance = artboard->instance();
+ REQUIRE(artboardInstance != nullptr);
+ auto defaultStateMachineInstance = artboardInstance->defaultStateMachineInstance();
+
+ REQUIRE(defaultStateMachineInstance != nullptr);
+ REQUIRE(defaultStateMachineInstance->name() == "State Machine 1");
+}