Files
GDevelop/Core/tests/ResourcesRenamer.cpp
2023-11-28 14:31:47 +01:00

95 lines
3.7 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 common features of GDevelop Core.
*/
#include "GDCore/IDE/Project/ResourcesRenamer.h"
#include "GDCore/CommonTools.h"
#include "GDCore/Project/Project.h"
#include "catch.hpp"
#include "GDCore/IDE/ResourceExposer.h"
TEST_CASE("ResourcesRenamer", "[common]") {
SECTION("It renames resources that are exposed") {
gd::Project project;
std::map<gd::String, gd::String> renamings = {
{"Resource1", "RenamedResource1"}};
gd::ResourcesRenamer resourcesRenamer(project.GetResourcesManager(), renamings);
// Add "classic", plain resources.
gd::ImageResource resource1;
resource1.SetName("Resource1");
project.GetResourcesManager().AddResource(resource1);
gd::ImageResource resource2;
resource2.SetName("Resource2");
project.GetResourcesManager().AddResource(resource2);
// Add usage of some resources.
project.GetPlatformSpecificAssets().Set(
"android", "some-icon", "Resource1");
project.GetPlatformSpecificAssets().Set(
"android", "some-other-icon", "Resource2");
gd::ResourceExposer::ExposeWholeProjectResources(project, resourcesRenamer);
// Check that resources were renamed were used.
REQUIRE(project.GetPlatformSpecificAssets().Get("android", "some-icon") ==
"RenamedResource1");
REQUIRE(project.GetPlatformSpecificAssets().Get(
"android", "some-other-icon") == "Resource2");
}
SECTION("It renames embedded resources") {
gd::Project project;
std::map<gd::String, gd::String> renamings = {
{"Resource1", "RenamedResource1"}};
gd::ResourcesRenamer resourcesRenamer(project.GetResourcesManager(), renamings);
// Add "classic", plain resources.
gd::ImageResource resource1;
resource1.SetName("Resource1");
project.GetResourcesManager().AddResource(resource1);
gd::ImageResource resource2;
resource2.SetName("Resource2");
project.GetResourcesManager().AddResource(resource2);
// Add a resource containing a mapping to other resources.
gd::JsonResource jsonResourceWithEmbeddeds;
jsonResourceWithEmbeddeds.SetName("Resource3");
jsonResourceWithEmbeddeds.SetMetadata(
"{ \"embeddedResourcesMapping\": {\"some-resource-name\": "
"\"Resource1\", \"some-other-resource-name\": \"Resource2\"} }");
project.GetResourcesManager().AddResource(jsonResourceWithEmbeddeds);
// Add usage of some resources.
project.GetPlatformSpecificAssets().Set(
"android", "some-icon", "Resource1");
project.GetPlatformSpecificAssets().Set(
"android", "some-other-icon", "Resource2");
gd::ResourceExposer::ExposeWholeProjectResources(project, resourcesRenamer);
// TODO: This should not be necessary, but for now not all resources support embeddeds,
// so we must call it manually:
gd::String resource3Name = "Resource3";
resourcesRenamer.ExposeEmbeddeds(resource3Name);
// Check that resources were renamed were used.
REQUIRE(project.GetPlatformSpecificAssets().Get("android", "some-icon") ==
"RenamedResource1");
REQUIRE(project.GetPlatformSpecificAssets().Get(
"android", "some-other-icon") == "Resource2");
// Check that the names were also updated in the embedded resources mapping.
REQUIRE(project.GetResourcesManager().HasResource("Resource3") == true);
REQUIRE(
project.GetResourcesManager().GetResource("Resource3").GetMetadata() ==
"{\"embeddedResourcesMapping\":{\"some-resource-name\":"
"\"RenamedResource1\",\"some-other-resource-name\":\"Resource2\"}}");
}
}