Example #1
0
        public static void Sleep(double ms, TFunction caller)
        {
            var sleep = FunctionStack.First("Sleep");
            var func  = new TFunction(sleep, new List <EDefinition>(), ms.ToString(), caller.CallingFunction);

            sleep.TryParse(func);
            //Utilities.Sleep((int)ms);
        }
Example #2
0
        public override string CallBase()
        {
            var tryBlock = ProvidedArgs.First("invoke");

            if (tryBlock == null)
            {
                Compiler.ExceptionListener.Throw("Function Try must have an invoked function");
            }
            var tryfunc = FunctionStack.First(tryBlock.ToString());

            if (tryfunc == null)
            {
                Compiler.ExceptionListener.Throw(new ExceptionHandler(ExceptionType.CompilerException,
                                                                      $"Cannot find the invoked function.", LineValue));
            }

            var catchExt = Extensions.FirstOrDefault(f => f.Name == "Catch") as ExtensionCatch;

            if (catchExt == null)
            {
                Compiler.ExceptionListener.Throw("Function Try must have `Catch` extension");
            }
            var catchBlock = catchExt.Extend();

            if (catchBlock.ElementAtOrDefault(0) == null)
            {
                Compiler.ExceptionListener.Throw("Invoke for Catch block cannot be null");
            }
            var catchfunc = FunctionStack.First(catchBlock[0].ToString());

            if (catchfunc == null)
            {
                Compiler.ExceptionListener.Throw(new ExceptionHandler(ExceptionType.CompilerException,
                                                                      $"Cannot find the invoked function.", LineValue));
            }

            Compiler.ExceptionListener.TryCatchEventStack.Add(new Exceptions.TryCatchEvent(tryfunc, catchfunc));

            tryfunc.TryParse(new TFunction(Caller.Function, new List <EDefinition>(), tryfunc.GetInvokeProperties(), Caller.CallingFunction));


            return("");
        }
Example #3
0
        public override string CallBase()
        {
            var prov = ProvidedArgs.First("invoke");

            if (prov == null)
            {
                Compiler.ExceptionListener.Throw(new ExceptionHandler(ExceptionType.CompilerException,
                                                                      $"{this.Name } Arguments cannot be null."));
                return(null);
            }
            var func = FunctionStack.First(prov.ToString());

            if (func == null)
            {
                Compiler.ExceptionListener.Throw(new ExceptionHandler(ExceptionType.CompilerException,
                                                                      $"Invoke function [{prov.ToString()}] could not be found"));
                return(null);
            }
            if (!func.Async)
            {
                Compiler.ExceptionListener.Throw($"{this.Name} The invoked function must be marked async",
                                                 ExceptionType.SystemException);
                return(null);
            }
            try
            {
                Thread th = new Thread(() =>
                {
                    func.SetInvokeProperties(new string[] { }, Caller.CallingFunction.LocalVariables.List, Caller.CallingFunction.ProvidedArgs.List);
                    func.TryParse(new TFunction(Caller.Function, new List <EDefinition>(), this.GetInvokeProperties(), Caller.CallingFunction));
                });
                th.Start();
            }catch
            {
                Compiler.ExceptionListener.Throw($"Async thread reached an unexpected error.", ExceptionType.SystemException);
                return(null);
            }
            return("");
        }
