예제 #1
0
        public static void MiniCoverReport(this ICakeContext ctx, MiniCoverSettings settings)
        {
            if (ctx == null)
            {
                throw new ArgumentNullException(nameof(ctx));
            }

            ctx.EnsureToolsProjectLocated();

            foreach (Enum flag in Enum.GetValues(typeof(ReportType)))
            {
                if (settings.ReportType.HasFlag(flag))
                {
                    var subcommand = typeof(ReportType).GetMember(flag.ToString())[0].GetCustomAttributes(typeof(ReportCommandAttribute), false)[0] as ReportCommandAttribute;

                    ctx.MiniCoverReport(settings, subcommand.CommandName, a =>
                    {
                        a.AppendReportOutput(settings, subcommand.OutputName ?? string.Empty);

                        if (subcommand.SupportsThreshold)
                        {
                            a.Append("--threshold");
                            a.Append(settings.FailureThreshold.ToString("0.00"));
                        }

                        if (AdditionalArguments.TryGetValue((ReportType)flag, out var additionalArgs))
                        {
                            additionalArgs.Invoke(settings, a);
                        }
                    });
                }
            }
        }
        internal static ProcessArgumentBuilder AppendGlobPatterns(this ProcessArgumentBuilder builder,
                                                                  MiniCoverSettings settings)
        {
            foreach (var glob in settings.AssemblyIncludePatterns)
            {
                builder.Append("--assemblies");
                builder.AppendQuoted(glob);
            }

            foreach (var glob in settings.AssemblyExcludeGlobPatterns)
            {
                builder.Append("--exclude-assemblies");
                builder.AppendQuoted(glob);
            }

            foreach (var glob in settings.SourcesGlobPatterns)
            {
                builder.Append("--sources");
                builder.AppendQuoted(glob);
            }

            foreach (var glob in settings.SourcesExcludeGlobPatterns)
            {
                builder.Append("--exclude-sources");
                builder.AppendQuoted(glob);
            }

            return(builder);
        }
예제 #3
0
        public static void MiniCoverReport(
            this ICakeContext ctx,
            MiniCoverSettings settings,
            string reportName,
            Action <ProcessArgumentBuilder> additionalArgs
            )
        {
            if (ctx == null)
            {
                throw new ArgumentNullException(nameof(ctx));
            }

            ctx.EnsureToolsProjectLocated();

            var args = new ProcessArgumentBuilder().AppendReportCommand(reportName, settings);

            additionalArgs?.Invoke(args);

            try
            {
                ctx.DotNetCoreTool(MiniCoverSettings.MiniCoverToolsProject, "minicover", args);
            }
            catch (Exception ex) when(settings.NonFatalThreshold)
            {
                // TODO: Better detection of when failure is actually due to coverage threshold
                ctx.Debug("Report generation failed silently: {0}", ex);
            }
        }
        internal static ProcessArgumentBuilder AppendReportOutput(this ProcessArgumentBuilder builder,
                                                                  MiniCoverSettings settings, string suffix = "")
        {
            if (!string.IsNullOrEmpty(settings?.ReportPrefix))
            {
                builder.Append("--output");
                builder.AppendQuoted($"{settings.ReportPrefix}{suffix}");
            }

            return(builder);
        }
예제 #5
0
 public static void MiniCoverUninstrument(
     this ICakeContext ctx,
     MiniCoverSettings settings
     )
 {
     ctx.EnsureToolsProjectLocated();
     ctx.DotNetCoreTool(
         MiniCoverSettings.MiniCoverToolsProject,
         "minicover",
         new ProcessArgumentBuilder().AppendMiniCoverCommand("uninstrument", settings)
         );
 }
예제 #6
0
        public static void MiniCoverReport(
            this ICakeContext ctx,
            MiniCoverSettings settings,
            string reportName
            )
        {
            if (ctx == null)
            {
                throw new ArgumentNullException(nameof(ctx));
            }

            ctx.EnsureToolsProjectLocated();
            ctx.MiniCoverReport(settings, reportName, null);
        }
예제 #7
0
        public static void MiniCoverInstrument(this ICakeContext ctx, MiniCoverSettings settings)
        {
            if (ctx == null)
            {
                throw new ArgumentNullException(nameof(ctx));
            }

            ctx.EnsureToolsProjectLocated();

            var args = new ProcessArgumentBuilder().AppendMiniCoverCommand("instrument", settings);

            args.AppendGlobPatterns(settings);
            args.AppendHitsFile(settings);

            ctx.DotNetCoreTool(MiniCoverSettings.MiniCoverToolsProject, "minicover", args);
        }
        internal static ProcessArgumentBuilder AppendMiniCoverCommand(
            this ProcessArgumentBuilder builder,
            string subcommand,
            MiniCoverSettings settings
            )
        {
            builder.Append(subcommand);

            if (settings.MiniCoverWorkingDirectory != null)
            {
                builder.Append("--workdir");
                builder.AppendQuoted(settings.MiniCoverWorkingDirectory.FullPath);
            }

            return(builder);
        }
        internal static ProcessArgumentBuilder AppendReportCommand(
            this ProcessArgumentBuilder builder,
            string subcommand,
            MiniCoverSettings settings
            )
        {
            builder.AppendMiniCoverCommand(subcommand, settings);

            if (!string.IsNullOrEmpty(settings.CoverageFileName))
            {
                builder.Append("--coverage-file");
                builder.AppendQuoted(settings.CoverageFileName);
            }

            return(builder);
        }
예제 #10
0
        public static void MiniCover(this ICakeContext ctx, Action <ICakeContext> action, MiniCoverSettings settings)
        {
            if (ctx == null)
            {
                throw new ArgumentNullException(nameof(ctx));
            }

            if (action == null)
            {
                throw new ArgumentNullException(nameof(action));
            }

            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            ctx.EnsureToolsProjectLocated();

            ctx.MiniCoverInstrument(settings);
            ctx.MiniCoverReset(settings);

            action.Invoke(ctx);

            ctx.MiniCoverUninstrument(settings);
            ctx.MiniCoverReport(settings);
        }
        internal static ProcessArgumentBuilder AppendHitsFile(this ProcessArgumentBuilder builder, MiniCoverSettings settings)
        {
            if (!string.IsNullOrEmpty(settings.HitsFileName))
            {
                builder.Append("--hits-file");
                builder.AppendQuoted(settings.HitsFileName);
            }

            return(builder);
        }