internal void HandleScriptActivation()
        {

            //Check if its in playback mode, as it should be treated differently due to blocking
            if (player == null)
            {
                if (textCore.ChangeScript(ScriptTabControl.CurrentTab))
                    CheckTabControlVisibility(false);
                else
                    return;

            }
            else
            {
                CheckTabControlVisibility(false);
                TextEditorCommand command = new TextEditorCommand(TextEditorCommand.Method.ChangeScript);
                command.AppendArgument(ScriptTabControl.CurrentTab);
                textCore.PlaybackCommand(command);
            }

            // Resize canvas to fit the next script.
            //if (numSlider != null)
            //    numSlider.Visibility = Visibility.Collapsed;
            UpdateCanvasDimension();

            IExecutionSession session = Solution.Current.ExecutionSession;
            UpdateScriptDisplay(Solution.Current.ActiveScript);
            UpdateCaretPosition(false);
            textCanvas.BreakpointsUpdated();

            if (null != session)
            {
                CodeRange executionCursor = new CodeRange();
                if (session.GetExecutionCursor(ref executionCursor))
                    textCanvas.SetExecutionCursor(executionCursor);
            }

            if (null != textEditorControl.textCore.CurrentTextBuffer)
            {
                textCanvas.ScrollOwner.ScrollToVerticalOffset(
                    textEditorControl.textCore.VerticalScrollPosition);
            }
        }
예제 #2
0
        private bool PlaybackSingleCommand()
        {
            if (null == assertions)
                assertions = new List<AssertionResult>();

            commandIndex = commandIndex + 1;
            if (commandIndex >= editorCommands.Count)
            {
                if (xmlTestFiles.Count > 1) // Multi-playback mode.
                {
                    if (null == testResults)
                        testResults = new List<AutomationResult>();

                    testResults.Add(new AutomationResult(currentTestName, assertions));
                }

                playbackComplete = true;
                assertions = null;
                return false; // Done playing back.
            }

            TextEditorCommand command = editorCommands[commandIndex];
            int commandInterval = (int)command.IntervalTime;
            commandInterval = ((commandInterval > 220) ? 220 : commandInterval);
            playbackTimer.Interval = TimeSpan.FromMilliseconds(commandInterval);
            bool result = textEditorCore.PlaybackCommand(command);

            PlaybackVisualizer.Instance.SetCurrentCommand(command);

            switch (command.MethodName)
            {
                case TextEditorCommand.Method.LoadScriptFromFile:
                    if (!result)
                    {
                        assertions = new List<AssertionResult>();
                        assertions.Add(new AssertionResult("Fail", "0", "Invalid path! Cannot load script!"));
                        if (null == testResults)
                            testResults = new List<AutomationResult>();
                        testResults.Add(new AutomationResult(currentTestName, assertions));
                        playbackComplete = true;
                        assertions = null;
                        TextEditorCommand closeScriptCommand = new TextEditorCommand(TextEditorCommand.Method.CloseScript);
                        closeScriptCommand.AppendArgument(0);
                        int scriptCount = textEditorControl.ScriptTabControl.TabCount;
                        bool closeScriptResult = textEditorCore.PlaybackCommand(closeScriptCommand);
                        while (--scriptCount != 0)
                            closeScriptResult = textEditorCore.PlaybackCommand(closeScriptCommand);
                        textEditorControl.ScriptTabControl.CloseAllTabs();
                        textEditorControl.ShowTabControls(false);

                        return false; // Exit playback.
                    }
                    textEditorControl.SetupTabInternal(command.Arguments[0] as string);
                    break;

                case TextEditorCommand.Method.CreateNewScript:
                    textEditorControl.SetupTabInternal(null);
                    break;

                case TextEditorCommand.Method.CloseScript:
                    textEditorControl.PlaybackCloseTab((int)command.Arguments[0]);
                    break;

                case TextEditorCommand.Method.ChangeScript:
                    textEditorControl.PlaybackSwitchTab((int)command.Arguments[0]);
                    break;

                case TextEditorCommand.Method.Step:
                    textEditorControl.UpdateUiForStepNext(result);
                    break;

                case TextEditorCommand.Method.Run:
                    textEditorControl.UpdateUiForRun(result);
                    break;

                case TextEditorCommand.Method.Stop:
                    textEditorControl.UpdateUiForStop(result);
                    break;
            }

            textEditorControl.UpdateScriptDisplay(Solution.Current.ActiveScript);
            textEditorControl.UpdateCaretPosition();

            if (null != command.Asserts)
                DoAssertions(command.Asserts);

            return true;
        }
