prepare tvg v0.8 release
[platform/core/graphics/tizenvg.git] / test / testPicture.cpp
index a468463..1859e55 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
 
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
 using namespace tvg;
 using namespace std;
 
+
+TEST_CASE("Picture Creation", "[tvgPicture]")
+{
+    auto picture = Picture::gen();
+    REQUIRE(picture);
+
+    REQUIRE(picture->identifier() == Picture::identifier());
+    REQUIRE(picture->identifier() != Shape::identifier());
+    REQUIRE(picture->identifier() != Scene::identifier());
+}
+
 TEST_CASE("Load SVG file", "[tvgPicture]")
 {
     auto picture = Picture::gen();
@@ -51,11 +62,11 @@ TEST_CASE("Load SVG Data", "[tvgPicture]")
     REQUIRE(picture);
 
     //Negative cases
-    REQUIRE(picture->load(nullptr, 100) == Result::InvalidArguments);
-    REQUIRE(picture->load(svg, 0) == Result::InvalidArguments);
+    REQUIRE(picture->load(nullptr, 100, "") == Result::InvalidArguments);
+    REQUIRE(picture->load(svg, 0, "") == Result::InvalidArguments);
 
     //Positive cases
-    REQUIRE(picture->load(svg, strlen(svg)) == Result::Success);
+    REQUIRE(picture->load(svg, strlen(svg), "svg") == Result::Success);
 
     float w, h;
     REQUIRE(picture->size(&w, &h) == Result::Success);
@@ -118,15 +129,15 @@ TEST_CASE("Load PNG file from data", "[tvgPicture]")
     REQUIRE(picture);
 
     //Open file
-    ifstream file(TEST_DIR"/test.png");
+    ifstream file(TEST_DIR"/test.png", ios::in | ios::binary);
     REQUIRE(file.is_open());
     auto size = sizeof(uint32_t) * (1000*1000);
     auto data = (char*)malloc(size);
     file.read(data, size);
     file.close();
 
-    REQUIRE(picture->load(data, size, false) == Result::Success);
-    REQUIRE(picture->load(data, size, true) == Result::Success);
+    REQUIRE(picture->load(data, size, "", false) == Result::Success);
+    REQUIRE(picture->load(data, size, "png", true) == Result::Success);
 
     float w, h;
     REQUIRE(picture->size(&w, &h) == Result::Success);
@@ -159,18 +170,18 @@ TEST_CASE("Load JPG file from data", "[tvgPicture]")
     REQUIRE(picture);
 
     //Open file
-    ifstream file(TEST_DIR"/test.jpg");
+    ifstream file(TEST_DIR"/test.jpg", ios::in | ios::binary);
     REQUIRE(file.is_open());
     auto begin = file.tellg();
-    file.seekg(0, std::ios::end);
+    file.seekg(0, ios::end);
     auto size = file.tellg() - begin;
     auto data = (char*)malloc(size);
-    file.seekg(0, std::ios::beg);
+    file.seekg(0, ios::beg);
     file.read(data, size);
     file.close();
 
-    REQUIRE(picture->load(data, size, false) == Result::Success);
-    REQUIRE(picture->load(data, size, true) == Result::Success);
+    REQUIRE(picture->load(data, size, "", false) == Result::Success);
+    REQUIRE(picture->load(data, size, "jpg", true) == Result::Success);
 
     float w, h;
     REQUIRE(picture->size(&w, &h) == Result::Success);
@@ -180,6 +191,50 @@ TEST_CASE("Load JPG file from data", "[tvgPicture]")
     free(data);
 }
 
+TEST_CASE("Load TVG file from path", "[tvgPicture]")
+{
+    auto picture = Picture::gen();
+    REQUIRE(picture);
+
+    //Invalid file
+    REQUIRE(picture->load("invalid.tvg") == Result::InvalidArguments);
+
+    REQUIRE(picture->load(TEST_DIR"/tag.tvg") == Result::Success);
+
+    float w, h;
+    REQUIRE(picture->size(&w, &h) == Result::Success);
+
+    REQUIRE(w == 1000);
+    REQUIRE(h == 1000);
+}
+
+TEST_CASE("Load TVG file from data", "[tvgPicture]")
+{
+    auto picture = Picture::gen();
+    REQUIRE(picture);
+
+    //Open file
+    ifstream file(TEST_DIR"/tag.tvg", ios::in | ios::binary);
+    REQUIRE(file.is_open());
+    auto begin = file.tellg();
+    file.seekg(0, ios::end);
+    auto size = file.tellg() - begin;
+    auto data = (char*)malloc(size);
+    file.seekg(0, ios::beg);
+    file.read(data, size);
+    file.close();
+
+    REQUIRE(picture->load(data, size, "", false) == Result::Success);
+    REQUIRE(picture->load(data, size, "tvg", true) == Result::Success);
+
+    float w, h;
+    REQUIRE(picture->size(&w, &h) == Result::Success);
+    REQUIRE(w == 1000);
+    REQUIRE(h == 1000);
+
+    free(data);
+}
+
 TEST_CASE("Picture Size", "[tvgPicture]")
 {
     auto picture = Picture::gen();
@@ -201,6 +256,23 @@ TEST_CASE("Picture Size", "[tvgPicture]")
     REQUIRE(picture->size(w, h) == Result::Success);
 }
 
