submodule: add rive-cpp to rive-tizen as submodule
[platform/core/uifw/rive-tizen.git] / submodule / test / clip_test.cpp
1 #include "catch.hpp"
2 #include "core/binary_reader.hpp"
3 #include "file.hpp"
4 #include "no_op_renderer.hpp"
5 #include "node.hpp"
6 #include "shapes/clipping_shape.hpp"
7 #include "shapes/rectangle.hpp"
8 #include "shapes/shape.hpp"
9 #include <cstdio>
10
11 TEST_CASE("clipping loads correctly", "[clipping]")
12 {
13         FILE* fp = fopen("../../test/assets/circle_clips.riv", "r");
14         REQUIRE(fp != nullptr);
15
16         fseek(fp, 0, SEEK_END);
17         auto length = ftell(fp);
18         fseek(fp, 0, SEEK_SET);
19         uint8_t* bytes = new uint8_t[length];
20         REQUIRE(fread(bytes, 1, length, fp) == length);
21         auto reader = rive::BinaryReader(bytes, length);
22         rive::File* file = nullptr;
23         auto result = rive::File::import(reader, &file);
24
25         REQUIRE(result == rive::ImportResult::success);
26         REQUIRE(file != nullptr);
27         REQUIRE(file->artboard() != nullptr);
28
29         auto node = file->artboard()->find("TopEllipse");
30         REQUIRE(node != nullptr);
31         REQUIRE(node->is<rive::Shape>());
32
33         auto shape = node->as<rive::Shape>();
34         REQUIRE(shape->clippingShapes().size() == 2);
35         REQUIRE(shape->clippingShapes()[0]->source()->name() == "ClipRect2");
36         REQUIRE(shape->clippingShapes()[1]->source()->name() == "BabyEllipse");
37
38         file->artboard()->updateComponents();
39
40         rive::NoOpRenderer renderer;
41         file->artboard()->draw(&renderer);
42
43         delete file;
44         delete[] bytes;
45 }