TGUI/tests/Loading/Serializer.cpp

156 lines
7.0 KiB
C++

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// TGUI - Texus' Graphical User Interface
// Copyright (C) 2012-2019 Bruno Van de Velde (vdv_b@tgui.eu)
//
// This software is provided 'as-is', without any express or implied warranty.
// In no event will the authors be held liable for any damages arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it freely,
// subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented;
// you must not claim that you wrote the original software.
// If you use this software in a product, an acknowledgment
// in the product documentation would be appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such,
// and must not be misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source distribution.
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "Tests.hpp"
#include <TGUI/Loading/Serializer.hpp>
TEST_CASE("[Serializer]")
{
SECTION("serialize uninitialized object")
{
REQUIRE_THROWS_AS(tgui::Serializer::serialize({}), tgui::Exception);
}
SECTION("serialize bool")
{
REQUIRE(tgui::Serializer::serialize({false}) == "false");
REQUIRE(tgui::Serializer::serialize({true}) == "true");
}
SECTION("serialize font")
{
tgui::Font font{"resources/DejaVuSans.ttf"};
REQUIRE(tgui::Serializer::serialize(font) == "\"resources/DejaVuSans.ttf\"");
font = nullptr;
REQUIRE(tgui::Serializer::serialize(font) == "null");
}
SECTION("serialize color")
{
REQUIRE(tgui::Serializer::serialize(sf::Color{100, 0, 50}) == "#640032");
REQUIRE(tgui::Serializer::serialize(sf::Color{1, 35, 69, 103}) == "#01234567");
REQUIRE(tgui::Serializer::serialize(sf::Color{137, 171, 205, 239}) == "#89ABCDEF");
REQUIRE(tgui::Serializer::serialize(sf::Color::Black) == "black");
REQUIRE(tgui::Serializer::serialize(sf::Color::White) == "white");
REQUIRE(tgui::Serializer::serialize(sf::Color::Red) == "red");
REQUIRE(tgui::Serializer::serialize(sf::Color::Green) == "green");
REQUIRE(tgui::Serializer::serialize(sf::Color::Blue) == "blue");
REQUIRE(tgui::Serializer::serialize(sf::Color::Magenta) == "magenta");
REQUIRE(tgui::Serializer::serialize(sf::Color::Yellow) == "yellow");
REQUIRE(tgui::Serializer::serialize(sf::Color::Cyan) == "cyan");
REQUIRE(tgui::Serializer::serialize(sf::Color::Transparent) == "transparent");
}
SECTION("serialize outline")
{
REQUIRE(tgui::Serializer::serialize(tgui::Outline{}) == "(0, 0, 0, 0)");
REQUIRE(tgui::Serializer::serialize(tgui::Outline{10, 2, 50, 300}) == "(10, 2, 50, 300)");
}
SECTION("serialize texture")
{
tgui::Texture texture;
texture.load("resources/image.png");
REQUIRE(tgui::Serializer::serialize(texture) == "\"resources/image.png\"");
texture.load("resources/image.png", {0, 0, 25, 25});
REQUIRE(tgui::Serializer::serialize(texture) == "\"resources/image.png\" Part(0, 0, 25, 25)");
texture.load("resources/image.png", {}, {10, 10, 30, 30}, true);
REQUIRE(tgui::Serializer::serialize(texture) == "\"resources/image.png\" Middle(10, 10, 30, 30) Smooth");
texture.load("resources/image.png", {0, 0, 40, 40}, {10, 10, 20, 20});
REQUIRE(tgui::Serializer::serialize(texture) == "\"resources/image.png\" Part(0, 0, 40, 40) Middle(10, 10, 20, 20)");
}
SECTION("serialize string")
{
REQUIRE(tgui::Serializer::serialize(sf::String{""}) == "\"\"");
REQUIRE(tgui::Serializer::serialize(sf::String{"word"}) == "word");
REQUIRE(tgui::Serializer::serialize(sf::String{"No/Quotes_Required@089%"}) == "No/Quotes_Required@089%");
REQUIRE(tgui::Serializer::serialize(sf::String{"String with spaces"}) == "\"String with spaces\"");
REQUIRE(tgui::Serializer::serialize(sf::String{"\\"}) == "\"\\\\\"");
REQUIRE(tgui::Serializer::serialize(sf::String{"\n"}) == "\"\\n\"");
REQUIRE(tgui::Serializer::serialize(sf::String{"\t"}) == "\"\\t\"");
REQUIRE(tgui::Serializer::serialize(sf::String{"\v"}) == "\"\\v\"");
REQUIRE(tgui::Serializer::serialize(sf::String{"\""}) == "\"\\\"\"");
REQUIRE(tgui::Serializer::serialize(sf::String{"a\t\"string\"?\nYES!"}) == "\"a\\t\\\"string\\\"?\\nYES!\"");
}
SECTION("serialize number")
{
REQUIRE(tgui::Serializer::serialize({0}) == "0");
REQUIRE(tgui::Serializer::serialize({1}) == "1");
REQUIRE(tgui::Serializer::serialize({2.15f}) == "2.15");
}
SECTION("serialize text style")
{
REQUIRE(tgui::Serializer::serialize(tgui::TextStyle{sf::Text::Regular}) == "Regular");
REQUIRE(tgui::Serializer::serialize(tgui::TextStyle{sf::Text::Bold}) == "Bold");
REQUIRE(tgui::Serializer::serialize(tgui::TextStyle{sf::Text::Italic | sf::Text::Underlined}) == "Italic | Underlined");
REQUIRE(tgui::Serializer::serialize(tgui::TextStyle{"bold"}) == "Bold");
REQUIRE(tgui::Serializer::serialize(tgui::TextStyle{"italic | underlined"}) == "Italic | Underlined");
REQUIRE(tgui::Serializer::serialize(tgui::TextStyle{256}) == "Regular");
}
SECTION("serialize renderer")
{
auto childRendererData = std::make_shared<tgui::RendererData>();
childRendererData->propertyValuePairs["Num"] = {5};
auto rendererData = std::make_shared<tgui::RendererData>();
rendererData->propertyValuePairs["SomeColor"] = {sf::Color::Red};
rendererData->propertyValuePairs["TextStyleProperty"] = {sf::Text::StrikeThrough};
rendererData->propertyValuePairs["Nested"] = {childRendererData};
std::string result = "SomeColor = red;\n"
"TextStyleProperty = StrikeThrough;\n"
"\n"
"Nested {\n"
" num = 5;\n"
"}\n";
REQUIRE(tgui::Serializer::serialize(rendererData) == result);
}
SECTION("custom serialize function")
{
REQUIRE(tgui::Serializer::serialize(sf::Color::Blue) == "blue");
auto oldFunc = tgui::Serializer::getFunction(tgui::ObjectConverter::Type::Color);
tgui::Serializer::setFunction(tgui::ObjectConverter::Type::Color, [](tgui::ObjectConverter&&){ return "STR"; });
REQUIRE(tgui::Serializer::serialize(sf::Color::Blue) == "STR");
REQUIRE(tgui::Serializer::serialize(tgui::Outline{10, 2, 50, 300}) == "(10, 2, 50, 300)");
tgui::Serializer::setFunction(tgui::ObjectConverter::Type::Color, oldFunc);
REQUIRE(tgui::Serializer::serialize(sf::Color::Blue) == "blue");
}
}