+TEST_CASE("Picture Duplication", "[tvgPicture]")
+{
+    auto picture = Picture::gen();
+    REQUIRE(picture);
+
+    REQUIRE(picture->load(TEST_DIR"/logo.svg") == Result::Success);
+    REQUIRE(picture->size(100, 100) == Result::Success);
+
+    auto dup = unique_ptr<Picture>((Picture*)picture->duplicate());
+    REQUIRE(dup);
+
+    float w, h;
+    REQUIRE(picture->size(&w, &h) == Result::Success);
+    REQUIRE(w == 100);
+    REQUIRE(h == 100);
+}
+
 TEST_CASE("Load SVG file and render", "[tvgPicture]")
 {
     REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success);
@@ -208,17 +280,24 @@ TEST_CASE("Load SVG file and render", "[tvgPicture]")
     auto canvas = SwCanvas::gen();
     REQUIRE(canvas);
 
-    uint32_t buffer[100*100];
-    REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success);
+    auto buffer = new uint32_t[1000*1000];
+    if (!buffer) return;
+
+    REQUIRE(canvas->target(buffer, 1000, 1000, 1000, SwCanvas::Colorspace::ABGR8888) == Result::Success);
 
     auto picture = Picture::gen();
     REQUIRE(picture);
 
     REQUIRE(picture->load(TEST_DIR"/tag.svg") == Result::Success);
+    REQUIRE(picture->size(100, 100) == Result::Success);
 
     REQUIRE(canvas->push(move(picture)) == Result::Success);
+    REQUIRE(canvas->draw() == Result::Success);
+    REQUIRE(canvas->sync() == Result::Success);
 
     REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success);
+
+    delete[] buffer;
 }
 
 TEST_CASE("Load PNG file and render", "[tvgPicture]")
@@ -235,6 +314,8 @@ TEST_CASE("Load PNG file and render", "[tvgPicture]")
     REQUIRE(picture);
 
     REQUIRE(picture->load(TEST_DIR"/test.png") == Result::Success);
+    REQUIRE(picture->opacity(192) == Result::Success);
+    REQUIRE(picture->scale(5.0) == Result::Success);
 
     REQUIRE(canvas->push(move(picture)) == Result::Success);
 
@@ -260,3 +341,62 @@ TEST_CASE("Load JPG file and render", "[tvgPicture]")
 
     REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success);
 }
+
+TEST_CASE("Load TVG file and render", "[tvgPicture]")
+{
+    REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success);
+
+    auto canvas = SwCanvas::gen();
+    REQUIRE(canvas);
+
+    auto buffer = new uint32_t[1000*1000];
+    if (!buffer) return;
+
+    REQUIRE(canvas->target(buffer, 1000, 1000, 1000, SwCanvas::Colorspace::ABGR8888) == Result::Success);
+
+    auto pictureTag = Picture::gen();
+    REQUIRE(pictureTag);
+    REQUIRE(pictureTag->load(TEST_DIR"/tag.tvg") == Result::Success);
+    REQUIRE(canvas->push(move(pictureTag)) == Result::Success);
+
+    auto pictureTest = Picture::gen();
+    REQUIRE(pictureTest);
+    REQUIRE(pictureTest->load(TEST_DIR"/test.tvg") == Result::Success);
+    REQUIRE(canvas->push(move(pictureTest)) == Result::Success);
+
+    REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success);
+
+    delete[] buffer;
+}
+
+TEST_CASE("Load RAW file and render", "[tvgPicture]")
+{
+    REQUIRE(Initializer::init(CanvasEngine::Sw, 0) == Result::Success);
+
+    auto canvas = SwCanvas::gen();
+    REQUIRE(canvas);
+
+    uint32_t buffer[100*100];
+    REQUIRE(canvas->target(buffer, 100, 100, 100, SwCanvas::Colorspace::ABGR8888) == Result::Success);
+
+    auto picture = Picture::gen();
+    REQUIRE(picture);
+
+    string path(TEST_DIR"/rawimage_200x300.raw");
+
+    ifstream file(path);
+    if (!file.is_open()) return;
+    auto data = (uint32_t*)malloc(sizeof(uint32_t) * (200*300));
+    if (!data) return;
+    file.read(reinterpret_cast<char *>(data), sizeof (uint32_t) * 200 * 300);
+    file.close();
+
+    REQUIRE(picture->load(data, 200, 300, false) == Result::Success);
+    REQUIRE(picture->size(100, 150) == Result::Success);
+
+    REQUIRE(canvas->push(move(picture)) == Result::Success);
+
+    REQUIRE(Initializer::term(CanvasEngine::Sw) == Result::Success);
+
+    free(data);
+}