Skip to content

Commit fe174d0

Browse files
committed
Add some tests
1 parent b8b39f7 commit fe174d0

File tree

1 file changed

+212
-0
lines changed

1 file changed

+212
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
1+
/*
2+
* GDevelop Core
3+
* Copyright 2008-2016 Florian Rival (Florian.Rival@gmail.com). All rights
4+
* reserved. This project is released under the MIT License.
5+
*/
6+
/**
7+
* @file Tests covering events of GDevelop Core.
8+
*/
9+
#include "catch.hpp"
10+
11+
#include <algorithm>
12+
#include <initializer_list>
13+
#include <map>
14+
15+
#include "GDCore/CommonTools.h"
16+
#include "GDCore/IDE/EventsBasedObjectVariantHelper.h"
17+
18+
#include "DummyPlatform.h"
19+
#include "GDCore/Extensions/Platform.h"
20+
#include "GDCore/Extensions/PlatformExtension.h"
21+
#include "GDCore/Project/Behavior.h"
22+
#include "GDCore/Project/EventsFunctionsExtension.h"
23+
#include "GDCore/Project/Object.h"
24+
#include "GDCore/Project/Project.h"
25+
#include "GDCore/Project/ProjectScopedContainers.h"
26+
#include "GDCore/Project/Variable.h"
27+
#include "catch.hpp"
28+
29+
gd::InitialInstance *
30+
GetFirstInstanceOf(const gd::String objectName,
31+
gd::InitialInstancesContainer &initialInstances) {
32+
gd::InitialInstance *variantInstance = nullptr;
33+
initialInstances.IterateOverInstances(
34+
[&variantInstance, &objectName](gd::InitialInstance &instance) {
35+
if (instance.GetObjectName() == objectName) {
36+
variantInstance = &instance;
37+
return true;
38+
}
39+
return false;
40+
});
41+
return variantInstance;
42+
}
43+
44+
gd::EventsBasedObject &SetupEventsBasedObject(gd::Project &project) {
45+
auto &eventsExtension =
46+
project.InsertNewEventsFunctionsExtension("MyEventsExtension", 0);
47+
auto &eventsBasedObject = eventsExtension.GetEventsBasedObjects().InsertNew(
48+
"MyEventsBasedObject", 0);
49+
auto &object = eventsBasedObject.GetObjects().InsertNewObject(
50+
project, "MyExtension::Sprite", "MyChildObject", 0);
51+
object.GetVariables().InsertNew("MyVariable").SetValue(123);
52+
object.AddNewBehavior(project, "MyExtension::MyBehavior", "MyBehavior");
53+
auto &instance =
54+
eventsBasedObject.GetInitialInstances().InsertNewInitialInstance();
55+
instance.SetObjectName("MyChildObject");
56+
instance.GetVariables().InsertNew("MyVariable").SetValue(456);
57+
return eventsBasedObject;
58+
}
59+
60+
TEST_CASE("EventsBasedObjectVariantHelper", "[common]") {
61+
SECTION("Can add missing objects") {
62+
gd::Project project;
63+
gd::Platform platform;
64+
SetupProjectWithDummyPlatform(project, platform);
65+
auto &eventsBasedObject = SetupEventsBasedObject(project);
66+
auto &variant = eventsBasedObject.GetVariants().InsertVariant(
67+
eventsBasedObject.GetDefaultVariant(), 0);
68+
gd::InitialInstance *variantInstance = GetFirstInstanceOf(
69+
"MyChildObject", eventsBasedObject.GetInitialInstances());
70+
71+
// Do the changes and launch the refactoring.
72+
eventsBasedObject.GetObjects().InsertNewObject(
73+
project, "MyExtension::Sprite", "MyChildObject2", 0);
74+
eventsBasedObject.GetObjects().InsertNewObject(
75+
project, "MyExtension::Sprite", "MyChildObject3", 0);
76+
77+
gd::EventsBasedObjectVariantHelper::ComplyVariantsToEventsBasedObject(
78+
project, eventsBasedObject);
79+
80+
REQUIRE(variant.GetObjects().HasObjectNamed("MyChildObject"));
81+
REQUIRE(variant.GetObjects().HasObjectNamed("MyOtherObject2"));
82+
REQUIRE(variant.GetObjects().HasObjectNamed("MyOtherObject3"));
83+
}
84+
85+
SECTION("Can remove missing objects") {
86+
gd::Project project;
87+
gd::Platform platform;
88+
SetupProjectWithDummyPlatform(project, platform);
89+
auto &eventsBasedObject = SetupEventsBasedObject(project);
90+
91+
eventsBasedObject.GetObjects().InsertNewObject(
92+
project, "MyExtension::Sprite", "MyChildObject2", 0);
93+
eventsBasedObject.GetObjects().InsertNewObject(
94+
project, "MyExtension::Sprite", "MyChildObject3", 0);
95+
96+
auto &variant = eventsBasedObject.GetVariants().InsertVariant(
97+
eventsBasedObject.GetDefaultVariant(), 0);
98+
gd::InitialInstance *variantInstance = GetFirstInstanceOf(
99+
"MyChildObject", eventsBasedObject.GetInitialInstances());
100+
101+
// Do the changes and launch the refactoring.
102+
eventsBasedObject.GetObjects().RemoveObject("MyChildObject2");
103+
eventsBasedObject.GetObjects().RemoveObject("MyChildObject3");
104+
105+
gd::EventsBasedObjectVariantHelper::ComplyVariantsToEventsBasedObject(
106+
project, eventsBasedObject);
107+
108+
REQUIRE(variant.GetObjects().HasObjectNamed("MyChildObject"));
109+
REQUIRE(variant.GetObjects().HasObjectNamed("MyChildObject2") == false);
110+
REQUIRE(variant.GetObjects().HasObjectNamed("MyChildObject3") == false);
111+
}
112+
113+
SECTION("Can change object type") {
114+
gd::Project project;
115+
gd::Platform platform;
116+
SetupProjectWithDummyPlatform(project, platform);
117+
auto &eventsBasedObject = SetupEventsBasedObject(project);
118+
auto &variant = eventsBasedObject.GetVariants().InsertVariant(
119+
eventsBasedObject.GetDefaultVariant(), 0);
120+
gd::InitialInstance *variantInstance = GetFirstInstanceOf(
121+
"MyChildObject", eventsBasedObject.GetInitialInstances());
122+
123+
// Do the changes and launch the refactoring.
124+
eventsBasedObject.GetObjects().RemoveObject("MyChildObject");
125+
std::cout << "InsertNewObject" << std::endl;
126+
eventsBasedObject.GetObjects().InsertNewObject(
127+
project, "MyExtension::FakeObjectWithDefaultBehavior", "MyChildObject",
128+
0);
129+
130+
gd::EventsBasedObjectVariantHelper::ComplyVariantsToEventsBasedObject(
131+
project, eventsBasedObject);
132+
133+
REQUIRE(variant.GetObjects().HasObjectNamed("MyChildObject"));
134+
REQUIRE(variant.GetObjects().GetObject("MyChildObject").GetType() ==
135+
"MyExtension::FakeObjectWithDefaultBehavior");
136+
}
137+
138+
SECTION("Can add missing behaviors") {
139+
gd::Project project;
140+
gd::Platform platform;
141+
SetupProjectWithDummyPlatform(project, platform);
142+
auto &eventsBasedObject = SetupEventsBasedObject(project);
143+
auto &variant = eventsBasedObject.GetVariants().InsertVariant(
144+
eventsBasedObject.GetDefaultVariant(), 0);
145+
146+
// Do the changes and launch the refactoring.
147+
auto &object = eventsBasedObject.GetObjects().GetObject("MyObject");
148+
object.AddNewBehavior(project, "MyExtension::MyBehavior", "MyBehavior2");
149+
object.AddNewBehavior(project, "MyExtension::MyBehavior", "MyBehavior3");
150+
151+
gd::EventsBasedObjectVariantHelper::ComplyVariantsToEventsBasedObject(
152+
project, eventsBasedObject);
153+
154+
REQUIRE(variant.GetObjects().HasObjectNamed("MyChildObject"));
155+
auto &variantObject = variant.GetObjects().GetObject("MyChildObject");
156+
REQUIRE(variantObject.HasBehaviorNamed("MyBehavior"));
157+
REQUIRE(variantObject.HasBehaviorNamed("MyBehavior2"));
158+
REQUIRE(variantObject.HasBehaviorNamed("MyBehavior3"));
159+
}
160+
161+
SECTION("Can remove missing behaviors") {
162+
gd::Project project;
163+
gd::Platform platform;
164+
SetupProjectWithDummyPlatform(project, platform);
165+
auto &eventsBasedObject = SetupEventsBasedObject(project);
166+
167+
auto &object = eventsBasedObject.GetObjects().GetObject("MyObject");
168+
object.AddNewBehavior(project, "MyExtension::MyBehavior", "MyBehavior2");
169+
object.AddNewBehavior(project, "MyExtension::MyBehavior", "MyBehavior3");
170+
171+
auto &variant = eventsBasedObject.GetVariants().InsertVariant(
172+
eventsBasedObject.GetDefaultVariant(), 0);
173+
174+
// Do the changes and launch the refactoring.
175+
object.RemoveBehavior("MyBehavior2");
176+
object.RemoveBehavior("MyBehavior3");
177+
178+
gd::EventsBasedObjectVariantHelper::ComplyVariantsToEventsBasedObject(
179+
project, eventsBasedObject);
180+
181+
REQUIRE(variant.GetObjects().HasObjectNamed("MyChildObject"));
182+
auto &variantObject = variant.GetObjects().GetObject("MyChildObject");
183+
REQUIRE(variantObject.HasBehaviorNamed("MyBehavior"));
184+
REQUIRE(variantObject.HasBehaviorNamed("MyBehavior2") == false);
185+
REQUIRE(variantObject.HasBehaviorNamed("MyBehavior3") == false);
186+
}
187+
188+
SECTION("Can change behavior type") {
189+
gd::Project project;
190+
gd::Platform platform;
191+
SetupProjectWithDummyPlatform(project, platform);
192+
auto &eventsBasedObject = SetupEventsBasedObject(project);
193+
194+
auto &variant = eventsBasedObject.GetVariants().InsertVariant(
195+
eventsBasedObject.GetDefaultVariant(), 0);
196+
197+
// Do the changes and launch the refactoring.
198+
auto &object = eventsBasedObject.GetObjects().GetObject("MyObject");
199+
object.RemoveBehavior("MyBehavior");
200+
object.AddNewBehavior(project, "MyExtension::MyOtherBehavior",
201+
"MyBehavior");
202+
203+
gd::EventsBasedObjectVariantHelper::ComplyVariantsToEventsBasedObject(
204+
project, eventsBasedObject);
205+
206+
REQUIRE(variant.GetObjects().HasObjectNamed("MyChildObject"));
207+
auto &variantObject = variant.GetObjects().GetObject("MyChildObject");
208+
REQUIRE(variantObject.HasBehaviorNamed("MyBehavior"));
209+
REQUIRE(variantObject.GetBehavior("MyBehavior").GetTypeName() ==
210+
"MyExtension::MyOtherBehavior");
211+
}
212+
}

0 commit comments

Comments
 (0)