コード例 #1
0
ファイル: Program.cs プロジェクト: mark-doyle/coveragexml2csv
        static void WriteOutputFile(IEnumerable <AnalyzedModule> modules, AnalysisDepth depth, string outputFile)
        {
            using (FileStream fileStream = new FileStream(outputFile, FileMode.OpenOrCreate, FileAccess.ReadWrite))
            {
                using (StreamWriter streamWriter = new StreamWriter(fileStream))
                {
                    // Write header
                    streamWriter.Write("ModuleName,ModuleLinesCovered,ModuleLinesCoveredPct,ModuleLinesPartiallyCovered,ModuleLinesPartiallyCoveredPct,ModuleLinesNotCovered,ModuleLinesNotCoveredPct,ModuleLinesTotal,ModuleBlocksCovered,ModuleBlocksCoveredPct,ModuleBlocksNotCovered,ModuleBlocksNotCoveredPct,ModuleBlocksTotal");
                    if (depth > AnalysisDepth.Module)
                    {
                        streamWriter.Write(",NamespaceName,NamespaceLinesCovered,NamespaceLinesCoveredPct,NamespaceLinesPartiallyCovered,NamespaceLinesPartiallyCoveredPct,NamespaceLinesNotCovered,NamespaceLinesNotCoveredPct,NamespaceLinesTotal,NamespaceBlocksCovered,NamespaceBlocksCoveredPct,NamespaceBlocksNotCovered,NamespaceBlocksNotCoveredPct,NamespaceBlocksTotal");
                        if (depth > AnalysisDepth.Namespace)
                        {
                            streamWriter.Write(",ClassName,ClassLinesCovered,ClassLinesCoveredPct,ClassLinesPartiallyCovered,ClassLinesPartiallyCoveredPct,ClassLinesNotCovered,ClassLinesNotCoveredPct,ClassLinesTotal,ClassBlocksCovered,ClassBlocksCoveredPct,ClassBlocksNotCovered,ClassBlocksNotCoveredPct,ClassBlocksTotal");
                            if (depth > AnalysisDepth.Class)
                            {
                                streamWriter.Write(",MethodName,MethodLinesCovered,MethodLinesCoveredPct,MethodLinesPartiallyCovered,MethodLinesPartiallyCoveredPct,MethodLinesNotCovered,MethodLinesNotCoveredPct,MethodLinesTotal,MethodBlocksCovered,MethodBlocksCoveredPct,MethodBlocksNotCovered,MethodBlocksNotCoveredPct,MethodBlocksTotal");
                            }
                        }
                    }
                    streamWriter.WriteLine();

                    // Write contents
                    foreach (AnalyzedModule module in modules)
                    {
                        if (depth > AnalysisDepth.Module)
                        {
                            // Process each namespace in module
                            foreach (AnalyzedNamespace ns in module.Namespaces)
                            {
                                if (depth > AnalysisDepth.Namespace)
                                {
                                    // Process each class in namespace
                                    foreach (AnalyzedClass cl in ns.Classes)
                                    {
                                        if (depth > AnalysisDepth.Class)
                                        {
                                            // Process each method in class
                                            foreach (AnalyzedMethod meth in cl.Methods)
                                            {
                                                streamWriter.Write(GetAnalyzedItemOutput(module));
                                                streamWriter.Write(",");
                                                streamWriter.Write(GetAnalyzedItemOutput(ns));
                                                streamWriter.Write(",");
                                                streamWriter.Write(GetAnalyzedItemOutput(cl));
                                                streamWriter.Write(",");
                                                streamWriter.WriteLine(GetAnalyzedItemOutput(meth));
                                            }
                                        }
                                        else
                                        {
                                            streamWriter.Write(GetAnalyzedItemOutput(module));
                                            streamWriter.Write(",");
                                            streamWriter.Write(GetAnalyzedItemOutput(ns));
                                            streamWriter.Write(",");
                                            streamWriter.WriteLine(GetAnalyzedItemOutput(cl));
                                        }
                                    }
                                }
                                else
                                {
                                    streamWriter.Write(GetAnalyzedItemOutput(module));
                                    streamWriter.Write(",");
                                    streamWriter.WriteLine(GetAnalyzedItemOutput(ns));
                                }
                            }
                        }
                        else
                        {
                            streamWriter.WriteLine(GetAnalyzedItemOutput(module));
                        }
                    }

                    // Wrap it up
                    streamWriter.Close();
                }
                fileStream.Close();
            }
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: mark-doyle/coveragexml2csv
        static void Main(string[] args)
        {
            AnalysisDepth depth      = AnalysisDepth.Method;
            string        sourceFile = null;
            string        outputFile = null;
            bool          proceed    = true;

            try
            {
                if (args != null && args.Length == 6)
                {
                    for (int argIndex = 0; argIndex < args.Length; argIndex += 2)
                    {
                        switch (args[argIndex].ToLower())
                        {
                        case "-d":
                        case "/d":
                            depth = (AnalysisDepth)Enum.Parse(typeof(AnalysisDepth), args[argIndex + 1]);
                            break;

                        case "-x":
                        case "/x":
                            sourceFile = args[argIndex + 1];
                            if (string.IsNullOrEmpty(sourceFile))
                            {
                                throw new ArgumentException("No specified coverage XML file");
                            }
                            else if (!File.Exists(sourceFile))
                            {
                                throw new ArgumentException("Invalid coverage XML file");
                            }
                            break;

                        case "-o":
                        case "/o":
                            outputFile = args[argIndex + 1];
                            if (string.IsNullOrEmpty(outputFile))
                            {
                                throw new ArgumentException("No specified output CSV file path");
                            }
                            break;
                        }
                    }

                    if (proceed && !string.IsNullOrEmpty(sourceFile) && !string.IsNullOrEmpty(outputFile))
                    {
                        // do stuff
                        XDocument coverageXml = ReadCoverageXml(sourceFile);
                        if (coverageXml != null)
                        {
                            IEnumerable <AnalyzedModule> modules = ExtractAnalyzedModules(coverageXml);
                            WriteOutputFile(modules, depth, outputFile);
                        }
                    }
                    else
                    {
                        throw new ArgumentException("Invalid data, or invalid source/output files");
                    }
                }
                else
                {
                    throw new ArgumentException("Incorrect arguments");
                }
            }
            catch (Exception ex)
            {
                PrintUsage();
                Console.WriteLine("Error: " + ex.Message);
            }
        }