Remove getdir from mjpResourceProvider.

All known implementations were effectively the same as the default fallback. It was just adding unneeded complexity. Removing this now will help with upcoming improvements to resource providers.

PiperOrigin-RevId: 855163273
Change-Id: I529fc18d0d03a8dc676c909ec9e4b1da1454d414
This commit is contained in:
Haroon Qureshi
2026-01-12 04:06:33 -08:00
committed by Copybara-Service
parent d7e4038be8
commit cb9a9c159c
9 changed files with 159 additions and 64 deletions
-15
View File
@@ -313,21 +313,6 @@ MockFilesystem::MockFilesystem(std::string unit_test_name) {
return (int) fs->GetFile(filename, (const unsigned char**) buffer);
};
resourceProvider.getdir = +[](mjResource* resource, const char** dir,
int* ndir) {
MockFilesystem *fs = static_cast<MockFilesystem*>(resource->provider->data);
*dir = resource->name;
// find last directory path separator
int length = fs->Prefix().size() + 1;
for (int i = length; resource->name[i]; ++i) {
if (resource->name[i] == '/' || resource->name[i] == '\\') {
length = i + 1;
}
}
*ndir = length;
};
resourceProvider.close = +[](mjResource* resource) {};
mjp_registerResourceProvider(&resourceProvider);
}
+140 -18
View File
@@ -19,6 +19,8 @@
#include <cstring>
#include <ctime>
#include <string>
#include <utility>
#include <vector>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
@@ -68,11 +70,15 @@ void close_nop(mjResource* resource) {
void close_str(mjResource* resource) {
mju_free(resource->data);
resource->data = nullptr;
}
TEST_F(ResourceTest, RegisterProviderSuccess) {
mjpResourceProvider provider = {
"my-prefix.123+45", open_nop, read_nop, close_nop
.prefix = "my-prefix.123+45",
.open = open_nop,
.read = read_nop,
.close = close_nop,
};
int count1 = mjp_resourceProviderCount();
@@ -85,16 +91,24 @@ TEST_F(ResourceTest, RegisterProviderSuccess) {
TEST_F(ResourceTest, RegisterProviderMultipleSuccess) {
mjpResourceProvider provider = {
"my-prefix.123+44", open_nop, read_nop, close_nop
.prefix = "my-prefix.123+44",
.open = open_nop,
.read = read_nop,
.close = close_nop,
};
mjpResourceProvider provider2 = {
"my-prefix.123+46", open_nop, read_nop, close_nop
.prefix = "my-prefix.123+46",
.open = open_nop,
.read = read_nop,
.close = close_nop,
};
mjpResourceProvider provider3 = {
"my-prefix.123+41", open_nop, read_nop, close_nop
.prefix = "my-prefix.123+41",
.open = open_nop,
.read = read_nop,
.close = close_nop,
};
int count1 = mjp_resourceProviderCount();
@@ -111,7 +125,7 @@ TEST_F(ResourceTest, RegisterProviderMultipleSuccess) {
TEST_F(ResourceTest, RegisterProviderMissingCallbacks) {
mjpResourceProvider provider = {
"myprefix"
.prefix = "myprefix",
};
// install warning handler
@@ -130,7 +144,10 @@ TEST_F(ResourceTest, RegisterProviderMissingCallbacks) {
TEST_F(ResourceTest, RegisterProviderMissingPrefix) {
mjpResourceProvider provider = {
"", open_nop, read_nop, close_nop
.prefix = "",
.open = open_nop,
.read = read_nop,
.close = close_nop,
};
// install warning handler
@@ -149,7 +166,10 @@ TEST_F(ResourceTest, RegisterProviderMissingPrefix) {
TEST_F(ResourceTest, RegisterProviderInvalidPrefix1) {
mjpResourceProvider provider = {
"1invalid", open_nop, read_nop, close_nop
.prefix = "1invalid",
.open = open_nop,
.read = read_nop,
.close = close_nop,
};
// install warning handler
@@ -168,7 +188,10 @@ TEST_F(ResourceTest, RegisterProviderInvalidPrefix1) {
TEST_F(ResourceTest, RegisterProviderInvalidPrefix2) {
mjpResourceProvider provider = {
"invalid:", open_nop, read_nop, close_nop
.prefix = "invalid:",
.open = open_nop,
.read = read_nop,
.close = close_nop,
};
// install warning handler
@@ -187,11 +210,17 @@ TEST_F(ResourceTest, RegisterProviderInvalidPrefix2) {
TEST_F(ResourceTest, RegisterProviderSame) {
mjpResourceProvider provider = {
"prefix", open_nop, read_nop, close_nop
.prefix = "prefix",
.open = open_nop,
.read = read_nop,
.close = close_nop,
};
mjpResourceProvider provider2 = {
"prefix", open_nop, read_nop, close_nop
.prefix = "prefix",
.open = open_nop,
.read = read_nop,
.close = close_nop,
};
int i1 = mjp_registerResourceProvider(&provider);
@@ -206,11 +235,17 @@ TEST_F(ResourceTest, RegisterProviderSame) {
TEST_F(ResourceTest, RegisterProviderSameCase) {
mjpResourceProvider provider = {
"prefix", open_nop, read_nop, close_nop
.prefix = "prefix",
.open = open_nop,
.read = read_nop,
.close = close_nop,
};
mjpResourceProvider provider2 = {
"PREFIX", open_nop, read_nop, close_nop
.prefix = "PREFIX",
.open = open_nop,
.read = read_nop,
.close = close_nop,
};
int i1 = mjp_registerResourceProvider(&provider);
@@ -225,7 +260,10 @@ TEST_F(ResourceTest, RegisterProviderSameCase) {
TEST_F(ResourceTest, GeneralTest) {
mjpResourceProvider provider = {
"str", open_str, read_str, close_str
.prefix = "str",
.open = open_str,
.read = read_str,
.close = close_str,
};
// register resource provider
@@ -246,7 +284,10 @@ TEST_F(ResourceTest, GeneralTest) {
TEST_F(ResourceTest, GeneralFailureTest) {
mjpResourceProvider provider = {
"str", open_str, read_str, close_str
.prefix = "str",
.open = open_str,
.read = read_str,
.close = close_str,
};
// register resource provider
@@ -265,7 +306,10 @@ TEST_F(ResourceTest, GeneralFailureTest) {
TEST_F(ResourceTest, NameWithValidPrefix) {
mjpResourceProvider provider = {
"nop", open_nop, read_nop, close_nop
.prefix = "nop",
.open = open_nop,
.read = read_nop,
.close = close_nop,
};
// register resource provider
@@ -288,7 +332,10 @@ TEST_F(ResourceTest, NameWithValidPrefix) {
TEST_F(ResourceTest, NameWithUpperCasePrefix) {
mjpResourceProvider provider = {
"nop", open_nop, read_nop, close_nop,
.prefix = "nop",
.open = open_nop,
.read = read_nop,
.close = close_nop,
};
// register resource provider
@@ -311,7 +358,10 @@ TEST_F(ResourceTest, NameWithUpperCasePrefix) {
TEST_F(ResourceTest, NameWithInvalidPrefix) {
mjpResourceProvider provider = {
"nop", open_nop, read_nop, close_nop
.prefix = "nop",
.open = open_nop,
.read = read_nop,
.close = close_nop,
};
// register resource provider
@@ -331,6 +381,78 @@ TEST_F(ResourceTest, NameWithInvalidPrefix) {
ASSERT_THAT(resource, IsNull());
}
TEST_F(ResourceTest, GetResourceDir) {
const std::vector<std::pair<std::string, std::string>> cases = {
{ "foo/bar/baz", "foo/bar/" },
{ "foo/bar/", "foo/bar/" },
{ "foo/bar", "foo/" },
{ "/foo/bar", "/foo/" },
{ "/foo", "/" },
{ "/", "/" },
{ "", "" },
};
const char* dir = nullptr;
int ndir = 0;
mjpResourceProvider provider;
provider.prefix = "provider";
for (const auto& [name, expected] : cases) {
mjResource resource;
resource.provider = nullptr;
resource.name = const_cast<char*>(name.c_str());
mju_getResourceDir(&resource, &dir, &ndir);
EXPECT_THAT(std::string(dir, ndir), expected);
}
}
TEST_F(ResourceTest, GetResourceDirProvider) {
const std::vector<std::pair<std::string, std::string>> cases = {
{ "provider:/foo/bar", "provider:/foo/" },
{ "provider:/foo/", "provider:/foo/" },
{ "provider:foo/", "provider:foo/" },
{ "provider:foo", "provider:" },
{ "provider:/", "provider:/" },
};
const char* dir = nullptr;
int ndir = 0;
mjpResourceProvider provider;
provider.prefix = "provider";
for (const auto& [name, expected] : cases) {
mjResource resource;
resource.provider = &provider;
resource.name = const_cast<char*>(name.c_str());
mju_getResourceDir(&resource, &dir, &ndir);
EXPECT_THAT(std::string(dir, ndir), expected);
}
}
TEST_F(ResourceTest, GetResourceDirNullResource) {
const char* dir = nullptr;
int ndir = 0;
mju_getResourceDir(nullptr, &dir, &ndir);
EXPECT_THAT(dir, IsNull());
EXPECT_EQ(ndir, 0);
}
TEST_F(ResourceTest, GetResourceDirNullName) {
const char* dir = nullptr;
int ndir = 0;
mjResource resource;
resource.name = nullptr;
resource.provider = nullptr;
mju_getResourceDir(nullptr, &dir, &ndir);
EXPECT_THAT(dir, IsNull());
EXPECT_EQ(ndir, 0);
}
TEST_F(ResourceTest, OSFilesystemTimestamps) {
time_t t;