Example #4
0
        public override string CallBase()
        {
            var prov = ProvidedArgs.First("bool");

            if (prov == null)
            {
                Compiler.ExceptionListener.Throw(new ExceptionHandler(ExceptionType.CompilerException,
                                                                      $"Arguments cannot be null.", LineValue));
                return(null);
            }
            bool flag    = (prov.ToString() == "True" || prov.ToString() == "true") ? true : false;
            var  andFlag = Extensions.FirstOrDefault(f => f.Name == "And");
            var  orFlag  = Extensions.FirstOrDefault(f => f.Name == "Or");

            if (orFlag != null)
            {
                var orExtensions = Extensions.Where(w => w.Name == "Or");
                foreach (var o in orExtensions)
                {
                    var      or        = o as ExtensionOr;
                    string[] param     = or.Extend();
                    bool     paramFlag = (param[0].ToString() == "True" || param[0].ToString() == "true") ? true : false;
                    if (paramFlag)
                    {
                        flag = true;
                        break;
                    }
                }
            }
            if (andFlag != null)
            {
                var andExtensions = Extensions.Where(w => w.Name == "And");
                foreach (var a in andExtensions)
                {
                    var      and       = a as ExtensionAnd;
                    string[] param     = and.Extend();
                    bool     paramFlag = (param[0].ToString() == "True" || param[0].ToString() == "true") ? true : false;
                    if (!paramFlag)
                    {
                        flag = false;
                        break;
                    }
                }
            }

            if (flag)
            {
                //find then extension and call it
                var findThen = Extensions.FirstOrDefault(f => f.Name == "Then") as ExtensionThen;
                if (findThen != null)
                {
                    string[] thenFunc = findThen.Extend();
                    var      func     = FunctionStack.First(thenFunc[0].ToString());
                    if (func == null)
                    {
                        Compiler.ExceptionListener.Throw(new ExceptionHandler(ExceptionType.CompilerException,
                                                                              $"Cannot find the invoked function.", LineValue));
                        return(null);
                    }
                    //pass in invoke properties. shouldnt break with null
                    func.SetInvokeProperties(new string[] { }, Caller.CallingFunction.LocalVariables.List, Caller.CallingFunction.ProvidedArgs.List);
                    func.TryParse(new TFunction(Caller.Function, new List <EDefinition>(), findThen.GetInvokeProperties(), Caller.CallingFunction));
                }
                else
                {
                    Compiler.ExceptionListener.Throw(new ExceptionHandler(ExceptionType.CompilerException,
                                                                          $"[460]If function must have a Then Extension", LineValue));
                    return(null);
                }
            }
            else
            {
                //find else extension and call it
                var findElse = Extensions.FirstOrDefault(f => f.Name == "Else") as ExtensionElse;
                if (findElse != null)
                {
                    string[] elseFunc = findElse.Extend();
                    var      func     = FunctionStack.First(elseFunc[0].ToString());
                    if (func == null)
                    {
                        Compiler.ExceptionListener.Throw(new ExceptionHandler(ExceptionType.CompilerException,
                                                                              $"Cannot find the invoked function.", LineValue));
                        return(null);
                    }
                    func.SetInvokeProperties(new string[] { }, Caller.CallingFunction.LocalVariables.List, Caller.CallingFunction.ProvidedArgs.List);
                    func.TryParse(new TFunction(Caller.Function, new List <EDefinition>(), findElse.GetInvokeProperties(), Caller.CallingFunction));
                }
            }
            return("");
        }
        public override string CallBase()
        {
            if (Main.AndroidDriver == null)
            {
                Compiler.ExceptionListener.Throw("Cannot check screen without a connected device");
                return(null);
            }
            var succFunc = ProvidedArgs.First("succFunc");
            var failFunc = ProvidedArgs.First("failFunc");
            var succPath = ProvidedArgs.First("succPath");
            var failPath = ProvidedArgs.First("failPath");

            if (succFunc == null || failFunc == null || succPath == null)
            {
                Compiler.ExceptionListener.Throw(new ExceptionHandler(ExceptionType.NullReferenceException, $"Invoke function cannot be null.", LineValue));
                return(null);
            }
            var sf = FunctionStack.First(succFunc.ToString());
            var ff = FunctionStack.First(failFunc.ToString());

            if (sf == null || ff == null)
            {
                Compiler.ExceptionListener.Throw(new ExceptionHandler(ExceptionType.CompilerException,
                                                                      $"[198]Invoke function cannot be found.", LineValue));
                return(null);
            }
            sf.SetInvokeProperties(new string[] { }, Caller.CallingFunction.LocalVariables.List, Caller.CallingFunction.ProvidedArgs.List);
            ff.SetInvokeProperties(new string[] { }, Caller.CallingFunction.LocalVariables.List, Caller.CallingFunction.ProvidedArgs.List);
            //check for threshold extension
            var prop = CheckProperty();

            if (failPath != null)
            {
                try
                {
                    Commands.AnalyzeScreen(succPath.ToString(), failPath.ToString(), sf, ff, prop, this.Caller);
                }
                catch (Exception e)
                {
                    if (e is System.IO.FileNotFoundException)
                    {
                        Compiler.ExceptionListener.Throw(new ExceptionHandler(ExceptionType.DriverException,
                                                                              $"File could not be found: {succPath.ToString()}, {failPath.ToString()}"));
                        return(null);
                    }
                    Compiler.ExceptionListener.Throw(new ExceptionHandler("[57]Unexpected error with CheckScreen()"));
                    return(null);
                }
            }
            else
            {
                try
                {
                    Commands.AnalyzeScreen(succPath.ToString(), sf, ff, prop, this.Caller);
                }
                catch (Exception e)
                {
                    if (e is System.IO.FileNotFoundException)
                    {
                        Compiler.ExceptionListener.Throw(new ExceptionHandler(ExceptionType.DriverException,
                                                                              $"File could not be found: {succPath.ToString()}"));
                        return(null);
                    }
                    Compiler.ExceptionListener.Throw(new ExceptionHandler("[73]Unexpected error with CheckScreen()"));
                    return(null);
                }
            }

            return("");
        }
