/*
- * 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();
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);
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);
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);
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();
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);
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]")
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);
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);
+}