diff --git a/tests/Frontend.test.cpp b/tests/Frontend.test.cpp index 957f3c7c..c2241b54 100644 --- a/tests/Frontend.test.cpp +++ b/tests/Frontend.test.cpp @@ -517,6 +517,29 @@ TEST_CASE_FIXTURE(FrontendFixture, "recheck_if_dependent_script_is_dirty") CHECK_EQ("{| b_value: string |}", toString(*bExports)); } +TEST_CASE_FIXTURE(FrontendFixture, "mark_transitive_deps_as_dirty") +{ + fileResolver.source["game/Gui/Modules/A"] = "return {hello=5, world=true}"; + fileResolver.source["game/Gui/Modules/B"] = R"( + return require(game:GetService('Gui').Modules.A) + )"; + fileResolver.source["game/Gui/Modules/C"] = R"( + local Modules = game:GetService('Gui').Modules + local B = require(Modules.B) + return {c_value = B.hello} + )"; + + frontend.check("game/Gui/Modules/C"); + + std::vector markedDirty; + frontend.markDirty("game/Gui/Modules/A", &markedDirty); + + REQUIRE(markedDirty.size() == 3); + CHECK(std::find(markedDirty.begin(), markedDirty.end(), "game/Gui/Modules/A") != markedDirty.end()); + CHECK(std::find(markedDirty.begin(), markedDirty.end(), "game/Gui/Modules/B") != markedDirty.end()); + CHECK(std::find(markedDirty.begin(), markedDirty.end(), "game/Gui/Modules/C") != markedDirty.end()); +} + #if 0 // Does not work yet. :( TEST_CASE_FIXTURE(FrontendFixture, "recheck_if_dependent_script_has_a_parse_error") @@ -619,9 +642,11 @@ TEST_CASE_FIXTURE(FrontendFixture, "report_syntax_error_in_required_file") CHECK_EQ("Modules/A", result.errors[0].moduleName); - bool b = std::any_of(begin(result.errors), end(result.errors), [](auto&& e) -> bool { - return get(e); - }); + bool b = std::any_of(begin(result.errors), end(result.errors), + [](auto&& e) -> bool + { + return get(e); + }); if (!b) { CHECK_MESSAGE(false, "Expected a syntax error!");