2021-10-30 04:25:12 +08:00
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
# include "Luau/Error.h"
2023-08-19 01:06:29 +08:00
# include "Fixture.h"
2021-10-30 04:25:12 +08:00
# include "doctest.h"
using namespace Luau ;
2024-05-26 23:33:40 +08:00
LUAU_FASTFLAG ( DebugLuauDeferredConstraintResolution )
2021-10-30 04:25:12 +08:00
TEST_SUITE_BEGIN ( " ErrorTests " ) ;
TEST_CASE ( " TypeError_code_should_return_nonzero_code " )
{
auto e = TypeError { { { 0 , 0 } , { 0 , 1 } } , UnknownSymbol { " Foo " } } ;
CHECK_GE ( e . code ( ) , 1000 ) ;
}
2023-08-19 01:06:29 +08:00
TEST_CASE_FIXTURE ( BuiltinsFixture , " metatable_names_show_instead_of_tables " )
{
frontend . options . retainFullTypeGraphs = false ;
2024-04-12 18:44:40 +08:00
2023-08-19 01:06:29 +08:00
CheckResult result = check ( R " (
- - ! strict
local Account = { }
Account . __index = Account
function Account . deposit ( self : Account , x : number )
self . balance + = x
end
type Account = typeof ( setmetatable ( { } : : { balance : number } , Account ) )
local x : Account = 5
) " );
LUAU_REQUIRE_ERROR_COUNT ( 1 , result ) ;
CHECK_EQ ( " Type 'number' could not be converted into 'Account' " , toString ( result . errors [ 0 ] ) ) ;
}
2024-05-26 23:33:40 +08:00
TEST_CASE_FIXTURE ( BuiltinsFixture , " binary_op_type_family_errors " )
{
frontend . options . retainFullTypeGraphs = false ;
CheckResult result = check ( R " (
- - ! strict
local x = 1 + " foo "
) " );
LUAU_REQUIRE_ERROR_COUNT ( 1 , result ) ;
if ( FFlag : : DebugLuauDeferredConstraintResolution )
CHECK_EQ ( " Operator '+' could not be applied to operands of types number and string; there is no corresponding overload for __add " , toString ( result . errors [ 0 ] ) ) ;
else
CHECK_EQ ( " Type 'string' could not be converted into 'number' " , toString ( result . errors [ 0 ] ) ) ;
}
TEST_CASE_FIXTURE ( BuiltinsFixture , " unary_op_type_family_errors " )
{
frontend . options . retainFullTypeGraphs = false ;
CheckResult result = check ( R " (
- - ! strict
local x = - " foo "
) " );
if ( FFlag : : DebugLuauDeferredConstraintResolution )
{
LUAU_REQUIRE_ERROR_COUNT ( 2 , result ) ;
CHECK_EQ ( " Operator '-' could not be applied to operand of type string; there is no corresponding overload for __unm " , toString ( result . errors [ 0 ] ) ) ;
CHECK_EQ ( " Type 'string' could not be converted into 'number' " , toString ( result . errors [ 1 ] ) ) ;
}
else
{
LUAU_REQUIRE_ERROR_COUNT ( 1 , result ) ;
CHECK_EQ ( " Type 'string' could not be converted into 'number' " , toString ( result . errors [ 0 ] ) ) ;
}
}
2021-10-30 04:25:12 +08:00
TEST_SUITE_END ( ) ;