// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details

#include "Fixture.h"

#include "Luau/RecursionCounter.h"

#include "doctest.h"

using namespace Luau;

LUAU_FASTINT(LuauVisitRecursionLimit)

TEST_SUITE_BEGIN("VisitTypeVar");

TEST_CASE_FIXTURE(Fixture, "throw_when_limit_is_exceeded")
{
    ScopedFastInt sfi{"LuauVisitRecursionLimit", 3};

    CheckResult result = check(R"(
        local t : {a: {b: {c: {d: {e: boolean}}}}}
    )");

    TypeId tType = requireType("t");

    if (FFlag::LuauIceExceptionInheritanceChange)
    {
        CHECK_THROWS_AS(toString(tType), RecursionLimitException);
    }
    else
    {
        CHECK_THROWS_AS(toString(tType), RecursionLimitException_DEPRECATED);
    }
}

TEST_CASE_FIXTURE(Fixture, "dont_throw_when_limit_is_high_enough")
{
    ScopedFastInt sfi{"LuauVisitRecursionLimit", 8};

    CheckResult result = check(R"(
        local t : {a: {b: {c: {d: {e: boolean}}}}}
    )");

    TypeId tType = requireType("t");

    (void)toString(tType);
}

TEST_SUITE_END();