예제 #3
0
        private void OnDispatchTimer()
        {
            using (BinaryReader binaryReader = new BinaryReader(File.Open(currentFilePath, FileMode.Open)))
            {
                int pos = 0;
                int streamLength = (int)binaryReader.BaseStream.Length;

                while (pos < streamLength)
                {
                    Action.ActionType actionType = (Action.ActionType)binaryReader.ReadInt32();
                    int actionLength = binaryReader.ReadInt32();
                    byte[] actionData = binaryReader.ReadBytes(actionLength);
                    int lengthOfOneAction = sizeof(Action.ActionType) + sizeof(int) + actionLength;

                    switch (actionType)
                    {
                        case Action.ActionType.OpenFile:
                            string filePath = Encoding.UTF8.GetString(actionData);
                            command = new TextEditorCommand(TextEditorCommand.Method.LoadScriptFromFile);
                            command.AppendArgument(filePath);
                            textEditorCore.PlaybackCommand(command);
                            textEditorControl.SetupTabInternal(filePath);
                            break;

                        case Action.ActionType.InsertKeyword:
                            string keyword = Encoding.UTF8.GetString(actionData);
                            command = new TextEditorCommand(TextEditorCommand.Method.InsertText);
                            command.AppendArgument(keyword);
                            textEditorCore.PlaybackCommand(command);
                            break;

                        case Action.ActionType.InsertSymbol:
                            char symbol = BitConverter.ToChar(actionData, 0);
                            command = new TextEditorCommand(TextEditorCommand.Method.InsertText);
                            command.AppendArgument(symbol);
                            textEditorCore.PlaybackCommand(command);
                            break;

                        case Action.ActionType.InsertUnicode:
                            string unicodeChar = Encoding.UTF8.GetString(actionData);
                            command = new TextEditorCommand(TextEditorCommand.Method.InsertText);
                            command.AppendArgument(unicodeChar);
                            textEditorCore.PlaybackCommand(command);
                            break;

                        case Action.ActionType.Navigate:
                            Key navigationKey = (Key)BitConverter.ToInt32(actionData, 0);
                            command = new TextEditorCommand(TextEditorCommand.Method.DoNavigation);
                            command.AppendArgument(navigationKey);
                            textEditorCore.PlaybackCommand(command);
                            break;

                        case Action.ActionType.Delete:
                            Key deletionKey = (Key)BitConverter.ToInt32(actionData, 0);
                            command = new TextEditorCommand(TextEditorCommand.Method.DoControlCharacter);
                            command.AppendArgument(deletionKey);
                            textEditorCore.PlaybackCommand(command);
                            break;
                    }

                    pos += lengthOfOneAction;
                }

                textEditorControl.UpdateScriptDisplay(Solution.Current.ActiveScript);
                textEditorControl.UpdateCaretPosition();
            }
        }
예제 #4
0
        private void OnDispatchTimerTick(object sender, EventArgs e)
        {
            if (streamReader == null)
            {
                // All files are done
                if (madTypingCurrentFile == fileList.Length)
                {
                    dispatchTimer.Stop();
                    textEditorCore.EnableRegularCommands = true;
                    return;
                }
                else
                {
                    // Get next file
                    string testFile = fileList.ElementAt(madTypingCurrentFile++);
                    streamReader = new StreamReader(testFile);
                    // Create new script
                    command = new TextEditorCommand(TextEditorCommand.Method.CreateNewScript);
                    textEditorCore.PlaybackCommand(command);
                    // Activate script
                    textEditorControl.SetupTabInternal(null);
                    command = new TextEditorCommand(TextEditorCommand.Method.ChangeScript);
                    command.AppendArgument(0);
                    textEditorCore.PlaybackCommand(command);
                    textEditorControl.HandleScriptActivation();
                    textEditorControl.UpdateScriptDisplay(Solution.Current.ActiveScript);
                    textEditorControl.UpdateCaretPosition();
                }
            }

            if (streamReader.Peek() >= 0)
            {
                // Insert characters
                command = new TextEditorCommand(TextEditorCommand.Method.InsertText);
                command.AppendArgument((char)streamReader.Read());
                textEditorCore.PlaybackCommand(command);

            }
            else
            {
                // Close script
                command = new TextEditorCommand(TextEditorCommand.Method.CloseScript);
                command.AppendArgument(0);
                textEditorCore.PlaybackCommand(command);
                textEditorControl.PlaybackCloseTab(0);
                command = new TextEditorCommand(TextEditorCommand.Method.ChangeScript);
                command.AppendArgument(0);
                textEditorCore.PlaybackCommand(command);
                textEditorControl.HandleScriptActivation();
                streamReader = null;

            }

            textEditorControl.UpdateScriptDisplay(Solution.Current.ActiveScript);
            textEditorControl.UpdateCaretPosition();
            random = new Random();
            dispatchTimer.Interval = TimeSpan.FromMilliseconds(random.Next(minTime, maxTime));
        }
예제 #5
0
        private void MadTypistBeingMad()
        {
            textEditorCore.EnableRegularCommands = false;
            // Close the default script that is open
            command = new TextEditorCommand(TextEditorCommand.Method.CloseScript);
            command.AppendArgument(0);
            textEditorCore.PlaybackCommand(command);
            textEditorControl.PlaybackCloseTab(0);
            command = new TextEditorCommand(TextEditorCommand.Method.ChangeScript);
            command.AppendArgument(0);
            textEditorCore.PlaybackCommand(command);
            textEditorControl.HandleScriptActivation();
            dispatchTimer = new DispatcherTimer();
            dispatchTimer.Tick += new EventHandler(OnDispatchTimerTick);

            fileList = Directory.GetFiles(filePath,
                                    "*.ds", SearchOption.AllDirectories);
            dispatchTimer.Start();
        }