private AlgorithmProgram GetAsyncProgram(bool awaitCall) { var program = new AlgorithmProgram("MyApp"); var firstClass = new AlgorithmClassDeclaration("FirstClass"); firstClass.Members.Add(new AlgorithmClassPropertyDeclaration("MyVar")); var firstMethod = new AlgorithmClassMethodDeclaration("FirstMethod", true); firstMethod.Statements.Add(new AlgorithmReturnStatement(new AlgorithmPrimitiveExpression(123))); firstClass.Members.Add(firstMethod); var entryPoint = new AlgorithmEntryPointMethod(); entryPoint.Statements.Add(new AlgorithmAssignStatement(new AlgorithmVariableReferenceExpression("MyVar"), new AlgorithmInstanciateExpression(new AlgorithmClassReferenceExpression("FirstClass")))); var invoke = new AlgorithmInvokeMethodExpression(new AlgorithmVariableReferenceExpression("MyVar"), "FirstMethod"); invoke.Await = awaitCall; entryPoint.Statements.Add(new AlgorithmReturnStatement(invoke)); firstClass.Members.Add(entryPoint); program.Classes.Add(firstClass); program.UpdateEntryPointPath(); return(program); }
public void InvokeMethodAwaitButNotAsync() { var program = new AlgorithmProgram("MyApp"); var firstClass = new AlgorithmClassDeclaration("FirstClass"); firstClass.Members.Add(new AlgorithmClassPropertyDeclaration("MyVar")); var firstMethod = new AlgorithmClassMethodDeclaration("FirstMethod", false); firstMethod.Statements.Add(new AlgorithmReturnStatement(new AlgorithmPrimitiveExpression(123))); firstClass.Members.Add(firstMethod); var entryPoint = new AlgorithmEntryPointMethod(); entryPoint.Statements.Add(new AlgorithmAssignStatement(new AlgorithmVariableReferenceExpression("MyVar"), new AlgorithmInstanciateExpression(new AlgorithmClassReferenceExpression("FirstClass")))); var invoke = new AlgorithmInvokeMethodExpression(new AlgorithmVariableReferenceExpression("MyVar"), "FirstMethod"); invoke.Await = true; entryPoint.Statements.Add(new AlgorithmReturnStatement(invoke)); firstClass.Members.Add(entryPoint); program.Classes.Add(firstClass); program.UpdateEntryPointPath(); var algorithmInterpreter = new AlgorithmInterpreter(program); var task = algorithmInterpreter.StartAsync(debugMode: true); task.Wait(); Assert.AreEqual(algorithmInterpreter.StateChangeHistory.Count, 13); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[0].State, AlgorithmInterpreterState.Ready); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[1].State, AlgorithmInterpreterState.Preparing); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[2].State, AlgorithmInterpreterState.Running); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[3].LogMessage, "Variable 'MyVar' declared in the class => IsArray:False, DefaultValue:{null}"); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[4].LogMessage, "Assign 'MyVar' to 'new FirstClass()'"); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[5].LogMessage, "Value of the variable 'MyVar' is {null}"); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[6].LogMessage, "Reference to the class : FirstClass"); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[7].LogMessage, "Creating a new instance of 'FirstClass'"); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[8].LogMessage, "Variable 'MyVar' declared in the class => IsArray:False, DefaultValue:{null}"); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[9].LogMessage, "'MyVar' is now equal to 'Algo.Runtime.Build.Runtime.Interpreter.Interpreter.ClassInterpreter' (type:Algo.Runtime.Build.Runtime.Interpreter.Interpreter.ClassInterpreter)"); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[10].LogMessage, "Calling method 'MyVar.FirstMethod'"); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[11].LogMessage, "Value of the variable 'MyVar' is 'Algo.Runtime.Build.Runtime.Interpreter.Interpreter.ClassInterpreter' (type:Algo.Runtime.Build.Runtime.Interpreter.Interpreter.ClassInterpreter)"); Assert.AreEqual(algorithmInterpreter.StateChangeHistory[12].State, AlgorithmInterpreterState.StoppedWithError); Assert.AreEqual(algorithmInterpreter.State, AlgorithmInterpreterState.StoppedWithError); AlgorithmInterpreter_Test.RunProgramWithoutDebug(program, true); }
/// <summary> /// Initialize a new instance of <see cref="Call"/> /// </summary> /// <param name="classReference">The reference to the class</param> /// <param name="invokeMethodExpression">The reference to the called method</param> internal Call(AlgorithmClassReferenceExpression classReference, AlgorithmInvokeMethodExpression invokeMethodExpression) { ClassReference = classReference; InvokeMethodExpression = invokeMethodExpression; }