6f8bb5ef55
Compiler warnings are now accumulated in a vector of strings within the mjSpec object. New API functions `mjs_numWarnings` and `mjs_getWarning` are added to access these warnings. The compiler's log handler now chains warnings to the global log handler, ensuring they are still displayed immediately. Call sites in `mj_loadXML`, `mj_compile`, and the Python and WASM bindings have been updated to use the new warning API. PiperOrigin-RevId: 933361650 Change-Id: I47cab98a460c57b0898c0a1a43fce2a5b9648eb1
80 lines
2.2 KiB
C++
80 lines
2.2 KiB
C++
// Copyright 2021 DeepMind Technologies Limited
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include "test/fixture.h"
|
|
|
|
#include <array>
|
|
|
|
#include <gmock/gmock.h>
|
|
#include <gtest/gtest-spi.h>
|
|
#include <gtest/gtest.h>
|
|
#include <mujoco/mujoco.h>
|
|
|
|
namespace mujoco {
|
|
namespace {
|
|
|
|
// Tests for the MujocoTest test fixture itself.
|
|
using MujocoTestTest = MujocoTest;
|
|
class MujocoErrorTestGuardTest : public ::testing::Test {};
|
|
using ::testing::IsNull;
|
|
|
|
|
|
TEST_F(MujocoTestTest, MjUserWarningFailsTest) {
|
|
EXPECT_NONFATAL_FAILURE(mju_warning("Warning."), "Warning.");
|
|
}
|
|
|
|
TEST_F(MujocoTestTest, BenignWarningDoesNotFailTest) {
|
|
// Warnings in the benign list should not trigger test failures
|
|
mju_warning(
|
|
"flex 'soft' is not rigid and has no equality constraints "
|
|
"or passive forces");
|
|
}
|
|
|
|
TEST_F(MujocoTestTest, MjUserErrorFailsTest) {
|
|
EXPECT_FATAL_FAILURE(mju_error("Error."), "Error.");
|
|
}
|
|
|
|
TEST_F(MujocoErrorTestGuardTest, NestedErrorGuards) {
|
|
{
|
|
MujocoErrorTestGuard guard1;
|
|
{
|
|
MujocoErrorTestGuard guard2;
|
|
}
|
|
EXPECT_FATAL_FAILURE(mju_error("Error."), "Error.");
|
|
EXPECT_NONFATAL_FAILURE(mju_warning("Warning."), "Warning.");
|
|
}
|
|
EXPECT_THAT(mju_user_error, IsNull());
|
|
EXPECT_THAT(mju_user_warning, IsNull());
|
|
}
|
|
|
|
TEST_F(MujocoTestTest, MockFilesystemTest) {
|
|
MockFilesystem fs("MockFilesystemTest");
|
|
std::array<unsigned char, 3> data = {'a', 'b', 'c'};
|
|
fs.ChangeDirectory("tmp");
|
|
|
|
fs.AddFile("../tmp2/file2", data.data(), data.size());
|
|
fs.AddFile("./file1", data.data(), data.size());
|
|
|
|
ASSERT_TRUE(fs.FileExists("/tmp/file1"));
|
|
ASSERT_TRUE(fs.FileExists("/tmp2/file2"));
|
|
|
|
fs.ChangeDirectory("../tmp2");
|
|
|
|
ASSERT_TRUE(fs.FileExists("../tmp/file1"));
|
|
ASSERT_TRUE(fs.FileExists("file2"));
|
|
}
|
|
|
|
} // namespace
|
|
} // namespace mujoco
|