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); } }
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; }
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(); } }
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)); }
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(); }