Exemplo n.º 1
0
        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!");
            }
        }
Exemplo n.º 2
0
        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;
            }
        }