Esempio n. 1
0
        public MainController(IHostingEnvironment env, RunFlags runFlags)
        {
            ConsoleHelper.Logger.SetWorkingFolder(env.ContentRootPath);
            _env      = env;
            _runFlags = runFlags;

            _completedSuitesFileName = Path.Combine(_env.ContentRootPath, "testing/CompletedSuites.txt");
        }
Esempio n. 2
0
        public RunRecord(int flags, byte[] data)
        {
            this.flags = (RunFlags)flags;

            List <string> items = Helpers.SplitString(data, true);

            filename   = items[0];
            args       = items[1];
            workingDir = items[2];
        }
Esempio n. 3
0
        public string GetOutput(string filename, string args, string workingDir, RunFlags flags, string input, out int exitCode)
        {
            var proc = CreateProcess(filename, args, workingDir);
            var list = new List <string>();

            Log.VeryVerbose(GetCommand(proc.StartInfo.FileName, proc.StartInfo.Arguments, workingDir), ConsoleColor.Cyan);

            proc.OutputDataReceived += (s, e) =>
            {
                if (e.Data != null)
                {
                    list.Add(e.Data);
                }
            };

            proc.ErrorDataReceived += (s, e) =>
            {
                if (e.Data != null)
                {
                    list.Add(e.Data);
                }
            };

            lock (Processes)
                Processes.Add(proc);

            using (new ProcessRunner(proc, input))
            {
                proc.WaitForExit();

                lock (Processes)
                    Processes.Remove(proc);

                var output = string.Join("\n", list);

                if (proc.ExitCode == 0 || flags.HasFlag(RunFlags.NoThrow))
                {
                    if (!flags.HasFlag(RunFlags.NoOutput))
                    {
                        Log.Verbose(output);
                    }

                    if (proc.ExitCode != 0)
                    {
                        Log.VeryVerbose("(exit code: " + proc.ExitCode + ")\n", ConsoleColor.Gray);
                    }

                    exitCode = proc.ExitCode;
                    return(output);
                }

                Log.OutWriter.Write(output);
                throw new InvalidOperationException("Process " + proc.ProcessName.Quote() + " exited with code " + proc.ExitCode);
            }
        }
Esempio n. 4
0
 public int Run(string filename, string args, string workingDir, RunFlags flags = 0, string input = null)
 {
     try
     {
         return(Start(filename, args, workingDir, flags, input).Result);
     }
     catch (Exception e)
     {
         Log.Error("Exception while running " + filename.Quote() + ": " + e.Message);
         Log.Trace(e);
         return(0xFF);
     }
 }
Esempio n. 5
0
        public async Task <int> Start(string filename, string args, string workingDir, RunFlags flags = 0, string input = null, CancellationToken ct = default(CancellationToken))
        {
            var level = flags.HasFlag(RunFlags.Compact)
                ? LogLevel.Verbose
                : LogLevel.Compact;

            var output   = new StringBuilder();
            var exitCode = await Start(filename, args, workingDir,
                                       (s, e) => {
                if (e.Data == null)
                {
                    return;
                }

                if (level == LogLevel.Verbose && !Log.IsVerbose)
                {
                    output.AppendLine(e.Data);
                }

                if (!flags.HasFlag(RunFlags.Colors))
                {
                    Log.WriteLine(level, e.Data);
                }
                else if (e.Data.Length > 2 && e.Data[0] == '#' && e.Data[1] == '#')
                {
                    Log.WriteLine(e.Data.Substring(2).TrimStart(), ConsoleColor.DarkGreen);
                }
                else if (e.Data.IndexOf("error:", StringComparison.InvariantCultureIgnoreCase) != -1 ||
                         e.Data.IndexOf(": error", StringComparison.InvariantCultureIgnoreCase) != -1 ||
                         e.Data.IndexOf(": fatal error", StringComparison.InvariantCultureIgnoreCase) != -1 ||
                         e.Data.StartsWith("npm ERR!"))
                {
                    Log.WriteErrorLine(e.Data.Trim(), ConsoleColor.Red);
                }
                else if (e.Data.IndexOf("warning:", StringComparison.InvariantCultureIgnoreCase) != -1 ||
                         e.Data.IndexOf(": warning", StringComparison.InvariantCultureIgnoreCase) != -1 ||
                         e.Data.StartsWith("npm WARN"))
                {
                    Log.WriteErrorLine(e.Data.Trim(), ConsoleColor.Yellow);
                }
                else if (e.Data.StartsWith("Downloading ", StringComparison.InvariantCultureIgnoreCase) ||
                         e.Data.StartsWith("Download ", StringComparison.InvariantCultureIgnoreCase))
                {
                    Log.WriteLine(e.Data, ConsoleColor.Blue);
                }
                else
                {
                    Log.WriteLine(level, e.Data);
                }
            },
                                       (s, e) => {
                if (e.Data == null)
                {
                    return;
                }

                if (!flags.HasFlag(RunFlags.Colors))
                {
                    Log.WriteErrorLine(e.Data);
                }
                else if (e.Data.IndexOf("error:", StringComparison.InvariantCultureIgnoreCase) != -1)
                {
                    Log.WriteErrorLine(e.Data, ConsoleColor.Red);
                }
                else
                {
                    Log.WriteErrorLine(e.Data, ConsoleColor.Yellow);
                }
            },
                                       input, ct).ConfigureAwait(false);

            if (exitCode != 0 && output.Length > 0)
            {
                Log.WriteLine(output.ToString().Trim());
            }

            return(exitCode);
        }
