Ejemplo n.º 1
0
        static int Main(string[] args)
        {
            var                  cli           = new CLInterface(args);
            DebuggerClient       debugger      = null;
            ControlScript        script        = null;
            LocalDebuggerProcess localDebugger = null;

            if (cli.NeedHelp)
            {
                cli.PrintHelp();
                return(1);
            }

            if (cli.ClientInfo == null)
            {
                Console.Error.WriteLine("Please define client type");
                return(1);
            }

            try {
                switch (cli.Protocol)
                {
                case ProtocolType.MI:
                    switch (cli.ClientInfo.Type)
                    {
                    case ClientType.Local:
                        var localClientInfo = (LocalClientInfo)cli.ClientInfo;
                        localDebugger = new LocalDebuggerProcess(
                            localClientInfo.DebuggerPath, @" --interpreter=mi");
                        localDebugger.Start();

                        debugger = new MILocalDebuggerClient(localDebugger.Input,
                                                             localDebugger.Output);
                        break;

                    case ClientType.Tcp:
                        var tcpClientInfo = (TcpClientInfo)cli.ClientInfo;
                        debugger = new MITcpDebuggerClient(tcpClientInfo.Addr,
                                                           tcpClientInfo.Port);
                        break;

                    default:
                        Console.Error.WriteLine("Only tcp and local debuggers are supported now");
                        return(1);
                    }

                    break;

                case ProtocolType.VSCode:
                    switch (cli.ClientInfo.Type)
                    {
                    case ClientType.Local:
                        var localClientInfo = (LocalClientInfo)cli.ClientInfo;
                        localDebugger = new LocalDebuggerProcess(
                            localClientInfo.DebuggerPath, @" --interpreter=vscode");
                        localDebugger.Start();

                        debugger = new VSCodeLocalDebuggerClient(localDebugger.Input,
                                                                 localDebugger.Output);
                        break;

                    case ClientType.Tcp:
                        var tcpClientInfo = (TcpClientInfo)cli.ClientInfo;
                        debugger = new VSCodeTcpDebuggerClient(tcpClientInfo.Addr,
                                                               tcpClientInfo.Port);
                        break;

                    default:
                        Console.Error.WriteLine("Only tcp and local debuggers are supported now");
                        return(1);
                    }

                    break;

                default:
                    Console.Error.WriteLine("Only GDB/MI and VSCode protocols is supported now");
                    return(1);
                }
            }
            catch {
                Console.Error.WriteLine("Can't create debugger client");
                if (localDebugger != null)
                {
                    localDebugger.Close();
                }
                return(1);
            }

            if (!debugger.DoHandshake(5000))
            {
                Console.Error.WriteLine("Handshake is failed");
                debugger.Close();
                if (localDebugger != null)
                {
                    localDebugger.Close();
                }
                return(1);
            }

            try {
                script = new ControlScript(cli.Environment.SourceFilesPath, debugger.Protocol);
            }
            catch (ScriptNotBuiltException e) {
                Console.Error.WriteLine("Script is not built:");
                Console.Error.WriteLine(e.ToString());
                debugger.Close();
                if (localDebugger != null)
                {
                    localDebugger.Close();
                }
                return(1);
            }

            try {
                new ControlPart().Run(script, debugger, cli.Environment);
                Console.WriteLine("Success: Test case \"{0}\" is passed!!!",
                                  cli.Environment.TestName);
            }
            catch (System.Exception e) {
                Console.Error.WriteLine("Script running is failed. Got exception:\n" + e.ToString());
                debugger.Close();
                if (localDebugger != null)
                {
                    localDebugger.Close();
                }
                return(1);
            }

            debugger.Close();
            if (localDebugger != null)
            {
                localDebugger.Close();
            }
            return(0);
        }