Permalink
Browse files

The application will return an exit code which can be used to determine

if all classes/methodes have a greater code coverage than specified.
  • Loading branch information...
1 parent 8dfaba4 commit 2e4cfc93f7678aad0299abab1c10bf3e3f4c25aa @alpinechough alpinechough committed with vargaz Jan 12, 2011
Showing with 70 additions and 0 deletions.
  1. +6 −0 ChangeLog
  2. +46 −0 MonoCovMain.cs
  3. +4 −0 MonoCovOptions.cs
  4. +8 −0 README
  5. +6 −0 monocov.1
View
@@ -1,3 +1,9 @@
+2011-01-12 Andreas Windischer
+
+ * MonoCovMain.cs, MonoCovOptions.cs, monocov.1, README:
+ The application will return an exit code which can be used to determine if all
+ classes/methodes have a greater code coverage than specified.
+
2011-01-02 Andreas Windischer
* gui/gtk/CoverageView.cs: Create the method nodes only when
View
@@ -54,6 +54,9 @@ public class MonoCovMain {
if (options.exportHtmlDir != null)
return handleExportHtml (options, args);
+ if (options.minClassCoverage > 0 || options.minMethodeCoverage > 0)
+ return handleTestCoverage (options, args);
+
#if GUI_qt
return MonoCov.Gui.Qt.MonoCov.GuiMain (args);
#else
@@ -155,5 +158,48 @@ public class MonoCovMain {
}
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;
+ }
}
}
View
@@ -12,6 +12,8 @@ public MonoCovOptions()
optionSet.Add ("export-xml=", "Export coverage data as XML into specified directory", v => exportXmlDir = v);
optionSet.Add ("export-html=", "Export coverage data as HTML into specified directory", v => exportHtmlDir = v);
optionSet.Add ("stylesheet=", "Use the specified XSL stylesheet for XML->HTML conversion", v => exportHtmlDir = v);
+ optionSet.Add ("minClassCoverage=", "If a code coverage of a class is less than specified, the application exits with return code 1.", v => float.TryParse(v, out minClassCoverage));
+ optionSet.Add ("minMethodeCoverage=", "If a code coverage of a methode is less than specified, the application exits with return code 1.", v => float.TryParse(v, out minMethodeCoverage));
optionSet.Add ("no-progress", "No progress messages during the export process", v => quiet = v != null);
optionSet.Add ("h|help", "Show this message and exit", v => showHelp = v != null);
}
@@ -20,6 +22,8 @@ public MonoCovOptions()
public string exportXmlDir;
public string exportHtmlDir;
public string styleSheet;
+ public float minClassCoverage = -1f;
+ public float minMethodeCoverage = -1f;
public bool quiet = false;
public bool showHelp = false;
View
8 README
@@ -74,6 +74,14 @@ be good if somebody could contribute a better one :)
To export the data as HTML, run monocov like this:
monocov --export-html=<DEST DIR> <DATA FILE NAME>
+You can use this application to track your code coverage as part of your build
+process. To specify a minimum methode coverage of 50% and a minimum class coverage
+of 80%:
+ monocov --minClassCoverage=0.5 minMethodeCoverage=0.8 <DATA FILE NAME>
+
+The application will return an exit code which can be used to determine if all
+classes/methodes have a greater code coverage than specified.
+
2.5 KNOWN BUGS
--------------
View
@@ -12,6 +12,12 @@ Export the coverage data as HTML files in directory DIR.
.I \-export-xml:DIR
Export the coverage data as XML files in directory DIR.
.TP
+.I \-test-class:VALUE
+If a code coverage of a class is less than specified, the application exits with return code 1.
+.TP
+.I \-test-methode:VALUE
+If a code coverage of a methode is less than specified, the application exits with return code 1.
+.TP
.I \-version
Print version information.
.TP

0 comments on commit 2e4cfc9

Please sign in to comment.