static void Main(string[] args) { var escapeDirPath = new Func <string, string>(x => x.Replace("\\", "\\\\")); var findArg = new Func <string, string> (x => { string res = null; var prefix = "/" + x + ":"; args.Where(s => s.StartsWith(prefix)) .ToList() .ForEach(s => res = escapeDirPath(s.Substring(prefix.Length))); return(res); }); if (args.Any(s => s == "/break")) { System.Diagnostics.Debugger.Launch(); } if (args.Any(s => s == "/hideAnnotTextarea")) { Options.hideAnnotTextarea = true; } if (args.Any(s => s == "/onlyConsiderFailingLocation")) { Options.onlyConsiderFailingLocation = true; } if (args.Any(s => s == "/considerFailingStackTrace")) { Options.considerFailingStackTrace = true; } var help = false; if (args.Any(s => s == "/?")) { help = true; } var currDir = findArg("dir"); var srcPath = findArg("srcPath"); var baseDir = findArg("baseline"); Options.defectViewerDir = findArg("defectViewerDir"); if (help || currDir == null || srcPath == null || Options.defectViewerDir == null) { Console.WriteLine("Usage: AvnResultDashboard /dir:<path-to-avn-result> /srcPath:<path-to-sources> /defectViewerDir:<path-to-view.cmd> [/? /break /hideAnnotTextarea /baseline:<path-to-baseline-avn-result>]"); return; } var isRelativePath = new Predicate <string>(x => x != null && !x.Contains(":\\")); if (isRelativePath(currDir) || isRelativePath(srcPath) || isRelativePath(Options.defectViewerDir) || isRelativePath(baseDir)) { throw new Exception("Specify absolute pathnames for arguments"); } var hrg = new HtmlReportGeneration("myhtmlfile.html", baseDir != null); var stripBplFromName = new Func <string, string> (x => { if (x.EndsWith(".bpl")) { return(x.Substring(0, x.LastIndexOf(".bpl"))); } return(null); }); var resultSrcPairs = Directory.GetDirectories(currDir, "*.bpl") .Select(x => x.Substring(x.LastIndexOf("\\") + 1)) .Where(x => Directory.Exists(srcPath + "\\" + stripBplFromName(x))) .Select(x => Tuple.Create(x, stripBplFromName(x))); resultSrcPairs .ToList() .ForEach(x => ProcessSingleModule( x.Item2, currDir + "\\\\" + x.Item1, srcPath + "\\\\" + x.Item2, baseDir == null ? null : baseDir + "\\\\" + x.Item1, hrg)); var getConfig = new Func <string, string>(x => { using (TextReader cf = new StreamReader(Directory.GetFiles(x, "config.txt")[0])) { return(cf.ReadToEnd()); } } ); var currConfig = getConfig(currDir); //hrg.WriteString("Current Config ==> " + currConfig); if (baseDir != null) { var baseConfig = getConfig(baseDir); //hrg.WriteString("Baseline Config ==> " + baseConfig); } hrg.AddHtmlPostlude(); }
/// <summary> /// name is a unique identifier (example name) for each example, currently module name /// </summary> /// <param name="name"></param> /// <param name="currDir"></param> /// <param name="srcPath"></param> /// <param name="baseDir"></param> /// <param name="hrg"></param> private static void ProcessSingleModule(string name, string currDir, string srcPath, string baseDir, HtmlReportGeneration hrg) { var ari1 = new AvnResultInfo(currDir, srcPath, name); ari1.LoadResultInfo(); try { AvnResultInfo ari2 = null; BaselineInfo bi = null; if (baseDir != null) { ari2 = new AvnResultInfo(baseDir, srcPath, name); ari2.LoadResultInfo(); bi = new BaselineInfo(ari1, ari2); bi.MatchResults(); } hrg.WriteHtml(ari1, ari2, bi); } catch (Exception e) { Console.WriteLine(string.Format("ERROR: Skipping {0} due to exception {1}", currDir, e.Message)); } }