Example #6
0
        public override string CallBase()
        {
            this.IsLoop = true;
            var prov = ProvidedArgs.First("invoke");

            if (prov == null)
            {
                Compiler.ExceptionListener.Throw(new ExceptionHandler(ExceptionType.CompilerException, $"[247]Invoke function cannot be null.", LineValue));
                return(null);
            }
            var func = FunctionStack.First(prov.ToString());

            if (func == null)
            {
                Compiler.ExceptionListener.Throw(new ExceptionHandler(ExceptionType.CompilerException, $"[250]Invoke function cannot be null.", LineValue));
                return(null);
            }
            var findFor = Extensions.FirstOrDefault(f => f.Name == "For") as ExtensionFor;

            if (findFor != null && findFor.Extend() != null && findFor.Extend().ElementAtOrDefault(0) != null && findFor.Extend()[0] != "")
            {
                string[] forNumber         = findFor.Extend();
                int      forNumberAsNumber = int.Parse(forNumber[0].ToString());
                //if (forNumberAsNumber == 0)
                //    forNumberAsNumber = int.MaxValue;
                var tracer = new LoopTracer();
                Compiler.LoopTracerStack.Add(tracer);
                for (var x = 0; x <= forNumberAsNumber; x++)
                {
                    //gave a string as the parameter because number was causing srs problems
                    if (!TokenParser.Stop)
                    {
                        if (tracer.Break)
                        {
                            break;
                        }
                        if (tracer.Continue)
                        {
                            tracer.SetContinue(false);//reset continue
                        }
                        var passed = this.GetInvokeProperties();
                        if (passed != null)
                        {
                            var getFirstElement = passed.ElementAtOrDefault(0);
                            if (getFirstElement != null)
                            {
                                passed[0] = x.ToString();
                            }
                            else
                            {
                                passed = new string[] { x.ToString() };
                            }
                        }
                        else
                        {
                            passed = new string[] { x.ToString() };
                        }
                        func.SetInvokeProperties(new string[] { }, Caller.CallingFunction.LocalVariables.List, Caller.CallingFunction.ProvidedArgs.List);
                        func.TryParse(new TFunction(Caller.Function, new List <EDefinition>(), passed, this, tracer));
                    }
                    else
                    {
                        break;
                    }
                }
                Compiler.LoopTracerStack.Remove(tracer);
                tracer = null;
            }
            else
            {
                //LoopTracer tracer = new LoopTracer();
                //Compiler.LoopTracerStack.Add(tracer);
                //Tracer = tracer;
                var tracer = new LoopTracer();
                Compiler.LoopTracerStack.Add(tracer);
                var x = 0;
                while (true)
                {
                    //gave a string as the parameter because number was causing srs problems
                    if (!TokenParser.Stop)
                    {
                        if (tracer.Break)
                        {
                            break;
                        }
                        if (tracer.Continue)
                        {
                            tracer.SetContinue(false);//reset continue
                        }
                        var passed = this.GetInvokeProperties();
                        if (passed != null)
                        {
                            var getFirstElement = passed.ElementAtOrDefault(0);
                            if (getFirstElement != null)
                            {
                                passed[0] = x.ToString();
                            }
                            else
                            {
                                passed = new string[] { x.ToString() };
                            }
                        }
                        else
                        {
                            passed = new string[] { x.ToString() };
                        }
                        //Console.WriteLine(func.UID+JsonConvert.SerializeObject(tracer, Formatting.Indented));
                        func.SetInvokeProperties(new string[] { }, Caller.CallingFunction.LocalVariables.List, Caller.CallingFunction.ProvidedArgs.List);
                        func.TryParse(new TFunction(Caller.Function, new List <EDefinition>(), passed, this, tracer));
                        x++;
                        //Console.WriteLine("\t\t\t" +func.UID + ":" + string.Join(",",func.ProvidedArgs));
                        //Console.WriteLine(func.UID + JsonConvert.SerializeObject(func.ProvidedArgs, Formatting.Indented));
                    }
                    else
                    {
                        break;
                    }
                }
                //foreach (var ttt in Compiler.LoopTracerStack)
                //    Console.WriteLine("b"+func.UID + JsonConvert.SerializeObject(ttt, Formatting.Indented));
                Compiler.LoopTracerStack.Remove(tracer);
                //foreach(var ttt in Compiler.LoopTracerStack)
                //    Console.WriteLine("a"+func.UID + JsonConvert.SerializeObject(ttt, Formatting.Indented));
                tracer = null;
            }
            return("");
        }