Skip to content

Commit e510aa1

Browse files
committed
Add tests on object and variable renaming.
1 parent f4c3dea commit e510aa1

2 files changed

+106
-0
lines changed

Core/tests/WholeProjectRefactorer-ApplyRefactoringForVariablesContainer.cpp

+79
Original file line numberDiff line numberDiff line change
@@ -1072,6 +1072,85 @@ TEST_CASE("WholeProjectRefactorer::ApplyRefactoringForVariablesContainer",
10721072
REQUIRE(instance.GetVariables().Get("MyRenamedVariable").GetValue() == 456);
10731073
}
10741074

1075+
SECTION("Can rename an object variable (in events-based object)") {
1076+
gd::Project project;
1077+
gd::Platform platform;
1078+
SetupProjectWithDummyPlatform(project, platform);
1079+
1080+
auto &eventsExtension =
1081+
project.InsertNewEventsFunctionsExtension("MyEventsExtension", 0);
1082+
auto &eventsBasedObject = eventsExtension.GetEventsBasedObjects().InsertNew(
1083+
"MyEventsBasedObject", 0);
1084+
auto &object = eventsBasedObject.GetObjects().InsertNewObject(
1085+
project, "MyExtension::Sprite", "MyChildObject", 0);
1086+
object.GetVariables().InsertNew("MyVariable").SetValue(123);
1087+
auto &instance =
1088+
eventsBasedObject.GetInitialInstances().InsertNewInitialInstance();
1089+
instance.SetObjectName("MyChildObject");
1090+
instance.GetVariables().InsertNew("MyVariable").SetValue(456);
1091+
1092+
auto &variant = eventsBasedObject.GetVariants().InsertVariant(
1093+
eventsBasedObject.GetDefaultVariant(), 0);
1094+
gd::InitialInstance *variantInstance = nullptr;
1095+
eventsBasedObject.GetInitialInstances().IterateOverInstances(
1096+
[&variantInstance](gd::InitialInstance &instance) {
1097+
variantInstance = &instance;
1098+
});
1099+
1100+
auto &objectFunction =
1101+
eventsBasedObject.GetEventsFunctions().GetEventsFunction(
1102+
"MyObjectEventsFunction");
1103+
gd::StandardEvent &event = dynamic_cast<gd::StandardEvent &>(
1104+
objectFunction.GetEvents().InsertNewEvent(
1105+
project, "BuiltinCommonInstructions::Standard"));
1106+
1107+
{
1108+
gd::Instruction action;
1109+
action.SetType("SetNumberObjectVariable");
1110+
action.SetParametersCount(4);
1111+
action.SetParameter(0, gd::Expression("MyChildObject"));
1112+
action.SetParameter(1, gd::Expression("MyVariable"));
1113+
action.SetParameter(2, gd::Expression("="));
1114+
action.SetParameter(3, gd::Expression("MyChildObject.MyVariable"));
1115+
event.GetActions().Insert(action);
1116+
}
1117+
1118+
// Do the changes and launch the refactoring.
1119+
object.GetVariables().ResetPersistentUuid();
1120+
gd::SerializerElement originalSerializedVariables;
1121+
object.GetVariables().SerializeTo(originalSerializedVariables);
1122+
1123+
object.GetVariables().Rename("MyVariable", "MyRenamedVariable");
1124+
auto changeset =
1125+
gd::WholeProjectRefactorer::ComputeChangesetForVariablesContainer(
1126+
originalSerializedVariables, object.GetVariables());
1127+
1128+
REQUIRE(changeset.oldToNewVariableNames.size() == 1);
1129+
1130+
gd::WholeProjectRefactorer::ApplyRefactoringForObjectVariablesContainer(
1131+
project, object.GetVariables(), eventsBasedObject.GetInitialInstances(),
1132+
object.GetName(), changeset, originalSerializedVariables);
1133+
gd::ObjectVariableHelper::ApplyChangesToVariants(
1134+
eventsBasedObject, "MyChildObject", changeset);
1135+
1136+
REQUIRE(event.GetActions()[0].GetParameter(1).GetPlainString() ==
1137+
"MyRenamedVariable");
1138+
REQUIRE(event.GetActions()[0].GetParameter(3).GetPlainString() ==
1139+
"MyChildObject.MyRenamedVariable");
1140+
REQUIRE(instance.GetVariables().Get("MyRenamedVariable").GetValue() == 456);
1141+
1142+
REQUIRE(eventsBasedObject.GetObjects().HasObjectNamed("MyChildObject"));
1143+
REQUIRE(eventsBasedObject.GetObjects()
1144+
.GetObject("MyChildObject")
1145+
.GetVariables()
1146+
.Get("MyRenamedVariable")
1147+
.GetValue() == 456);
1148+
REQUIRE(variantInstance != nullptr);
1149+
REQUIRE(
1150+
variantInstance->GetVariables().Get("MyRenamedVariable").GetValue() ==
1151+
456);
1152+
}
1153+
10751154
SECTION("Can delete an object variable") {
10761155
gd::Project project;
10771156
gd::Platform platform;

Core/tests/WholeProjectRefactorer.cpp

+27
Original file line numberDiff line numberDiff line change
@@ -1754,6 +1754,9 @@ TEST_CASE("WholeProjectRefactorer", "[common]") {
17541754
eventsBasedObject.GetObjects().InsertNewObject(
17551755
project, "MyExtension::Sprite", "Object2", 0);
17561756

1757+
auto &variant = eventsBasedObject.GetVariants().InsertVariant(
1758+
eventsBasedObject.GetDefaultVariant(), 0);
1759+
17571760
// Create the objects container for the events function
17581761
gd::ObjectsContainer parametersObjectsContainer(
17591762
gd::ObjectsContainer::SourceType::Function);
@@ -1765,13 +1768,28 @@ TEST_CASE("WholeProjectRefactorer", "[common]") {
17651768
gd::WholeProjectRefactorer::ObjectOrGroupRenamedInEventsBasedObject(
17661769
project, projectScopedContainers, eventsBasedObject, "Object1",
17671770
"Object3", /* isObjectGroup =*/false);
1771+
1772+
REQUIRE(variant.GetObjects().HasObjectNamed("Object1") == false);
1773+
REQUIRE(variant.GetObjects().HasObjectNamed("Object2") == true);
1774+
REQUIRE(variant.GetObjects().HasObjectNamed("Object3") == true);
17681775
REQUIRE(eventsBasedObject.GetObjects().GetObjectGroups().size() == 1);
17691776
REQUIRE(eventsBasedObject.GetObjects().GetObjectGroups()[0].Find(
17701777
"Object1") == false);
17711778
REQUIRE(eventsBasedObject.GetObjects().GetObjectGroups()[0].Find(
17721779
"Object2") == true);
17731780
REQUIRE(eventsBasedObject.GetObjects().GetObjectGroups()[0].Find(
17741781
"Object3") == true);
1782+
1783+
REQUIRE(variant.GetObjects().HasObjectNamed("Object1") == false);
1784+
REQUIRE(variant.GetObjects().HasObjectNamed("Object2") == true);
1785+
REQUIRE(variant.GetObjects().HasObjectNamed("Object3") == true);
1786+
REQUIRE(variant.GetObjects().GetObjectGroups().size() == 1);
1787+
REQUIRE(variant.GetObjects().GetObjectGroups()[0].Find("Object1") ==
1788+
false);
1789+
REQUIRE(variant.GetObjects().GetObjectGroups()[0].Find("Object2") ==
1790+
true);
1791+
REQUIRE(variant.GetObjects().GetObjectGroups()[0].Find("Object3") ==
1792+
true);
17751793
}
17761794

17771795
SECTION("Initial instances") {
@@ -1796,6 +1814,9 @@ TEST_CASE("WholeProjectRefactorer", "[common]") {
17961814
eventsBasedObject.GetInitialInstances().InsertInitialInstance(instance1);
17971815
eventsBasedObject.GetInitialInstances().InsertInitialInstance(instance2);
17981816

1817+
auto &variant = eventsBasedObject.GetVariants().InsertVariant(
1818+
eventsBasedObject.GetDefaultVariant(), 0);
1819+
17991820
// Create the objects container for the events function
18001821
gd::ObjectsContainer parametersObjectsContainer(
18011822
gd::ObjectsContainer::SourceType::Function);
@@ -1807,10 +1828,16 @@ TEST_CASE("WholeProjectRefactorer", "[common]") {
18071828
gd::WholeProjectRefactorer::ObjectOrGroupRenamedInEventsBasedObject(
18081829
project, projectScopedContainers, eventsBasedObject, "Object1",
18091830
"Object3", /* isObjectGroup =*/false);
1831+
18101832
REQUIRE(eventsBasedObject.GetInitialInstances().HasInstancesOfObject(
18111833
"Object1") == false);
18121834
REQUIRE(eventsBasedObject.GetInitialInstances().HasInstancesOfObject(
18131835
"Object3") == true);
1836+
1837+
REQUIRE(variant.GetInitialInstances().HasInstancesOfObject("Object1") ==
1838+
false);
1839+
REQUIRE(variant.GetInitialInstances().HasInstancesOfObject("Object3") ==
1840+
true);
18141841
}
18151842

18161843
SECTION("Events") {

0 commit comments

Comments
 (0)