예제 #1
0
        static int Main(string[] raw)
        {
            ArgumentList args = new ArgumentList(raw);

            using (Log.AppStart(Environment.CommandLine))
            {
                if (args.Count == 0 || args.Unnamed.Count == 0 || args.Contains("?"))
                {
                    return(DoHelp());
                }
                if (args.Contains("nologo") == false)
                {
                    Console.WriteLine("CSharpTest.Net.CoverageReport.exe");
                    Console.WriteLine("Copyright 2009 by Roger Knapp, Licensed under the Apache License, Version 2.0");
                    Console.WriteLine("");
                }

                try
                {
                    List <string> filesFound = new List <string>();
                    FileList      files      = new FileList();
                    files.RecurseFolders = args.Contains("s");
                    files.Add(new List <string>(args.Unnamed).ToArray());

                    XmlParser parser = new XmlParser(args.SafeGet("exclude").Values);
                    foreach (System.IO.FileInfo file in files)
                    {
                        filesFound.Add(file.FullName);
                        using (Log.Start("parsing file: {0}", file.FullName))
                            parser.Parse(file.FullName);
                    }

                    parser.Complete();

                    if (args.Contains("module"))
                    {
                        using (Log.Start("Creating module report."))
                            using (XmlReport rpt = new XmlReport(OpenText(args["module"]), parser, "Module Summary", filesFound.ToArray()))
                                new MetricReport(parser.ByModule).Write(rpt);
                    }

                    if (args.Contains("namespace"))
                    {
                        using (Log.Start("Creating namespace report."))
                            using (XmlReport rpt = new XmlReport(OpenText(args["namespace"]), parser, "Namespace Summary", filesFound.ToArray()))
                                new MetricReport(parser.ByNamespace).Write(rpt);
                    }

                    if (args.Contains("class"))
                    {
                        using (Log.Start("Creating class report."))
                            using (XmlReport rpt = new XmlReport(OpenText(args["class"]), parser, "Module Class Summary", filesFound.ToArray()))
                                new MetricReport(parser.ByModule, parser.ByNamespace, parser.ByClass).Write(rpt);
                    }

                    if (args.Contains("unused"))
                    {
                        using (Log.Start("Creating unused statement report."))
                            using (UnusedReport rpt = new UnusedReport(OpenText(args["unused"]), parser))
                                new MetricReport(parser.ByModule, parser.ByMethod).Write(rpt);
                    }

                    if (args.Contains("combine"))
                    {
                        using (Log.Start("Creating combined coverage file."))
                            using (XmlCoverageWriter wtr = new XmlCoverageWriter(OpenText(args["combine"]), parser))
                                new MetricReport(parser.ByModule, parser.ByMethod).Write(wtr);
                    }
                    //foreach (ModuleInfo mi in parser)
                    //    Console.WriteLine("{0} hit {1} of {2} for {3}", mi.Name, mi.VisitedPoints, mi.SequencePoints, mi.CoveragePercent);
                }
                catch (Exception e)
                {
                    Log.Error(e);
                    Console.Error.WriteLine();
                    Console.Error.WriteLine("Exception: {0}", e.Message);
                    Console.Error.WriteLine();
                    Environment.ExitCode = -1;
                }
            }

            if (args.Contains("wait"))
            {
                Console.WriteLine("Press [Enter] to continue...");
                Console.ReadLine();
            }

            return(Environment.ExitCode);
        }