|  | #include <rive/core/binary_reader.hpp> | 
|  | #include <rive/file.hpp> | 
|  | #include <rive/node.hpp> | 
|  | #include <rive/shapes/clipping_shape.hpp> | 
|  | #include <rive/shapes/rectangle.hpp> | 
|  | #include <rive/shapes/image.hpp> | 
|  | #include <rive/assets/image_asset.hpp> | 
|  | #include <rive/relative_local_asset_resolver.hpp> | 
|  | #include "no_op_renderer.hpp" | 
|  | #include <catch.hpp> | 
|  | #include <cstdio> | 
|  |  | 
|  | TEST_CASE("image assets loads correctly", "[assets]") | 
|  | { | 
|  | FILE* fp = fopen("../../test/assets/walle.riv", "r"); | 
|  | REQUIRE(fp != nullptr); | 
|  |  | 
|  | fseek(fp, 0, SEEK_END); | 
|  | auto length = ftell(fp); | 
|  | fseek(fp, 0, SEEK_SET); | 
|  | uint8_t* bytes = new uint8_t[length]; | 
|  | REQUIRE(fread(bytes, 1, length, fp) == length); | 
|  | auto reader = rive::BinaryReader(bytes, length); | 
|  | rive::File* file = nullptr; | 
|  | auto result = rive::File::import(reader, &file); | 
|  |  | 
|  | REQUIRE(result == rive::ImportResult::success); | 
|  | REQUIRE(file != nullptr); | 
|  | REQUIRE(file->artboard() != nullptr); | 
|  |  | 
|  | auto node = file->artboard()->find("walle"); | 
|  | REQUIRE(node != nullptr); | 
|  | REQUIRE(node->is<rive::Image>()); | 
|  | auto walle = node->as<rive::Image>(); | 
|  | REQUIRE(walle->imageAsset() != nullptr); | 
|  | REQUIRE(walle->imageAsset()->decodedByteSize == 218873); | 
|  |  | 
|  | auto eve_left = file->artboard()->find("eve_left"); | 
|  | REQUIRE(eve_left != nullptr); | 
|  | REQUIRE(eve_left->is<rive::Image>()); | 
|  | REQUIRE(eve_left->as<rive::Image>()->imageAsset() != nullptr); | 
|  | REQUIRE(eve_left->as<rive::Image>()->imageAsset()->decodedByteSize == | 
|  | 246825); | 
|  |  | 
|  | auto eve_right = file->artboard()->find("eve_right"); | 
|  | REQUIRE(eve_right != nullptr); | 
|  | REQUIRE(eve_right->is<rive::Image>()); | 
|  | REQUIRE(eve_right->as<rive::Image>()->imageAsset() != nullptr); | 
|  | REQUIRE(eve_right->as<rive::Image>()->imageAsset() != walle->imageAsset()); | 
|  | REQUIRE(eve_right->as<rive::Image>()->imageAsset() == | 
|  | eve_left->as<rive::Image>()->imageAsset()); | 
|  |  | 
|  | file->artboard()->updateComponents(); | 
|  |  | 
|  | rive::NoOpRenderer renderer; | 
|  | file->artboard()->draw(&renderer); | 
|  |  | 
|  | delete file; | 
|  | delete[] bytes; | 
|  | } | 
|  |  | 
|  | TEST_CASE("out of band image assets loads correctly", "[assets]") | 
|  | { | 
|  | std::string filename = "../../test/assets/out_of_band/walle.riv"; | 
|  | rive::RelativeLocalAssetResolver resolver(filename); | 
|  |  | 
|  | FILE* fp = fopen(filename.c_str(), "r"); | 
|  | REQUIRE(fp != nullptr); | 
|  |  | 
|  | fseek(fp, 0, SEEK_END); | 
|  | auto length = ftell(fp); | 
|  | fseek(fp, 0, SEEK_SET); | 
|  | uint8_t* bytes = new uint8_t[length]; | 
|  | REQUIRE(fread(bytes, 1, length, fp) == length); | 
|  | auto reader = rive::BinaryReader(bytes, length); | 
|  | rive::File* file = nullptr; | 
|  | auto result = rive::File::import(reader, &file, &resolver); | 
|  |  | 
|  | REQUIRE(result == rive::ImportResult::success); | 
|  | REQUIRE(file != nullptr); | 
|  | REQUIRE(file->artboard() != nullptr); | 
|  |  | 
|  | auto node = file->artboard()->find("walle"); | 
|  | REQUIRE(node != nullptr); | 
|  | REQUIRE(node->is<rive::Image>()); | 
|  | auto walle = node->as<rive::Image>(); | 
|  | REQUIRE(walle->imageAsset() != nullptr); | 
|  | REQUIRE(walle->imageAsset()->decodedByteSize == 218873); | 
|  |  | 
|  | auto eve_left = file->artboard()->find("eve_left"); | 
|  | REQUIRE(eve_left != nullptr); | 
|  | REQUIRE(eve_left->is<rive::Image>()); | 
|  | REQUIRE(eve_left->as<rive::Image>()->imageAsset() != nullptr); | 
|  | REQUIRE(eve_left->as<rive::Image>()->imageAsset()->decodedByteSize == | 
|  | 246825); | 
|  |  | 
|  | auto eve_right = file->artboard()->find("eve_right"); | 
|  | REQUIRE(eve_right != nullptr); | 
|  | REQUIRE(eve_right->is<rive::Image>()); | 
|  | REQUIRE(eve_right->as<rive::Image>()->imageAsset() != nullptr); | 
|  | REQUIRE(eve_right->as<rive::Image>()->imageAsset() != walle->imageAsset()); | 
|  | REQUIRE(eve_right->as<rive::Image>()->imageAsset() == | 
|  | eve_left->as<rive::Image>()->imageAsset()); | 
|  |  | 
|  | file->artboard()->updateComponents(); | 
|  |  | 
|  | rive::NoOpRenderer renderer; | 
|  | file->artboard()->draw(&renderer); | 
|  |  | 
|  | delete file; | 
|  | delete[] bytes; | 
|  | } |