Merge remote-tracking branch 'origin/dev' into codex/architecture-consolidation
# Conflicts: # cmake/module_manifest.cmake # docs/usr/modules/procgen.md # src/engine/CMakeLists.txt # src/engine/cmdline/Run.cpp # src/engine/common/ScriptModule.h # src/modules/animation/Animation.cpp # src/modules/physics/World.cpp # src/modules/physics/World3D.cpp # src/modules/procgen/Procgen.cpp # src/modules/procgen/Procgen.h # src/modules/scene/SceneCapabilities.cpp # src/modules/schema/Schema.cpp # src/modules/schema/Schema.h
This commit is contained in:
commit
293be41d66
218 files changed
+17672
-1472
No files matched your search
+40
-1
@@ -1,5 +1,5 @@
|
||||
#include "common/Runtime.h"
|
||||
#include "common/Capability.h"
|
||||
#include "common/Runtime.h"
|
||||
#include "common/ScriptCompiler.h"
|
||||
#include "common/ScriptModule.h"
|
||||
#include "common/ServiceInterfaces.h"
|
||||
@@ -150,3 +150,42 @@ TEST_CASE("scriptModule.reloadReplacesGenerationAtomically") {
|
||||
"game:/new-generation.nut");
|
||||
CHECK_EQ(runtime.vm().get<int64_t>("new_generation"), int64_t(2));
|
||||
}
|
||||
|
||||
TEST_CASE("scriptModule.reloadAffectedRebuildsReverseDependencyGenerations") {
|
||||
Runtime runtime(512, ssq::Libs::ALL);
|
||||
auto provider = std::make_shared<MemoryModuleProvider>();
|
||||
provider->sources["mem:/value.nut"] = "export function value() { return 1 }\n";
|
||||
provider->sources["mem:/user.nut"] =
|
||||
"import { value } from \"mem:/value.nut\"\nexport function answer() { return value() }\n";
|
||||
runtime.scriptModules().registerProvider(provider, 100);
|
||||
runtime.runSource("import { answer } from \"mem:/user.nut\"\nfirst_answer <- answer()\n", "game:/first.nut");
|
||||
CHECK_EQ(runtime.vm().get<int64_t>("first_answer"), int64_t(1));
|
||||
|
||||
provider->sources["mem:/value.nut"] = "export function value() { return 2 }\n";
|
||||
const auto affected = runtime.scriptModules().reloadAffected("mem:/value.nut");
|
||||
CHECK_EQ(affected.size(), size_t(2));
|
||||
runtime.runSource("import { answer } from \"mem:/user.nut\"\nsecond_answer <- answer()\n", "game:/second.nut");
|
||||
CHECK_EQ(runtime.vm().get<int64_t>("second_answer"), int64_t(2));
|
||||
}
|
||||
|
||||
TEST_CASE("scriptModule.reloadAffectedRollsBackWholeGenerationGroup") {
|
||||
Runtime runtime(512, ssq::Libs::ALL);
|
||||
auto provider = std::make_shared<MemoryModuleProvider>();
|
||||
provider->sources["mem:/value.nut"] = "export function value() { return 3 }\n";
|
||||
provider->sources["mem:/user.nut"] =
|
||||
"import { value } from \"mem:/value.nut\"\nexport function answer() { return value() }\n";
|
||||
runtime.scriptModules().registerProvider(provider, 100);
|
||||
runtime.runSource("import { answer } from \"mem:/user.nut\"\nbefore_failure <- answer()\n", "game:/before.nut");
|
||||
|
||||
provider->sources["mem:/value.nut"] = "export function value() { return 4 }\n";
|
||||
provider->sources["mem:/user.nut"] = "export function answer( {\n";
|
||||
bool failed = false;
|
||||
try {
|
||||
runtime.scriptModules().reloadAffected("mem:/value.nut");
|
||||
} catch (const std::exception&) {
|
||||
failed = true;
|
||||
}
|
||||
REQUIRE(failed);
|
||||
runtime.runSource("import { answer } from \"mem:/user.nut\"\nafter_failure <- answer()\n", "game:/after.nut");
|
||||
CHECK_EQ(runtime.vm().get<int64_t>("after_failure"), int64_t(3));
|
||||
}
|
||||
Reference in new issue
Block a user