상속: MonoCov.CoverageItem
예제 #1
0
        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);
        }
예제 #2
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);
        }
예제 #3
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);
        }
예제 #4
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 ();
	}
예제 #5
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);
        }
예제 #6
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");
            }
            }
        }
예제 #7
0
        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);
        }
예제 #8
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);
        }
예제 #9
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();
        }
예제 #10
0
        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;
        }
예제 #11
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;
        }
예제 #12
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;
        }
예제 #13
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");
                }
            }
        }
예제 #14
0
	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;
	}