public Tester(bool testDs, bool testRNT, bool testRSE, bool testBpl, string lsf) { testDesugar = testDs; testRemoveNT = testRNT; testRemoveSE = testRSE; testBoogie = testBpl; if (lsf != null) { listFile = lsf; } if (!File.Exists(listFile)) { throw new FileNotFoundException(listFile + " not found!"); } if (testDesugar || testRemoveNT || testRemoveSE) { string pciPath = Path.Combine("..", "P", "Bld", "Drops", "Debug", "x86", "Binaries", "Pci.exe"); if (!File.Exists(pciPath)) { throw new Exception("Pci not found!"); } pciProcess = new PciProcess(pciPath); } if (testBoogie && !File.Exists(corralPath)) { throw new Exception("Corral not found!"); } }
void Run() { try { // this should be the script directory. var tstDir = new DirectoryInfo(Environment.CurrentDirectory); if (!File.Exists(Path.Combine(tstDir.FullName, "testP.bat"))) { // Hmmm, we might be debugging the app, so lets see if we can find the tstDir. Uri uri = new Uri(tstDir.FullName); // D:\git\P\Bld\Drops\Debug\x64\Binaries if (uri.Segments.Length > 5 && string.Compare(uri.Segments[uri.Segments.Length - 1], "Binaries", StringComparison.OrdinalIgnoreCase) == 0 && string.Compare(uri.Segments[uri.Segments.Length - 5], "Bld/", StringComparison.OrdinalIgnoreCase) == 0) { Uri resolved = new Uri(uri, @"..\..\..\..\Tst"); tstDir = new DirectoryInfo(resolved.LocalPath); } } testRoot = tstDir.FullName; if (execsToRun == null) { execsToRun = "/runAll"; } //tstDir is where testP.bat is located List <DirectoryInfo> activeDirs; if (testFilePath == null) { Console.WriteLine("Warning: no test directories file provided; running all tests under {0}", tstDir.FullName); activeDirs = new List <DirectoryInfo>(); activeDirs.Add(tstDir); } else { activeDirs = ExtractActiveDirsFromFile(testFilePath, tstDir); if (activeDirs == null) { Console.WriteLine("Failed to run tests: directory name(s) in the test directories file are in a wrong format"); Environment.ExitCode = FailCode; return; } if (activeDirs.Count == 0) { Console.WriteLine("Failed to run tests: no tests in the test directories file"); Environment.ExitCode = FailCode; return; } //Type-check list of test dirs: //Check that test dirs do not contain paths to Pc/Zing/Prt: bool result = CheckTopPaths(activeDirs); if (!result) { return; } //Check other rules recursively: result = CheckTestDirs(activeDirs); if (!result) { return; } } foreach (DirectoryInfo di in activeDirs) { if (!di.Exists) { Console.WriteLine("Failed to run tests: directory {0} does not exist", di.FullName); Environment.ExitCode = FailCode; return; } } Console.WriteLine("Running tests"); int testCount = 0, failCount = 0; StreamWriter failedTestsWriter = null; StreamWriter failedTestsToResetWriter = null; StreamWriter tempWriter = null; StreamReader tempReader = null; StreamWriter displayDiffsWriter = null; //If reset = false, replace old "failed-tests.txt" and "display-diffs.bat" with newly created files: if (!reset) { if (File.Exists(Path.Combine(Environment.CurrentDirectory, FailedTestsFile))) { File.Delete(Path.Combine(Environment.CurrentDirectory, FailedTestsFile)); } if (File.Exists(Path.Combine(Environment.CurrentDirectory, FailedTestsToResetFile))) { File.Delete(Path.Combine(Environment.CurrentDirectory, FailedTestsToResetFile)); } if (File.Exists(Path.Combine(Environment.CurrentDirectory, "tempReset.txt"))) { File.Delete(Path.Combine(Environment.CurrentDirectory, "tempReset.txt")); } if (File.Exists(Path.Combine(Environment.CurrentDirectory, DisplayDiffsFile))) { File.Delete(Path.Combine(Environment.CurrentDirectory, DisplayDiffsFile)); } if (!OpenSummaryStreamWriter(FailedTestsFile, out failedTestsWriter)) { throw new Exception("Cannot open failed-tests.txt for writing"); } if (!OpenSummaryStreamWriter(FailedTestsToResetFile, out failedTestsToResetWriter)) { throw new Exception("Cannot open failed-tests-to-reset.txt for writing"); } if (!OpenSummaryStreamWriter("tempReset.txt", out tempWriter)) { throw new Exception("Cannot open tempReset.txt for writing"); } if (!OpenSummaryStreamWriter(DisplayDiffsFile, out displayDiffsWriter)) { throw new Exception("Cannot open display-diffs.bat for writing"); } } string executingProcessDirectoryName = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName); string pciFilePath = Path.Combine(executingProcessDirectoryName, "Pci.exe"); if (!File.Exists(pciFilePath)) { Console.WriteLine("Cannot find pci.exe"); return; } pciProcess = new PciProcess(pciFilePath); Test(activeDirs, reset, cooperative, execsToRun, ref testCount, ref failCount, failedTestsWriter, tempWriter, displayDiffsWriter); pciProcess.Shutdown(); Console.WriteLine(); Console.WriteLine("Total tests: {0}, Passed tests: {1}, Failed tests: {2}", testCount, testCount - failCount, failCount); if (failCount > 0) { if (!CloseSummaryStreamWriter("tempReset.txt", tempWriter)) { throw new Exception("Cannot close tempReset.txt"); } //open the reader (from the same file): if (!OpenSummaryStreamReader("tempReset.txt", out tempReader)) { throw new Exception("Cannot open tempReset.txt for reading"); } RemoveDupTests(failedTestsToResetWriter, tempReader); if (!CloseSummaryStreamWriter(FailedTestsFile, failedTestsWriter)) { throw new Exception("Cannot close failed-tests.txt"); } if (!CloseSummaryStreamWriter(FailedTestsToResetFile, failedTestsToResetWriter)) { throw new Exception("Cannot close failed-tests-for-reset.txt"); } if (!CloseSummaryStreamReader("tempReset.txt", tempReader)) { throw new Exception("Cannot close tempReset.txt"); } File.Delete(Path.Combine(Environment.CurrentDirectory, "tempReset.txt")); if (!CloseSummaryStreamWriter(DisplayDiffsFile, displayDiffsWriter)) { throw new Exception("Cannot close display-diffs.bat"); } Environment.ExitCode = FailCode; Console.WriteLine("List of all failed subtests: failed-tests.txt"); Console.WriteLine("List of all failed tests (to use for reset): failed-tests-for-reset.txt"); Console.WriteLine("To run kdiff3 on outputs for all failed tests: run display-diffs.bat"); } } catch (Exception e) { Console.WriteLine("Failed to run tests - {0}", e.Message); Environment.ExitCode = FailCode; } }