diff --git a/samples/linkedlist.js b/samples/linkedlist.js index f3aa7f2..8693dcd 100644 --- a/samples/linkedlist.js +++ b/samples/linkedlist.js @@ -16,7 +16,7 @@ function append(lst: list, item: number) { function getOdd(lst: list): number[] { let result: number[] - let n = lst.head + let n: node = lst.head while (n != null) { if (n.data % 2 != 0) { let i = n.data diff --git a/tests/HydraScript.IntegrationTests/ErrorPrograms/NullAssignmentWhenUndefinedTests.cs b/tests/HydraScript.IntegrationTests/ErrorPrograms/NullAssignmentWhenUndefinedTests.cs new file mode 100644 index 0000000..5f02cb4 --- /dev/null +++ b/tests/HydraScript.IntegrationTests/ErrorPrograms/NullAssignmentWhenUndefinedTests.cs @@ -0,0 +1,32 @@ +using System.CommandLine.Parsing; + +namespace HydraScript.IntegrationTests.ErrorPrograms; + +public class NullAssignmentWhenUndefinedTests(TestHostFixture fixture) : IClassFixture +{ + [Theory, MemberData(nameof(NullAssignmentScripts))] + public void NullAssignment_UndefinedDestinationOrReturnType_HydraScriptError(string script) + { + var runner = fixture.GetRunner( + configureTestServices: services => + services.SetupInMemoryScript(script)); + var code = runner.Invoke(fixture.InMemoryScript); + code.Should().Be(ExitCodes.HydraScriptError); + fixture.LogMessages.Should() + .Contain(x => x.Contains("Cannot assign 'null' when type is undefined")); + } + + public static TheoryData NullAssignmentScripts + { + get + { + const string lexicalDeclaration = "let x = null"; + const string objectLiteralProperty = "let y = {prop: null;}"; + const string functionReturn = "function f() { return null }"; + return new TheoryData([ + lexicalDeclaration, + objectLiteralProperty, + functionReturn]); + } + } +} \ No newline at end of file diff --git a/tests/HydraScript.IntegrationTests/ErrorPrograms/VariableInitializationTests.cs b/tests/HydraScript.IntegrationTests/ErrorPrograms/VariableInitializationTests.cs index bde303d..ab00ac5 100644 --- a/tests/HydraScript.IntegrationTests/ErrorPrograms/VariableInitializationTests.cs +++ b/tests/HydraScript.IntegrationTests/ErrorPrograms/VariableInitializationTests.cs @@ -5,7 +5,7 @@ namespace HydraScript.IntegrationTests.ErrorPrograms; public class VariableInitializationTests(TestHostFixture fixture) : IClassFixture { [Theory, MemberData(nameof(VariableInitializationScripts))] - public void VariableWithoutTypeDeclared_AccessedBeforeInitialization_ExitCodeHydraScriptError(string script) + public void VariableWithoutTypeDeclared_AccessedBeforeInitialization_HydraScriptError(string script) { var runner = fixture.GetRunner( configureTestServices: services => @@ -36,7 +36,9 @@ function f() { return 5 } """; - return new TheoryData([variableWithoutTypeDeclared, typedVariableDeclared]); + return new TheoryData([ + variableWithoutTypeDeclared, + typedVariableDeclared]); } } } \ No newline at end of file diff --git a/tests/HydraScript.IntegrationTests/ErrorPrograms/VoidAssignmentTests.cs b/tests/HydraScript.IntegrationTests/ErrorPrograms/VoidAssignmentTests.cs index 43af6a1..9ef8ba9 100644 --- a/tests/HydraScript.IntegrationTests/ErrorPrograms/VoidAssignmentTests.cs +++ b/tests/HydraScript.IntegrationTests/ErrorPrograms/VoidAssignmentTests.cs @@ -5,7 +5,7 @@ namespace HydraScript.IntegrationTests.ErrorPrograms; public class VoidAssignmentTests(TestHostFixture fixture) : IClassFixture { [Fact] - public void FunctionDeclared_VoidReturnAssigned_ExitCodeHydraScriptError() + public void FunctionDeclared_VoidReturnAssigned_HydraScriptError() { const string script = """