public void ProcessWikiCommands(string[] wikiCommands, List<BreakPoint> breakPoints, System.Threading.Thread activeThread, CommandEditorPage currentPage, bool commandLineMode, List<CommandResult> listOfResults, string fileName) { bool inComment = false; string cleanedCommand = ""; foreach (string wikiCommand in wikiCommands) { lineNumber++; Command mngrCommand = new Command(wikiCommand.TrimStart('|')); cleanedCommand = cleanCommand(wikiCommand); if (breakPoints.Count > 0) CheckForBreakPointOnLine(breakPoints, lineNumber, activeThread, currentPage); CommandResult returnResult = new CommandResult(); returnResult.FileName = fileName; returnResult.LineNumber = lineNumber; returnResult.FullCommand = mngrCommand.FullCommand; listOfResults.Add(returnResult); if (cleanedCommand.Equals(String.Empty)) { if (_finishBlockOnFailure) { TestManager.FinishBlockOnFailure = true; _finishBlockOnFailure = false; } TestManager.ResetForNewTable(); } if (!cleanedCommand.StartsWith("#") && !inComment && !cleanedCommand.StartsWith("{{{") && !cleanedCommand.StartsWith("}}}") && !isIgnoredCommand(cleanedCommand) && !TestManager.InCompareData) { if (cleanedCommand.StartsWith("!")) { if (cleanedCommand.StartsWith("!define")) { try { cleanedCommand = replaceVar(cleanedCommand); } catch (SWATVariableDoesNotExistException e) { returnResult.Success = false; mngrCommand.Passed = false; returnResult.Message = e.Message; returnResult.Command = "Could not be defined"; TestManager.LogCommand(mngrCommand); goto Exit; } WikiVariable var = new WikiVariable(cleanedCommand); if (!_variables.ContainsKey(var.Name)) _variables.Add(var.Name, var.Value); else _variables[var.Name] = var.Value; returnResult.Success = true; returnResult.Command = string.Format("Defined {0} as {1}", var.Name, var.Value); } if (cleanedCommand.StartsWith("!include")) { WikiInclude include = new WikiInclude(cleanedCommand); try { string newFileName = SWAT.FitnesseSettings.FitnesseRootDirectory.TrimEnd('\\') + "\\" + include.FilePath + "content.txt"; string[] lines = File.ReadAllLines(newFileName); //Need an intermediate slot in the results. returnResult.Command = "INCLUDE"; returnResult.FullCommand = cleanedCommand; returnResult.Success = true; returnResult.Ignored = false; ProcessWikiCommands(lines, breakPoints, activeThread, currentPage, commandLineMode, returnResult.Children, newFileName); } catch (DirectoryNotFoundException) { returnResult.Success = false; returnResult.Ignored = false; returnResult.Message = string.Format("Could not load macro at {0}", SWAT.FitnesseSettings.FitnesseRootDirectory.TrimEnd('\\') + "\\" + include.FilePath); returnResult.Command = "INCLUDE"; } } } else { //string[] sections = cleanedCommand.TrimStart('|').TrimEnd('|').Split('|'); // Remove leading pipes cleanedCommand = cleanedCommand.TrimStart('|'); // Remove last pipe. Can't use TrimEnd('|') in case we are passing empty parameters string[] sections = parseSections(cleanedCommand.Substring(0, cleanedCommand.LastIndexOf('|'))); StringCollection parameters = new StringCollection(); if (sections.Length < 1) { returnResult.Success = false; returnResult.Message = "Command is not formated correctly."; returnResult.Command = cleanedCommand; goto Exit; } string command = sections[0]; returnResult.Command = command; for (int i = 1; i < sections.Length; i++) { string replace = ""; try { replace = replaceVar(sections[i]); } catch (SWATVariableDoesNotExistException e) { parameters.Add(sections[i]); var paramEntryex = new CommandResult.ParameterEntry { OriginalParam = sections[i], ReplacedParam = sections[i] }; returnResult.Parameters.Add(paramEntryex); returnResult.Success = false; mngrCommand.Passed = false; returnResult.Message = e.Message; TestManager.LogCommand(mngrCommand); goto Exit; } parameters.Add(replace); var paramEntry = new CommandResult.ParameterEntry { OriginalParam = sections[i], ReplacedParam = replace }; returnResult.Parameters.Add(paramEntry); } if (TestManager.ShouldExecute(mngrCommand)) { try { string varKey = ""; if (command == "GetElementAttribute") { varKey = parameters[3]; parameters.RemoveAt(3); } if (command == "GetConfigurationItem") { varKey = parameters[1]; parameters.RemoveAt(1); } if (command.Contains("GetDbRecord") || command.Contains("GetDbDate") || command.Contains("GetLocation") || command.Contains("GetWindowTitle") || command.Contains("RunScriptSaveResult") || command.Contains("SetVariable") || command.StartsWith("GetSavedDbDate") || command == "GetTimerValue") { varKey = parameters[0]; parameters.RemoveAt(0); } if(command == "BeginCompareData") { TestManager.InCompareData = true; _inCompareDataIndex = 0; TestManager.InCompareDataIsCritical = false; } InvokeResult result = _invokeManager.Invoke(command, parameters); if (mngrCommand.IsInverse) { returnResult.Success = !result.Success; mngrCommand.Passed = !result.Success; } else { returnResult.Success = result.Success; mngrCommand.Passed = result.Success; } if (!mngrCommand.Passed && mngrCommand.FinishBlockOnFailure) { _finishBlockOnFailure = true; } returnResult.Cond = wikiCommand.StartsWith("|?"); //Notify the user on success. if (result.Success) { //If original command failed, now passes with inverse modifier if (mngrCommand.IsInverse) returnResult.Message = "Inverse modifier failed passing command"; else returnResult.Message = "Success"; //C# Operator == is overloaded, so Equals() method is called when used. That is why it can be used to compare Strings. if ((command == "GetElementAttribute" || command.Contains("GetDbRecord") || command == "GetDbDate" || command == "GetLocation" || command == "GetConfigurationItem") || command == "GetWindowTitle" || command == "RunScriptSaveResult" || command == "SetVariable" || command.StartsWith("GetSavedDbDate") || command == "GetTimerValue") { if (_variables.ContainsKey(varKey.ToString())) { _variables.Remove(varKey); } _variables.Add(varKey, result.ReturnValue); } if (command == "DisplayVariable" || command == "DisplayTimerValue") { returnResult.Parameters[0].ReplacedParam = result.ReturnValue; } } if (!result.Success) { if (mngrCommand.IsInverse) returnResult.Message = "Success - Inverse modifier passed failing command. Original error message: " + result.FailureMessage; else returnResult.Message = result.FailureMessage; } } catch (Exception e) { returnResult.Success = false; returnResult.Message = e.Message; if (mngrCommand.Passed && mngrCommand.FinishBlockOnFailure) { _finishBlockOnFailure = true; } } } else { returnResult.Ignored = true; returnResult.ModIgn = true; } TestManager.LogCommand(mngrCommand); } } else if (TestManager.InCompareData) { cleanedCommand = cleanCommand(wikiCommand); cleanedCommand = cleanedCommand.TrimStart('|'); string[] sections = parseSections(cleanedCommand.Substring(0, cleanedCommand.LastIndexOf('|'))); // 1. if endCompareData if (wikiCommand.Contains("EndCompareData")) { returnResult.Command = "EndCompareData"; returnResult.Success = true; mngrCommand.Passed = true; returnResult.Message = "Success"; TestManager.LogCommand(mngrCommand); TestManager.InCompareData = false; } else { //StringCollection rowParameters = new StringCollection(); for (int i = 0; i < sections.Length; i++) { string replace = ""; replace = replaceVar(sections[i]); //rowParameters.Add(replace); var paramEntry = new CommandResult.ParameterEntry { OriginalParam = sections[i], ReplacedParam = replace }; returnResult.Parameters.Add(paramEntry); } // 2. if _inCompareDataIndex = 0 we are reading the columns if (_inCompareDataIndex == 0) { _compareDatafieldNames = new List<string>(); for (int colIndex = 0; colIndex < returnResult.Parameters.Count; colIndex++) { _compareDatafieldNames.Add(returnResult.Parameters[colIndex].ReplacedParam); } } // 3. otherwise we are now looking at actual row of data else { for (int colIndex = 0; colIndex < _compareDatafieldNames.Count; colIndex++) { StringCollection parameters = new StringCollection(); int dataRowIndex = _inCompareDataIndex - 1; parameters.Add(dataRowIndex.ToString()); parameters.Add(_compareDatafieldNames[colIndex]); parameters.Add(returnResult.Parameters[colIndex].ReplacedParam); InvokeResult result = _invokeManager.Invoke("AssertRecordValuesByColumnName", parameters); if (!result.Success) returnResult.Message = result.FailureMessage; returnResult.CompareDataResults.Add(result.Success.ToString()); } } _inCompareDataIndex++; } } else { returnResult.Ignored = true; returnResult.ModIgn = false; if (wikiCommand.StartsWith("{{{")) inComment = true; if (wikiCommand.EndsWith("}}}")) inComment = false; } Exit: if (!commandLineMode) CommandProcessed(returnResult); } }
//DDE mode public List<CommandResult> ProcessWikiCommands(string fileName, string[] wikiCommands, System.Threading.Thread activeThread, CommandEditorPage currentPage) { List<CommandResult> listOfResults = new List<CommandResult>(); lineNumber = 0; ProcessWikiCommands(wikiCommands, new List<BreakPoint>(), activeThread, currentPage, false, listOfResults, fileName); return listOfResults; }
public void ProcessWikiCommands(string[] wikiCommands, List<BreakPoint> breakPoints, System.Threading.Thread activeThread, CommandEditorPage currentPage) { lineNumber = 0; ProcessWikiCommands(wikiCommands, breakPoints, activeThread, currentPage, false, new List<CommandResult>(), string.Empty); }
public void CheckForBreakPointOnLine(List<BreakPoint> breakPoints, int lineNumber, System.Threading.Thread activeThread, CommandEditorPage currentPage) { for (int i = 0; i < breakPoints.Count; i++) { if (breakPoints[i].BPLineNumber == lineNumber && breakPoints[i].BPActive) { currentPage.EnableCurrentBreakPoint(lineNumber); //currentPage.getEditor().EnableSelectedLine(lineNumber); breakPoints[i].PauseForBreakPoint(activeThread); currentPage.DisableCurrentBreakPoint(lineNumber, "normal"); return; } } if (breakPoints[breakPoints.Count - 1].TempBP) { breakPoints.RemoveAt(breakPoints.Count - 1); currentPage.EnableCurrentBreakPoint(lineNumber); //currentPage.getEditor().EnableSelectedLine(lineNumber); breakPoints[0].PauseForBreakPoint(activeThread); currentPage.DisableCurrentBreakPoint(lineNumber, "temp"); return; } }