private static int handleExportFieldStat(MonoCovOptions opts, string[] args) { if (args.Length == 0) { Console.WriteLine("Error: Datafile name is required when using --export-fieldstat"); return(1); } if (!Directory.Exists(opts.exportFieldStatDir)) { try { Directory.CreateDirectory(opts.exportFieldStatDir); } catch (Exception ex) { Console.WriteLine("Error: Destination directory '" + opts.exportFieldStatDir + "' does not exist and could not be created: " + ex); return(1); } } CoverageModel model = new CoverageModel(); model.ReadFromFile(args [0]); FieldStatExporter exporter = new FieldStatExporter(); exporter.DestinationDir = opts.exportFieldStatDir; exporter.StyleSheet = opts.styleSheet; exporter.Export(model); if (!opts.quiet) { Console.WriteLine(); Console.WriteLine("Done."); } return(0); }
// // Algorithm: export the data as XML, then transform it into HTML // using a stylesheet // public void Export(CoverageModel model) { if (model.hit + model.missed == 0) { return; } // Why doesn't NET has a Path.GetTempDirectoryName () method ? int index = 0; string tempDir; // Of course this is not safe but it doesn't matter while (true) { tempDir = Path.Combine(Path.Combine(Path.GetTempPath(), "monocov"), "" + index); if (!Directory.Exists(tempDir)) { break; } index++; } Directory.CreateDirectory(tempDir); XmlExporter exporter = new XmlExporter(); exporter.StyleSheet = StyleSheet; exporter.DestinationDir = tempDir; exporter.Progress += new XmlExporter.ProgressEventHandler(progressListener); exporter.Export(model); Directory.Delete(tempDir, true); }
// // Algorithm: export the data as XML, then transform it into HTML // using a stylesheet // public void Export(CoverageModel model) { if (model.hit + model.missed == 0) return; // Why doesn't NET has a Path.GetTempDirectoryName () method ? int index = 0; string tempDir; // Of course this is not safe but it doesn't matter while (true) { tempDir = Path.Combine (Path.Combine (Path.GetTempPath (), "monocov"), "" + index); if (!Directory.Exists (tempDir)) break; index++; } Directory.CreateDirectory (tempDir); XmlExporter exporter = new XmlExporter (); exporter.StyleSheet = StyleSheet; exporter.DestinationDir = tempDir; exporter.Progress += new XmlExporter.ProgressEventHandler (progressListener); exporter.Export (model); Directory.Delete (tempDir, true); }
//private int itemCount; //private int itemsProcessed; public void Export (CoverageModel model) { this.model = model; if (model.hit + model.missed == 0) return; if (StyleSheet == null) { // Use default stylesheet using (StreamReader sr = new StreamReader (typeof (XmlExporter).Assembly.GetManifestResourceStream ("style.xsl"))) { using (StreamWriter sw = new StreamWriter (Path.Combine (DestinationDir, "style.xsl"))) { string line; while ((line = sr.ReadLine ()) != null) sw.WriteLine (line); } } using (Stream s = typeof (XmlExporter).Assembly.GetManifestResourceStream ("trans.gif")) { using (FileStream fs = new FileStream (Path.Combine (DestinationDir, "trans.gif"), FileMode.Create)) { byte[] buf = new byte[1024]; int len = s.Read (buf, 0, buf.Length); fs.Write (buf, 0, len); } } StyleSheet = DefaultStyleSheet; } // Count items //itemCount = 1 + model.Classes.Count + model.Namespaces.Count; //itemsProcessed = 0; //WriteProject (); //WriteNamespaces (); WriteClasses (); }
private static int handleTestCoverage(MonoCovOptions opts, string[] args) { if (args.Length == 0) { Console.WriteLine("Error: Datafile name is required when using --minClassCoverage or --minMethodeCoverage."); return(1); } CoverageModel model = new CoverageModel(); try { model.ReadFromFile(args[0]); } catch (Exception e) { Console.WriteLine("Error: " + e.Message); return(1); } foreach (ClassCoverageItem classItem in model.Classes.Values) { if (!opts.quiet) { Console.WriteLine(String.Format("Coverage of class \"{0}\": {1:0.}%", classItem.FullName, classItem.coveragePercent * 100)); } if (opts.minClassCoverage > 0 && classItem.coveragePercent < opts.minClassCoverage) { if (!opts.quiet) { Console.WriteLine("Test failed."); } return(1); } foreach (MethodCoverageItem methodItem in classItem.Methods) { if (!opts.quiet) { Console.WriteLine(String.Format("\tCoverage of method \"{0}\": {1:0.}%", methodItem.Name, methodItem.coveragePercent * 100)); } if (opts.minMethodeCoverage > 0 && methodItem.coveragePercent < opts.minMethodeCoverage) { if (!opts.quiet) { Console.WriteLine("Test failed."); } return(1); } } } return(0); }
public static void Export(CoverageModel model, string path) { using (TextWriter writer = new StreamWriter(path, false, Encoding.ASCII)) { foreach (ClassCoverageItem klass in model.Classes.Values) { if (klass.filtered || klass.hit + klass.missed == 0) continue; SourceFileCoverageData file = klass.sourceFile; writer.WriteLine("TN:{0}", ""); // TODO relative path writer.WriteLine("SF:{0}", file.sourceFile); // FN records int fnCount = 0; int fnHitted = 0; foreach (MethodCoverageItem fn in file.methods) { if (fn.Class.filtered || fn.Class.hit + fn.Class.missed == 0) continue; fnCount++; if (fn.hit > 0) fnHitted++; string name = fn.FullName; writer.WriteLine("FN:{0},{1}", fn.startLine, name); writer.WriteLine("FNDA:{0},{1}", fn.hit, name); } writer.WriteLine("FNF:{0}", fnCount); writer.WriteLine("FNH:{0}", fnHitted); // lines coverage int[] coverage = file.Coverage; int ln = 0; int lh = 0; for (int i = 0; i < coverage.Length; i++) { int hits = coverage[i]; if (hits < 0) continue; // comment writer.WriteLine("DA:{0},{1}", i + 1, hits); ln++; if (hits > 0) lh++; } writer.WriteLine("LF:{0}", ln); writer.WriteLine("LH:{0}", lh); writer.WriteLine("end_of_record"); } } }
private static int handleExportXml(MonoCovOptions opts, string[] args) { if (args.Length == 0) { Console.WriteLine("Error: Datafile name is required when using --export-xml"); return(1); } if (!File.Exists(args [0])) { Console.WriteLine(string.Format("Error: Datafile '{0}' not found.", args [0])); return(1); } if (!Directory.Exists(opts.exportXmlDir)) { try { Directory.CreateDirectory(opts.exportXmlDir); } catch (Exception ex) { Console.WriteLine("Error: Destination directory '" + opts.exportXmlDir + "' does not exist and could not be created: " + ex); return(1); } } try { CoverageModel model = new CoverageModel(); model.ReadFromFile(args [0]); XmlExporter exporter = new XmlExporter(); exporter.DestinationDir = opts.exportXmlDir; exporter.StyleSheet = opts.styleSheet; if (!opts.quiet) { exporter.Progress += new XmlExporter.ProgressEventHandler(progressListener); } exporter.Export(model); } catch (Exception e) { Console.WriteLine("Error: " + e.Message); return(1); } if (!opts.quiet) { Console.WriteLine(); Console.WriteLine("Done."); } return(0); }
private static int handleExportLcov(MonoCovOptions opts, string[] args) { if (args.Length == 0) { Console.WriteLine("Error: Datafile name is required when using --export-lcov"); return(1); } if (!File.Exists(args [0])) { Console.WriteLine(string.Format("Error: Datafile '{0}' not found.", args [0])); return(1); } string exportDir = opts.exportLcovDir; if (!Directory.Exists(exportDir)) { try { Directory.CreateDirectory(exportDir); } catch (Exception ex) { Console.WriteLine("Error: Destination directory '" + exportDir + "' does not exist and could not be created: " + ex); return(1); } } try { CoverageModel model = new CoverageModel(); model.ReadFromFile(args [0]); // TODO support progress in lcov export LcovExporter.Export(model, Path.Combine(exportDir, "lcov.info")); } catch (Exception e) { Console.WriteLine("Error: " + e.Message); return(1); } if (!opts.quiet) { Console.WriteLine(); Console.WriteLine("Done."); } return(0); }
//private int itemCount; //private int itemsProcessed; public void Export(CoverageModel model) { this.model = model; if (model.hit + model.missed == 0) { return; } if (StyleSheet == null) { // Use default stylesheet using (StreamReader sr = new StreamReader(typeof(XmlExporter).Assembly.GetManifestResourceStream("style.xsl"))) { using (StreamWriter sw = new StreamWriter(Path.Combine(DestinationDir, "style.xsl"))) { string line; while ((line = sr.ReadLine()) != null) { sw.WriteLine(line); } } } using (Stream s = typeof(XmlExporter).Assembly.GetManifestResourceStream("trans.gif")) { using (FileStream fs = new FileStream(Path.Combine(DestinationDir, "trans.gif"), FileMode.Create)) { byte[] buf = new byte[1024]; int len = s.Read(buf, 0, buf.Length); fs.Write(buf, 0, len); } } StyleSheet = DefaultStyleSheet; } // Count items //itemCount = 1 + model.Classes.Count + model.Namespaces.Count; //itemsProcessed = 0; //WriteProject (); //WriteNamespaces (); WriteClasses(); }
private static int handleExportHtml(MonoCovOptions opts, string[] args) { if (args.Length == 0) { Console.WriteLine ("Error: Datafile name is required when using --export-html"); return 1; } if (!File.Exists(args [0])) { Console.WriteLine(string.Format("Error: Datafile '{0}' not found.", args [0])); return 1; } if (!Directory.Exists (opts.exportHtmlDir)) { try { Directory.CreateDirectory (opts.exportHtmlDir); } catch (Exception ex) { Console.WriteLine ("Error: Destination directory '" + opts.exportHtmlDir + "' does not exist and could not be created: " + ex); return 1; } } try { CoverageModel model = new CoverageModel (); model.ReadFromFile (args [0]); HtmlExporter exporter = new HtmlExporter (); exporter.DestinationDir = opts.exportHtmlDir; exporter.StyleSheet = opts.styleSheet; if (!opts.quiet) exporter.Progress += new HtmlExporter.ProgressEventHandler (htmlProgressListener); exporter.Export (model); } catch (Exception e) { Console.WriteLine("Error: "+e.Message); return 1; } if (!opts.quiet) { Console.WriteLine (); Console.WriteLine ("Done."); } return 0; }
private static int handleTestCoverage(MonoCovOptions opts, string[] args) { if (args.Length == 0) { Console.WriteLine ("Error: Datafile name is required when using --minClassCoverage or --minMethodeCoverage."); return 1; } CoverageModel model = new CoverageModel (); try { model.ReadFromFile (args[0]); } catch (Exception e) { Console.WriteLine ("Error: " + e.Message); return 1; } foreach (ClassCoverageItem classItem in model.Classes.Values) { if (!opts.quiet) Console.WriteLine (String.Format ("Coverage of class \"{0}\": {1:0.}%", classItem.FullName, classItem.coveragePercent * 100)); if (opts.minClassCoverage > 0 && classItem.coveragePercent < opts.minClassCoverage) { if (!opts.quiet) Console.WriteLine ("Test failed."); return 1; } foreach (MethodCoverageItem methodItem in classItem.Methods) { if (!opts.quiet) Console.WriteLine (String.Format ("\tCoverage of method \"{0}\": {1:0.}%", methodItem.Name, methodItem.coveragePercent * 100)); if (opts.minMethodeCoverage > 0 && methodItem.coveragePercent < opts.minMethodeCoverage) { if (!opts.quiet) Console.WriteLine ("Test failed."); return 1; } } } return 0; }
private static int handleExportLcov(MonoCovOptions opts, string[] args) { if (args.Length == 0) { Console.WriteLine ("Error: Datafile name is required when using --export-lcov"); return 1; } if (!File.Exists(args [0])) { Console.WriteLine(string.Format("Error: Datafile '{0}' not found.", args [0])); return 1; } string exportDir = opts.exportLcovDir; if (!Directory.Exists (exportDir)) { try { Directory.CreateDirectory (exportDir); } catch (Exception ex) { Console.WriteLine ("Error: Destination directory '" + exportDir + "' does not exist and could not be created: " + ex); return 1; } } try { CoverageModel model = new CoverageModel (); model.ReadFromFile (args [0]); // TODO support progress in lcov export LcovExporter.Export (model, Path.Combine(exportDir, "lcov.info")); } catch (Exception e) { Console.WriteLine("Error: "+e.Message); return 1; } if (!opts.quiet) { Console.WriteLine (); Console.WriteLine ("Done."); } return 0; }
public static void Export(CoverageModel model, string path) { using (TextWriter writer = new StreamWriter(path, false, Encoding.ASCII)) { foreach (ClassCoverageItem klass in model.Classes.Values) { if (klass.filtered || klass.hit + klass.missed == 0) { continue; } SourceFileCoverageData file = klass.sourceFile; writer.WriteLine("TN:{0}", ""); // TODO relative path writer.WriteLine("SF:{0}", file.sourceFile); // FN records int fnCount = 0; int fnHitted = 0; foreach (MethodCoverageItem fn in file.methods) { if (fn.Class.filtered || fn.Class.hit + fn.Class.missed == 0) { continue; } fnCount++; if (fn.hit > 0) { fnHitted++; } string name = fn.FullName; writer.WriteLine("FN:{0},{1}", fn.startLine, name); writer.WriteLine("FNDA:{0},{1}", fn.hit, name); } writer.WriteLine("FNF:{0}", fnCount); writer.WriteLine("FNH:{0}", fnHitted); // lines coverage int[] coverage = file.Coverage; int ln = 0; int lh = 0; for (int i = 0; i < coverage.Length; i++) { int hits = coverage[i]; if (hits < 0) { continue; // comment } writer.WriteLine("DA:{0},{1}", i + 1, hits); ln++; if (hits > 0) { lh++; } } writer.WriteLine("LF:{0}", ln); writer.WriteLine("LH:{0}", lh); writer.WriteLine("end_of_record"); } } }
private static int handleExportFieldStat(MonoCovOptions opts, string[] args) { if (args.Length == 0) { Console.WriteLine ("Error: Datafile name is required when using --export-fieldstat"); return 1; } if (!Directory.Exists (opts.exportFieldStatDir)) { try { Directory.CreateDirectory (opts.exportFieldStatDir); } catch (Exception ex) { Console.WriteLine ("Error: Destination directory '" + opts.exportFieldStatDir + "' does not exist and could not be created: " + ex); return 1; } } CoverageModel model = new CoverageModel (); model.ReadFromFile (args [0]); FieldStatExporter exporter = new FieldStatExporter(); exporter.DestinationDir = opts.exportFieldStatDir; exporter.StyleSheet = opts.styleSheet; exporter.Export (model); if (!opts.quiet) { Console.WriteLine (); Console.WriteLine ("Done."); } return 0; }