Handle function returns

This commit is contained in:
2018-11-16 13:45:03 +01:00
parent eff60375ea
commit 7c6d847adb
9 changed files with 190 additions and 15 deletions

View File

@@ -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);
}
}
}