public void EscapeBracketInInterpolation() { IScript script = parser.Parse(ScriptCode.Create( "$value=320", "$\"Use {{} to {\"interpolate\"}.\"" )); Assert.AreEqual("Use {} to interpolate.", script.Execute()); }
public void CompareIntWithSubProperty() { IScript script = parser.Parse(ScriptCode.Create( "$test=0", "$test>this.property.length" ), new Variable("this", this)); Assert.DoesNotThrow(() => script.Execute()); }
public void DefaultParameterValueSpecified() { IScript script = parser.Parse(ScriptCode.Create( "parameter($value, \"int\", 5)", "return($value*$value)" )); Assert.AreEqual(9, script.Execute(new Variable("value", 3))); }
public void DefaultParameterValueNotSpecified() { IScript script = parser.Parse(ScriptCode.Create( "parameter($value, \"int\", 5)", "return($value*$value)" )); Assert.AreEqual(25, script.Execute()); }
public void MultipleInterpolations() { IScript script = parser.Parse(ScriptCode.Create( "$value=320", "$\"There are {7+4} more ways to {\"do it\"} but lets keep it at that.\"" )); Assert.AreEqual("There are 11 more ways to do it but lets keep it at that.", script.Execute()); }
public void Interpolation() { IScript script = parser.Parse(ScriptCode.Create( "$value=320", "$\"Like {$value} reasons to hate it.\"" )); Assert.AreEqual("Like 320 reasons to hate it.", script.Execute()); }
public void CallMethodWithOutParameter() { IScript script = parser.Parse(ScriptCode.Create( "$variable=0", "$test.outparameter(ref($variable))", "return($variable)" ), new Variable("test", this)); Assert.AreEqual(42, script.Execute()); }
public void MixedMultiLineAndLineComments() { Assert.DoesNotThrow(() => { parser.Parse(ScriptCode.Create( "/* ----", "// bla bla bla ", "// bla bla bla ", "*/" )); }); }
public void SetEntryAsProperty() { IScript script = parser.Parse(ScriptCode.Create( "$value = {}", "$value.number=60", "return($value.number)" )); Assert.AreEqual(60, script.Execute()); }
public void DetectVariableInitialization() { IScript script = parser.Parse(ScriptCode.Create( "$parameter=8", "method.call($parameter)" ), new Variable("method")); ParameterExtractor extractor = new ParameterExtractor(); extractor.Visit(script); Assert.That(!extractor.Parameters.Any()); }
public void InitializeDictionary() { IScript script = parser.Parse(ScriptCode.Create( "$dic={", " \"value\": 70", "}", "return($dic[\"value\"])" )); Assert.AreEqual(70, script.Execute <int>()); }
public void ReadCasedEntryAsProperty() { IScript script = parser.Parse(ScriptCode.Create( "$value = {", " \"Number\" : 60", "}", "return($value.Number)" )); Assert.AreEqual(60, script.Execute()); }
public void VariableAsValue() { IScript script = parser.Parse(ScriptCode.Create( "$value=70", "$dic={", " \"value\": $value", "}", "return($dic[\"value\"])" )); Assert.AreEqual(70, script.Execute <int>()); }
public void ExecuteExpressionInTask() { IScript script = parser.Parse(ScriptCode.Create( "$result=0", "$t=new task($result=5)", "$t.start()", "$t.wait()", "$result" )); Assert.AreEqual(5, script.Execute()); }
public void ArrayParameter() { IScript script = parser.Parse(ScriptCode.Create( "parameter($collection, \"int[]\")", "$result=0", "foreach($number,$collection)", " $result+=$number", "return($result)" )); Assert.AreEqual(6, script.Execute(new Variable("collection", new[] { 1, 2, 3 }))); }
public void ReturnDictionary() { IScript script = parser.Parse(ScriptCode.Create( "$dic={", " \"value\": 70", "}" )); Dictionary <object, object> result = script.Execute <Dictionary <object, object> >(); Assert.AreEqual(70, result["value"]); }
public void AwaitTask() { IScript script = parser.Parse(ScriptCode.Create( "$t=new task({", " 3+8", "})", "await($t)" )); int result = script.Execute <int>(); Assert.AreEqual(11, result); }
public void ImplicitExecute() { ScriptParser parser = new ScriptParser(); parser.MethodResolver = new ResourceScriptMethodProvider(typeof(ImportTests).Assembly, parser); IScript script = parser.Parse( ScriptCode.Create( "$method=import(\"Scripting.Tests.Scripts.External.increasedbyone.ns\")", "return($method(10))" )); Assert.AreEqual(11, script.Execute()); }
public void DetectImplicitParameterInSwitch() { IScript script = parser.Parse(ScriptCode.Create( "switch($condition)", "case(1) { return (4) }" )); ParameterExtractor extractor = new ParameterExtractor(); extractor.Visit(script); Assert.AreEqual(1, extractor.Parameters.Count()); Assert.AreEqual("condition", extractor.Parameters.First().Name); Assert.AreEqual(false, extractor.Parameters.First().IsOptional); }
public void ImportAndExecuteExternal(string resource) { ScriptParser parser = new ScriptParser(); parser.MethodResolver = new ResourceScriptMethodProvider(typeof(ImportTests).Assembly, parser); IScript script = parser.Parse( ScriptCode.Create( "$method=import($script)", "$method()" )); Assert.DoesNotThrow(() => script.Execute(new Variable("script", resource))); }
public void MultipleValuesInDictionary() { IScript script = parser.Parse(ScriptCode.Create( "$dic={", " \"value\": 70,", " \"number\": 60", "}" )); Dictionary <object, object> result = script.Execute <Dictionary <object, object> >(); Assert.AreEqual(60, result["number"]); }
public void ExceptionInCatchStatementIsResolved() { IScript script = parser.Parse(ScriptCode.Create( "try", " method.call(3)", "catch", " return($exception.message)" ), new Variable("method")); ParameterExtractor extractor = new ParameterExtractor(); extractor.Visit(script); Assert.That(!extractor.Parameters.Any()); }
public void CommentAtEndOfBlock() { Assert.DoesNotThrow(() => { parser.Parse(ScriptCode.Create( "$count=5", "while(count-->0){", " if(true) {", " $result=0", " }", " // comment at end of block", "}" )); }); }
public void CallGenericExtensionMethod() { IScriptParser parser = new ScriptParser(); parser.Extensions.AddExtensions <EnumerableExtensions>(); IScript script = parser.Parse(ScriptCode.Create( "$input", "$firstelement=$input.farstordefault()", "$firstelement" )); Assert.AreEqual(5, script.Execute(new Variable("input", new[] { 5, 9, 1 }))); }
public void DetectParameterAfterVariableInitializationInInnerBlock() { IScript script = parser.Parse(ScriptCode.Create( "if(20) {", " $parameter=8", "}", "method.call($parameter)" ), new Variable("method")); ParameterExtractor extractor = new ParameterExtractor(); extractor.Visit(script); Assert.AreEqual(1, extractor.Parameters.Count()); Assert.AreEqual("parameter", extractor.Parameters.First().Name); Assert.AreEqual(false, extractor.Parameters.First().IsOptional); }
public void CallSingleParameterUsingDictionaryConversion() { IScript script = parser.Parse( ScriptCode.Create( "$test.methodwithsingleparameter(", " \"success\", ", " {", " \"name\": \"n\",", " \"value\": 42", " }", ")"), new Variable("test", this)); Assert.AreEqual("success:n=42", script.Execute()); }
public void DictionaryInArray() { IScript script = parser.Parse(ScriptCode.Create( "$dic=[{", " \"value\": 70", "},{" + " \"value\": 42", "}]", "return($dic[1])" )); Dictionary <object, object> result = script.Execute <Dictionary <object, object> >(); Assert.AreEqual(42, result["value"]); }
public void PreferGenericExtension() { IScriptParser parser = new ScriptParser(); parser.Extensions.AddExtensions <EnumerableExtensions>(); // the generic extension actually returns the last instead of the first IScript script = parser.Parse(ScriptCode.Create( "$input", "$firstelement=$input.first()", "$firstelement" )); Assert.AreEqual(1, script.Execute(new Variable("input", new[] { 5, 9, 1 }))); }
public void DictionaryAsComplexArgument() { IScript script = parser.Parse(ScriptCode.Create( "$host.callcomplex({", " \"parameter\": {", " \"name\" : \"faxen\",", " \"value\" : \"schmutz\"", " }", " \"count\": 7,", " \"numbers\":[1,2,3]", "})" ), new Variable("host", this)); Assert.DoesNotThrow(() => script.Execute()); }
public void DictionaryAsMethodArgument() { IScript script = parser.Parse(ScriptCode.Create( "$result=new list()", "$result.add({", " \"value\": 70,", " \"number\": 60", "})", "return ($result)" )); List <object> result = script.Execute <List <object> >(); Assert.AreEqual(1, result.Count); Assert.AreEqual(60, (result[0] as Dictionary <object, object>)["number"]); }