Handle function returns
This commit is contained in:
@@ -81,5 +81,75 @@ end
|
||||
Assert.NotNull(castType.Block);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ReturnFromFunction()
|
||||
{
|
||||
const string input = @"
|
||||
function testFunc ()
|
||||
return 5
|
||||
end
|
||||
a = testFunc()
|
||||
";
|
||||
var script = new Script(input);
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
script.Evaluate();
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
Assert.True(script.Scope.TryGet("a", out var result));
|
||||
Assert.Equal(5, (long)(NumberLong)result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ReturnFromFunctionOnce()
|
||||
{
|
||||
const string input = @"
|
||||
function testFunc ()
|
||||
return 5
|
||||
return 10
|
||||
end
|
||||
a = testFunc()
|
||||
";
|
||||
var script = new Script(input);
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
script.Evaluate();
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
Assert.True(script.Scope.TryGet("a", out var result));
|
||||
Assert.Equal(5, (long)(NumberLong)result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ReturnFromFunctionNested()
|
||||
{
|
||||
const string input = @"
|
||||
function testFunc ()
|
||||
if true then
|
||||
return 5
|
||||
end
|
||||
return 10
|
||||
end
|
||||
a = testFunc()
|
||||
";
|
||||
var script = new Script(input);
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
script.Evaluate();
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
Assert.True(script.Scope.TryGet("a", out var result));
|
||||
Assert.Equal(5, (long)(NumberLong)result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ReturnFromScriptAsFunction()
|
||||
{
|
||||
const string input = @"
|
||||
a = 100
|
||||
return 60
|
||||
a = 87
|
||||
";
|
||||
var script = new Script(input);
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
var result = script.Evaluate<NumberLong>();
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
Assert.Equal(60, (long)(NumberLong)result);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user