Esempio n. 6
0
 public Task <int> Start(string filename, string args = "", RunFlags flags = 0, string input = null, CancellationToken ct = default(CancellationToken))
 {
     return(Start(filename, args, null, flags, input, ct));
 }
Esempio n. 7
0
 public int Run(string filename, string args = "", RunFlags flags = 0, string input = null)
 {
     return(Run(filename, args, null, flags, input));
 }
Esempio n. 8
0
        public string GetOutput(string filename, string args, string workingDir, RunFlags flags = 0, string input = null)
        {
            int exitCode;

            return(GetOutput(filename, args, workingDir, flags, input, out exitCode));
        }
Esempio n. 9
0
 public MainController(IHostingEnvironment env, RunFlags runFlags)
 {
     _env      = env;
     _runFlags = runFlags;
 }
Esempio n. 10
0
 private void RemoveRunFlag(RunFlags flag)
 {
     this.runFlags = (this.runFlags | flag) ^ flag;
 }
Esempio n. 11
0
 private void AddRunFlag(RunFlags flag)
 {
     this.runFlags |= flag;
 }
Esempio n. 12
0
 private bool CheckRunFlags(RunFlags flag)
 {
     return((this.runFlags & flag) == flag);
 }
Esempio n. 13
0
        private static bool runAgainstObject(object obj, Type objType, string func, Array a, RunFlags flags, out object retVal)
        {
            try
            {
                BindingFlags bf = BindingFlags.Public | BindingFlags.Default | BindingFlags.IgnoreCase | BindingFlags.FlattenHierarchy;
                if ((flags & RunFlags.AccessPrivate) != 0)
                {
                    bf |= BindingFlags.NonPublic;
                }

                bool newFlag  = (flags & RunFlags.New) != 0;
                bool propFlag = (flags & RunFlags.Property) != 0;

                if (newFlag)
                {
                    if (objType == null)
                    {
                        throw new TypeLoadException("Unknown class '" + func + "'");
                    }
                    if (propFlag && a != null)
                    {
                        objType  = objType.MakeArrayType(a.Length);
                        propFlag = false;
                    }
                    func = objType.FullName;
                    bf  |= BindingFlags.CreateInstance;
                }
                else
                {
                    bf |= BindingFlags.InvokeMethod;
                }
                if (obj == null && !newFlag)
                {
                    bf |= BindingFlags.Static;
                }
                else
                {
                    bf |= BindingFlags.Instance;
                }

                if (propFlag)
                {
                    return(evalProperty(obj, objType, bf, func, a, out retVal));
                }

                if (newFlag)
                {
                    return(evalConstructor(objType, bf, a, out retVal));
                }
                return(evalMethod(obj, objType, bf, func, a, out retVal));
            }
            catch (TargetInvocationException e)
            {
                if (e.InnerException != null)
                {
                    throw e.InnerException;
                }
                throw;
            }
        }
Esempio n. 14
0
 public MainController(IHostingEnvironment env, RunFlags runFlags)
 {
     ConsoleHelper.Logger.SetWorkingFolder(env.ContentRootPath);
     _env      = env;
     _runFlags = runFlags;
 }
Esempio n. 15
0
 /// <see cref="RunEntry.Flags"/>
 public Builder Flags(RunFlags flags)
 {
     _run.Flags = flags;
     return(this);
 }