So I'll start from the beginning and try to give all the code and screenshots. So the post is gonna be long, I'm sorry.
Here's the function I'm calling:
public void RunTests(string[] tsts) { //report folder will be prepared regardless of if it's UI mode or not. //the report will be shown at the end of a run of any set of tests. string reportPath = Path.Combine(Application.StartupPath, "Reports"); string date = System.DateTime.Now.Month + "-" + System.DateTime.Now.Day + "-" + System.DateTime.Now.Year +"-" + System.DateTime.Now.Hour + "-" + System.DateTime.Now.Minute + "-" + System.DateTime.Now.Second; CurrentReportFolder = Directory.CreateDirectory(Path.Combine(reportPath, date)); File.Copy(Path.Combine(Application.StartupPath, "RanorexReport3.png"), Path.Combine(CurrentReportFolder.FullName, "RanorexReport3.png"), true); File.Copy(Path.Combine(Application.StartupPath, "AVLLogo.png"), Path.Combine(CurrentReportFolder.FullName, "AVLLogo.png"), true); File.Copy(Path.Combine(Application.StartupPath, "AVLReportTemplate.xsl"), Path.Combine(CurrentReportFolder.FullName, "AVLReportTemplate.xsl"), true); string reportFilePath = Path.Combine(CurrentReportFolder.FullName, "AutomatedTestsReport.xml"); // Report.Setup(ReportLevel.Info, Path.Combine(CurrentReportFolder.FullName, "AutomatedTestsReport.xml"), true); TestReport.Setup(ReportLevel.Info, Path.Combine(CurrentReportFolder.FullName, "AutomatedTestsReport.xml"), true); TestReport.StyleSheetFilename = Path.Combine(CurrentReportFolder.FullName, "AVLReportTemplate.xsl"); TestReport.ReportWriteInterval = 0; TestReport.BeginTestSuite("Automated Tests"); foreach (string item in tsts) { foreach (AutomatedTest tst in LoadedTests) { string itemWithoutTestcases = item.Remove(item.IndexOf(" (")); if (itemWithoutTestcases == tst.Name) { // Assembly assemblyToRun; //assemblyToRun = GetAssemblyByID(tst[0].ToString()); if (tst.CompiledAssembly == null) return; Type[] types = tst.CompiledAssembly.GetTypes(); foreach (Type t in types) { foreach (object attribute in t.GetCustomAttributes(true)) { Type a = attribute.GetType(); if (a.Name == "ClassInfoAttribute") { object instance = Activator.CreateInstance(t); MethodInfo meth = t.GetMethod("StartTest"); if (meth != null) { string codeFileInRuntime = Path.Combine(Application.StartupPath, Path.GetFileName(tst.Path)); if (File.Exists(codeFileInRuntime)) File.SetAttributes(Path.Combine(Application.StartupPath, Path.GetFileName(tst.Path)), FileAttributes.Normal); if (tst.Path != Path.Combine(Application.StartupPath, Path.GetFileName(tst.Path))) //will crash if it's the same file File.Copy(tst.Path, Path.Combine(Application.StartupPath, Path.GetFileName(tst.Path)), true); TestReport.BeginTestCase(item); try { object retVal = meth.Invoke(instance, null); if ((int)retVal == 1) TestPassedActions(tst); else TestFailedActions(tst); } catch (Exception e) { if (e.InnerException != null) { WriteLog(e.InnerException.Message); //if in the test case file, the user started a test module, but it didn't finish due to an exception within the test //we'll finish it here to preserve the report integrity if (TestReport.CurrentTestModuleActivity != null) { Report.Failure(e.InnerException.Message); TestReport.EndTestModule(); } TestFailedActions(tst); } } TestReport.EndTestCase(); } else { WriteLog("Couldn't locate entry point in the loaded test."); if (this.UImode) MessageBox.Show("Couldn't locate entry point in the loaded test.\r\n Make sure your test contains a StartTest method returning 1 for success and 0 for failure."); } } } } } } } TestReport.SaveReport(); Process htmlInDefaultBrowser = new Process(); htmlInDefaultBrowser.StartInfo.UseShellExecute = true; htmlInDefaultBrowser.StartInfo.FileName = Path.Combine(CurrentReportFolder.FullName, "AutomatedTestsReport.xml"); htmlInDefaultBrowser.Start(); SetTestsRunning(false); //ActivityStack.Clear(); }I edit the test code that I load to succeed (return 1) and call this function. At this point I'm seeing the correct report at the end.
Then I edit my test code to fail (return 0) and call this function again (without unloading my test script exe). Here's when things become interesting, the ActivityStack looks correct: However, when I press F5 to continue, here's what is shown in the report: Now if I uncomment the ActivityStack.Clear(); line at the end of the function, call it once (see the correct report), then call it again and see the following:
I was fighting with this thing for several days now, and it's probably something insanely simple. Can anyone stick my face into what I'm doing wrong?