Files
GDevelop/Core/tests/Variable.cpp

140 lines
4.6 KiB
C++

/*
* GDevelop Core
* Copyright 2008-2016 Florian Rival (Florian.Rival@gmail.com). All rights
* reserved. This project is released under the MIT License.
*/
/**
* @file Tests covering events of GDevelop Core.
*/
#include <algorithm>
#include <initializer_list>
#include <map>
#include "GDCore/CommonTools.h"
#include "GDCore/Project/VariablesContainer.h"
#include "catch.hpp"
TEST_CASE("Variable", "[common][variables]") {
SECTION("Basics") {
gd::Variable variable;
variable.SetValue(50);
REQUIRE(variable.GetValue() == 50);
REQUIRE(variable == 50);
REQUIRE(variable.GetType() == gd::Variable::Type::Number);
variable.SetString("MyString");
REQUIRE(variable.GetString() == "MyString");
REQUIRE(variable == "MyString");
REQUIRE(variable.GetType() == gd::Variable::Type::String);
variable.SetBool(false);
REQUIRE(variable.GetBool() == false);
REQUIRE(variable == false);
REQUIRE(variable.GetType() == gd::Variable::Type::Boolean);
}
SECTION("Conversions") {
gd::Variable variable;
variable.SetValue(50);
variable.CastTo(gd::Variable::Type::String);
REQUIRE(variable.GetType() == gd::Variable::Type::String);
REQUIRE(variable.GetString() == "50");
variable.SetString("MyString");
variable.CastTo(gd::Variable::Type::Number);
REQUIRE(variable.GetType() == gd::Variable::Type::Number);
REQUIRE(variable.GetValue() == 0);
}
SECTION("Use with int and string like semantics") {
gd::Variable variable;
variable = 50;
REQUIRE(variable.GetValue() == 50);
REQUIRE(variable.GetType() == gd::Variable::Type::Number);
variable = "MyString";
REQUIRE(variable.GetString() == "MyString");
REQUIRE(variable.GetType() == gd::Variable::Type::String);
variable = "MyRealStdString";
REQUIRE(variable.GetString() == "MyRealStdString");
REQUIRE(variable.GetType() == gd::Variable::Type::String);
}
SECTION("Copy and assignment") {
gd::Variable variable1;
gd::Variable variable2;
variable1.GetChild("Child1").SetString("Hello World");
variable1.GetChild("Child2").SetValue(42);
gd::Variable variable3(variable1);
variable2 = variable1;
REQUIRE(variable2.HasChild("Child1") == true);
REQUIRE(variable2.HasChild("Child2") == true);
REQUIRE(variable3.HasChild("Child1") == true);
REQUIRE(variable3.HasChild("Child2") == true);
REQUIRE(variable1.GetChild("Child1").GetString() == "Hello World");
REQUIRE(variable1.GetChild("Child2").GetValue() == 42);
REQUIRE(variable2.GetChild("Child1").GetString() == "Hello World");
REQUIRE(variable2.GetChild("Child2").GetValue() == 42);
REQUIRE(variable3.GetChild("Child1").GetString() == "Hello World");
REQUIRE(variable3.GetChild("Child2").GetValue() == 42);
variable2.GetChild("Child1").SetString("Hello copied World");
variable2.GetChild("Child2").SetValue(43);
variable3.GetChild("Child1").SetString("Hello second copied World");
variable3.GetChild("Child2").SetValue(44);
REQUIRE(variable1.GetChild("Child1").GetString() == "Hello World");
REQUIRE(variable1.GetChild("Child2").GetValue() == 42);
REQUIRE(variable2.GetChild("Child1").GetString() == "Hello copied World");
REQUIRE(variable2.GetChild("Child2").GetValue() == 43);
REQUIRE(variable3.GetChild("Child1").GetString() ==
"Hello second copied World");
REQUIRE(variable3.GetChild("Child2").GetValue() == 44);
}
SECTION("Can find identical number variables") {
gd::Variable variable;
variable.SetValue(123);
gd::Variable otherVariable;
otherVariable.SetValue(123);
REQUIRE(variable == otherVariable);
}
SECTION("Can find different number variables") {
gd::Variable variable;
variable.SetValue(123);
gd::Variable otherVariable;
otherVariable.SetValue(456);
REQUIRE(variable != otherVariable);
}
SECTION("Can find identical structure variables") {
gd::Variable variable;
variable.GetChild("MyChild").SetValue(123);
gd::Variable otherVariable;
otherVariable.GetChild("MyChild").SetValue(123);
REQUIRE(variable == otherVariable);
}
SECTION("Can find structure with different child value") {
gd::Variable variable;
variable.GetChild("MyChild").SetValue(123);
gd::Variable otherVariable;
otherVariable.GetChild("MyChild").SetValue(456);
REQUIRE(variable != otherVariable);
}
SECTION("Can find structure with different child name") {
gd::Variable variable;
variable.GetChild("MyChild").SetValue(123);
gd::Variable otherVariable;
otherVariable.GetChild("MyOtherChild").SetValue(123);
REQUIRE(variable != otherVariable);
}
}