mirror of
https://github.com/Heretek-AI/GDevelop.git
synced 2026-07-21 17:45:25 -04:00
deb802cfec
* For now, this is limited to instances inside custom objects. This will be made available in the future for all instances in scenes if this works well.
121 lines
4.9 KiB
C++
121 lines
4.9 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 "catch.hpp"
|
|
|
|
#include <algorithm>
|
|
#include <initializer_list>
|
|
#include <map>
|
|
|
|
#include "DummyPlatform.h"
|
|
#include "GDCore/CommonTools.h"
|
|
#include "GDCore/Extensions/Platform.h"
|
|
#include "GDCore/Project/InitialInstance.h"
|
|
#include "GDCore/Project/Layout.h"
|
|
#include "GDCore/Project/Object.h"
|
|
#include "GDCore/Project/Project.h"
|
|
#include "GDCore/Project/PropertyDescriptor.h"
|
|
#include "GDCore/Tools/VersionWrapper.h"
|
|
|
|
TEST_CASE("InitialInstance", "[common][instances]") {
|
|
|
|
SECTION("GetRawDoubleProperty") {
|
|
gd::InitialInstance instance;
|
|
REQUIRE(instance.GetRawDoubleProperty("NotExistingProperty") == 0);
|
|
}
|
|
|
|
SECTION("GetRawStringProperty") {
|
|
gd::InitialInstance instance;
|
|
REQUIRE(instance.GetRawStringProperty("NotExistingProperty") == "");
|
|
}
|
|
|
|
SECTION("Can create an instance without behavior property overriding") {
|
|
gd::Platform platform;
|
|
gd::Project project;
|
|
SetupProjectWithDummyPlatform(project, platform);
|
|
|
|
gd::Layout &layout = project.InsertNewLayout("Scene", 0);
|
|
gd::Object &object = layout.GetObjects().InsertNewObject(
|
|
project, "MyExtension::FakeObjectWithDefaultBehavior", "MyObject", 0);
|
|
object.AddNewBehavior(project, "MyExtension::MyBehavior", "MyBehavior");
|
|
REQUIRE(object.HasBehaviorNamed("MyBehavior") == true);
|
|
gd::Behavior &behavior = object.GetBehavior("MyBehavior");
|
|
|
|
gd::InitialInstance instance;
|
|
instance.SetObjectName("MyObject");
|
|
REQUIRE(instance.HasAnyOverriddenProperty(object) == false);
|
|
REQUIRE(instance.HasAnyOverriddenPropertyForBehavior(behavior) == false);
|
|
REQUIRE(instance.HasBehaviorOverridingNamed("MyBehavior") == false);
|
|
}
|
|
|
|
SECTION("Can add and remove behavior property overridings on an instance") {
|
|
gd::Platform platform;
|
|
gd::Project project;
|
|
SetupProjectWithDummyPlatform(project, platform);
|
|
|
|
gd::Layout &layout = project.InsertNewLayout("Scene", 0);
|
|
gd::Object &object = layout.GetObjects().InsertNewObject(
|
|
project, "MyExtension::FakeObjectWithDefaultBehavior", "MyObject", 0);
|
|
object.AddNewBehavior(project, "MyExtension::MyBehavior", "MyBehavior");
|
|
REQUIRE(object.HasBehaviorNamed("MyBehavior") == true);
|
|
gd::Behavior &behavior = object.GetBehavior("MyBehavior");
|
|
|
|
gd::InitialInstance instance;
|
|
instance.SetObjectName("MyObject");
|
|
instance.AddNewBehaviorOverriding(project, "MyExtension::MyBehavior",
|
|
"MyBehavior");
|
|
REQUIRE(instance.HasBehaviorOverridingNamed("MyBehavior") == true);
|
|
gd::Behavior &behaviorOverriding =
|
|
instance.GetBehaviorOverriding("MyBehavior");
|
|
|
|
// The behavior overriding is empty by default.
|
|
REQUIRE(instance.HasAnyOverriddenProperty(object) == false);
|
|
REQUIRE(instance.HasAnyOverriddenPropertyForBehavior(behavior) == false);
|
|
REQUIRE(behaviorOverriding.HasPropertyValue("numberProperty") == false);
|
|
REQUIRE(behaviorOverriding.HasPropertyValue("stringProperty") == false);
|
|
REQUIRE(behaviorOverriding.HasPropertyValue("booleanProperty") == false);
|
|
|
|
// Add some behavior property overridings
|
|
behaviorOverriding.UpdateProperty("numberProperty", "456");
|
|
REQUIRE(
|
|
behaviorOverriding.GetProperties().at("numberProperty").GetValue() ==
|
|
"456");
|
|
REQUIRE(behaviorOverriding.HasPropertyValue("numberProperty") == true);
|
|
REQUIRE(instance.HasAnyOverriddenProperty(object) == true);
|
|
REQUIRE(instance.HasAnyOverriddenPropertyForBehavior(behavior) == true);
|
|
|
|
behaviorOverriding.UpdateProperty("stringProperty", "DEF");
|
|
REQUIRE(
|
|
behaviorOverriding.GetProperties().at("stringProperty").GetValue() ==
|
|
"DEF");
|
|
REQUIRE(behaviorOverriding.HasPropertyValue("stringProperty") == true);
|
|
|
|
behaviorOverriding.UpdateProperty("booleanProperty", "false");
|
|
REQUIRE(behaviorOverriding.HasPropertyValue("booleanProperty") == true);
|
|
REQUIRE(
|
|
behaviorOverriding.GetProperties().at("booleanProperty").GetValue() ==
|
|
"false");
|
|
|
|
// The user set back original values from the object behavior.
|
|
// The IDE removes the behavior property overridings accordingly.
|
|
behaviorOverriding.RemoveProperty("numberProperty");
|
|
REQUIRE(behaviorOverriding.HasPropertyValue("numberProperty") == false);
|
|
behaviorOverriding.RemoveProperty("stringProperty");
|
|
REQUIRE(behaviorOverriding.HasPropertyValue("stringProperty") == false);
|
|
behaviorOverriding.RemoveProperty("booleanProperty");
|
|
REQUIRE(behaviorOverriding.HasPropertyValue("booleanProperty") == false);
|
|
|
|
// No more property is overriden
|
|
REQUIRE(instance.HasAnyOverriddenPropertyForBehavior(behavior) == false);
|
|
REQUIRE(instance.HasAnyOverriddenProperty(object) == false);
|
|
|
|
// The IDE removes the behavior overriding accordingly.
|
|
instance.RemoveBehaviorOverriding("MyBehavior");
|
|
}
|
|
}
|