| #include "rive/core/binary_reader.hpp" |
| #include "rive/file.hpp" |
| #include "rive/nested_artboard.hpp" |
| #include "rive/animation/nested_bool.hpp" |
| #include "rive/animation/nested_input.hpp" |
| #include "rive/animation/nested_number.hpp" |
| #include "rive/animation/nested_trigger.hpp" |
| #include "rive/animation/state_machine_instance.hpp" |
| #include "rive/animation/state_machine_input_instance.hpp" |
| #include "catch.hpp" |
| #include "rive_file_reader.hpp" |
| #include <cstdio> |
| |
| TEST_CASE("validate nested boolean get/set", "[nestedInput]") |
| { |
| auto file = ReadRiveFile("../../test/assets/runtime_nested_inputs.riv"); |
| |
| auto artboard = file->artboard("MainArtboard")->instance(); |
| REQUIRE(artboard != nullptr); |
| REQUIRE(artboard->stateMachineCount() == 1); |
| |
| // Test getting/setting boolean SMIInput via nested artboard path |
| auto boolInput = artboard->getBool("CircleOuterState", "CircleOuter"); |
| auto smiInput = artboard->input("CircleOuterState", "CircleOuter"); |
| auto smiBoolInput = static_cast<rive::SMIBool*>(smiInput); |
| auto nestedArtboard = artboard->nestedArtboard("CircleOuter"); |
| auto nestedInput = nestedArtboard->input("CircleOuterState")->as<rive::NestedBool>(); |
| REQUIRE(boolInput->value() == false); |
| REQUIRE(smiBoolInput->value() == false); |
| REQUIRE(nestedInput->nestedValue() == false); |
| |
| boolInput->value(true); |
| REQUIRE(boolInput->value() == true); |
| REQUIRE(smiBoolInput->value() == true); |
| REQUIRE(nestedInput->nestedValue() == true); |
| |
| smiBoolInput->value(false); |
| REQUIRE(boolInput->value() == false); |
| REQUIRE(smiBoolInput->value() == false); |
| REQUIRE(nestedInput->nestedValue() == false); |
| |
| nestedInput->nestedValue(true); |
| REQUIRE(boolInput->value() == true); |
| REQUIRE(smiBoolInput->value() == true); |
| REQUIRE(nestedInput->nestedValue() == true); |
| } |
| |
| TEST_CASE("validate nested number get/set", "[nestedInput]") |
| { |
| auto file = ReadRiveFile("../../test/assets/runtime_nested_inputs.riv"); |
| |
| auto artboard = file->artboard("MainArtboard")->instance(); |
| REQUIRE(artboard != nullptr); |
| REQUIRE(artboard->stateMachineCount() == 1); |
| |
| // Test getting/setting number SMIInput via nested artboard path |
| auto numInput = artboard->getNumber("CircleOuterNumber", "CircleOuter"); |
| auto smiInput = artboard->input("CircleOuterNumber", "CircleOuter"); |
| auto smiNumInput = static_cast<rive::SMINumber*>(smiInput); |
| auto nestedArtboard = artboard->nestedArtboardAtPath("CircleOuter"); |
| auto nestedInput = nestedArtboard->input("CircleOuterNumber")->as<rive::NestedNumber>(); |
| REQUIRE(numInput->value() == 0); |
| REQUIRE(smiNumInput->value() == 0); |
| REQUIRE(nestedInput->nestedValue() == 0); |
| |
| numInput->value(10); |
| REQUIRE(numInput->value() == 10); |
| REQUIRE(smiNumInput->value() == 10); |
| REQUIRE(nestedInput->nestedValue() == 10); |
| |
| smiNumInput->value(5); |
| REQUIRE(numInput->value() == 5); |
| REQUIRE(smiNumInput->value() == 5); |
| REQUIRE(nestedInput->nestedValue() == 5); |
| |
| nestedInput->nestedValue(99); |
| REQUIRE(numInput->value() == 99); |
| REQUIRE(smiNumInput->value() == 99); |
| REQUIRE(nestedInput->nestedValue() == 99); |
| } |
| |
| TEST_CASE("validate nested trigger fire", "[nestedInput]") |
| { |
| auto file = ReadRiveFile("../../test/assets/runtime_nested_inputs.riv"); |
| |
| auto artboard = file->artboard("MainArtboard")->instance(); |
| REQUIRE(artboard != nullptr); |
| REQUIRE(artboard->stateMachineCount() == 1); |
| |
| // Test getting/setting number SMIInput via nested artboard path |
| auto tInput = artboard->getTrigger("CircleOuterTrigger", "CircleOuter"); |
| auto smiInput = artboard->input("CircleOuterTrigger", "CircleOuter"); |
| auto smiTInput = static_cast<rive::SMITrigger*>(smiInput); |
| auto nestedArtboard = artboard->nestedArtboardAtPath("CircleOuter"); |
| auto nestedInput = nestedArtboard->input("CircleOuterTrigger")->as<rive::NestedTrigger>(); |
| auto nestedSMI = static_cast<rive::SMITrigger*>(nestedInput->input()); |
| REQUIRE(tInput->didFire() == false); |
| REQUIRE(smiTInput->didFire() == false); |
| REQUIRE(nestedSMI->didFire() == false); |
| |
| tInput->fire(); |
| REQUIRE(tInput->didFire() == true); |
| REQUIRE(smiTInput->didFire() == true); |
| REQUIRE(nestedSMI->didFire() == true); |
| } |
| |
| TEST_CASE("validate nested boolean get/set multiple nested artboards deep", "[nestedInput]") |
| { |
| auto file = ReadRiveFile("../../test/assets/runtime_nested_inputs.riv"); |
| |
| auto artboard = file->artboard("MainArtboard")->instance(); |
| REQUIRE(artboard != nullptr); |
| REQUIRE(artboard->stateMachineCount() == 1); |
| |
| // Test getting/setting boolean SMIInput via nested artboard path |
| auto boolInput = artboard->getBool("CircleInnerState", "CircleOuter/CircleInner"); |
| auto smiInput = artboard->input("CircleInnerState", "CircleOuter/CircleInner"); |
| auto smiBoolInput = static_cast<rive::SMIBool*>(smiInput); |
| auto nestedArtboard = artboard->nestedArtboardAtPath("CircleOuter/CircleInner"); |
| auto nestedInput = nestedArtboard->input("CircleInnerState")->as<rive::NestedBool>(); |
| REQUIRE(boolInput->value() == false); |
| REQUIRE(smiBoolInput->value() == false); |
| REQUIRE(nestedInput->nestedValue() == false); |
| |
| boolInput->value(true); |
| REQUIRE(boolInput->value() == true); |
| REQUIRE(smiBoolInput->value() == true); |
| REQUIRE(nestedInput->nestedValue() == true); |
| |
| smiBoolInput->value(false); |
| REQUIRE(boolInput->value() == false); |
| REQUIRE(smiBoolInput->value() == false); |
| REQUIRE(nestedInput->nestedValue() == false); |
| |
| nestedInput->nestedValue(true); |
| REQUIRE(boolInput->value() == true); |
| REQUIRE(smiBoolInput->value() == true); |
| REQUIRE(nestedInput->nestedValue() == true); |
| } |