internal static object Rewrite(string absoluteSourceDir, string absoluteBinary, Options options, bool alwaysCapture = false) { string referencedir; if (Path.IsPathRooted(options.ReferencesFramework)) { referencedir = options.ReferencesFramework; } else { referencedir = options.MakeAbsolute(Path.Combine(ReferenceDirRoot, options.ReferencesFramework)); } var contractreferencedir = options.MakeAbsolute(Path.Combine(ContractReferenceDirRoot, options.ContractFramework)); var absoluteSourcedir = Path.GetDirectoryName(absoluteBinary); var absoluteSource = absoluteBinary; var libPathsString = FormLibPaths(absoluteSourceDir, contractreferencedir, options); var targetName = options.TestName + ".rw" + Path.GetExtension(absoluteBinary); var binDir = options.UseBinDir ? Path.Combine(Path.Combine(absoluteSourcedir, "bin"), options.BuildFramework) : absoluteSourcedir; var targetfile = Path.Combine(binDir, targetName); Console.WriteLine("Rewriting '{0}' to '{1}'", absoluteBinary, targetfile); if (!Directory.Exists(binDir)) { Directory.CreateDirectory(binDir); } var optionString = String.Format("/out:{0} -nobox -libpaths:{3} {4} {1} {2}", targetfile, options.FoxtrotOptions, absoluteSource, referencedir, libPathsString); if (absoluteBinary.EndsWith("mscorlib.dll")) optionString = String.Format("/platform:{0} {1}", absoluteBinary, optionString); var capture = RunProcessAndCapture(binDir, options.GetFullExecutablePath(FoxtrotExe), optionString, options.TestName); if (capture.ExitCode != 0) { if (options.MustSucceed) { Assert.AreEqual(0, capture.ExitCode, "{0} returned an errorcode of {1}.", FoxtrotExe, capture.ExitCode); } return capture; } else { if (alwaysCapture) return capture; if (options.UseBinDir) { var fileName = Path.Combine(absoluteSourcedir, targetName); if (File.Exists(fileName)) { try { File.SetAttributes(fileName, FileAttributes.Normal); } catch { } } File.Copy(targetfile, fileName, true); return fileName; } } return targetfile; }
internal static void Clousot1Slicing(string absoluteSourceDir, string absoluteBinary, Options options, Output output) { var referencedir = options.MakeAbsolute(Path.Combine(ReferenceDirRoot, options.BuildFramework)); var contractreferencedir = options.MakeAbsolute(Path.Combine(ContractReferenceDirRoot, options.ContractFramework)); var absoluteBinaryDir = Path.GetDirectoryName(absoluteBinary); var absoluteSource = absoluteBinary; var libPathsString = FormLibPaths(contractreferencedir, options) + " /libpaths:."; var args = String.Format("{0} -cci1 /regression /define:cci1only;clousot1 -framework:{4} -libpaths:{2} {3} {1}", options.ClousotOptions, absoluteSource, referencedir, libPathsString, options.Framework); if (options.Fast || System.Diagnostics.Debugger.IsAttached) { output.WriteLine("Calling NewCCI2Driver.Main with: {0}", args); // Use output to avoid Clousot from closing the Console Assert.AreEqual(0, Microsoft.Research.CodeAnalysis.NewCCI2Driver.Main(args.Split(' '), output)); } else RunProcess(absoluteBinaryDir, options.GetFullExecutablePath(Clousot2SlicingExe), args, output); }
internal static void Clousot1Slicing(string absoluteSourceDir, string absoluteBinary, Options options, Output output) { var referencedir = options.MakeAbsolute(Path.Combine(ReferenceDirRoot, options.BuildFramework)); var contractreferencedir = options.MakeAbsolute(Path.Combine(ContractReferenceDirRoot, options.ContractFramework)); var absoluteBinaryDir = Path.GetDirectoryName(absoluteBinary); var absoluteSource = absoluteBinary; var libPathsString = FormLibPaths(contractreferencedir, options) + " /libpaths:."; var args = String.Format("{0} -cci1 /regression /define:cci1only;clousot1 -framework:{4} -libpaths:{2} {3} {1}", options.ClousotOptions, absoluteSource, referencedir, libPathsString, options.Framework); if (options.Fast || System.Diagnostics.Debugger.IsAttached) { output.WriteLine("Calling NewCCI2Driver.Main with: {0}", args); // Use output to avoid Clousot from closing the Console Assert.AreEqual(0, Microsoft.Research.CodeAnalysis.NewCCI2Driver.Main(args.Split(' '), output)); } else { RunProcess(absoluteBinaryDir, options.GetFullExecutablePath(Clousot2SlicingExe), args, output); } }
internal static void Clousot(string absoluteSourceDir, string absoluteBinary, Options options, string testName, int testindex, Output output) { var referencedir = options.MakeAbsolute(Path.Combine(ReferenceDirRoot, options.BuildFramework)); var contractreferencedir = options.MakeAbsolute(Path.Combine(ContractReferenceDirRoot, options.ContractFramework)); var absoluteBinaryDir = Path.GetDirectoryName(absoluteBinary); var absoluteSource = absoluteBinary; var libPathsString = FormLibPaths(contractreferencedir, options); var args = string.Format("{0} /regression /define:cci1only;clousot1 -framework:{4} -libpaths:{2} {3} {1}", options.ClousotOptions, absoluteSource, referencedir, libPathsString, options.Framework); WriteRSPFile(absoluteBinaryDir, testName, args); if (options.Fast || Debugger.IsAttached) { output.WriteLine("Calling CCI1Driver.Main with: {0}", args); // Use output to avoid Clousot from closing the Console Assert.Equal(0, Microsoft.Research.CodeAnalysis.CCI1Driver.Main(args.Split(' '), output)); } else { RunProcess(absoluteBinaryDir, options.GetFullExecutablePath(ClousotExe), args, output, testName); } }
internal static object Rewrite(ITestOutputHelper testOutputHelper, string absoluteSourceDir, string absoluteBinary, Options options, bool alwaysCapture = false) { string referencedir; if (Path.IsPathRooted(options.ReferencesFramework)) { referencedir = options.ReferencesFramework; } else { referencedir = options.MakeAbsolute(Path.Combine(ReferenceDirRoot, options.ReferencesFramework)); } var contractreferencedir = options.MakeAbsolute(Path.Combine(ContractReferenceDirRoot, options.ContractFramework)); var absoluteSourcedir = Path.GetDirectoryName(absoluteBinary); var absoluteSource = absoluteBinary; var libPathsString = FormLibPaths(absoluteSourceDir, contractreferencedir, options); var targetName = options.TestName + ".rw" + Path.GetExtension(absoluteBinary); var binDir = options.UseBinDir ? Path.Combine(Path.Combine(absoluteSourcedir, "bin"), options.BuildFramework) : absoluteSourcedir; var targetfile = Path.Combine(binDir, targetName); testOutputHelper.WriteLine("Rewriting '{0}' to '{1}'", absoluteBinary, targetfile); if (!Directory.Exists(binDir)) { Directory.CreateDirectory(binDir); } var optionString = String.Format("/out:{0} -nobox -libpaths:{3} {4} {1} {2}", targetfile, options.FoxtrotOptions, absoluteSource, referencedir, libPathsString); if (absoluteBinary.EndsWith("mscorlib.dll")) { optionString = String.Format("/platform:{0} {1}", absoluteBinary, optionString); } var capture = RunProcessAndCapture(testOutputHelper, binDir, options.GetFullExecutablePath(FoxtrotExe), optionString, options.TestName); if (capture.ExitCode != 0) { if (options.MustSucceed) { if (capture.ExitCode != 0) { testOutputHelper.WriteLine(""); } Assert.Equal(0, capture.ExitCode); } return(capture); } else { if (alwaysCapture) { return(capture); } if (options.UseBinDir) { var fileName = Path.Combine(absoluteSourcedir, targetName); if (File.Exists(fileName)) { try { File.SetAttributes(fileName, FileAttributes.Normal); } catch { } } File.Copy(targetfile, fileName, true); return(fileName); } } return(targetfile); }