public void WhenRunningTaskShouldComputeMetrics()
        {
            ITaskItem[] providers = new TaskItemMock[1];
            providers[0] = new TaskItemMock("MSBuildCodeMetrics.Core.UnitTests.Mock.CodeMetricsProviderSingleFileMock, MSBuildCodeMetrics.Core.UnitTests").
                AddMetadata("Data", "<Metric Name=\"LinesOfCode\"><Measure " +
                    "Name=\"Method1\" Value=\"1\" /><Measure Name=\"Method2\" Value=\"2\" /><Measure " +
                    "Name=\"Method3\" Value=\"5\" /></Metric>").
                AddMetadata("ProviderName", "CodeMetricsProviderMock");

            ITaskItem[] metrics = new TaskItemMock[1];
            metrics[0] = new TaskItemMock("LinesOfCode").
                AddMetadata("ProviderName", "CodeMetricsProviderMock").
                AddMetadata("Ranges", "2;3").
                AddMetadata("Files", "C:\\foo.txt");

            FileStreamFactoryMock streamFactory = new FileStreamFactoryMock();

            CodeMetrics task = new CodeMetrics(streamFactory);
            task.BuildEngine = new BuildEngineMock();
            task.Providers = providers;
            task.OutputFileName = "report.xml";
            task.ShowDetailsReport = true;
            task.ShowSummaryReport = true;
            task.Metrics = metrics;
            task.FileOutput = true;
            Assert.AreEqual(true, task.Execute());

            streamFactory.OutputStream.Seek(0, SeekOrigin.Begin);
            MSBuildCodeMetricsReport report = MSBuildCodeMetricsReport.Deserialize(streamFactory.OutputStream);
            Assert.AreEqual(1, report.Details.Metrics.Count);
            Assert.AreEqual("LinesOfCode", report.Details.Metrics[0].MetricName);
            Assert.AreEqual("Method3", report.Details.Metrics[0].Measures[0].MeasureName);
            Assert.AreEqual(5, report.Details.Metrics[0].Measures[0].Value);
        }
 public void WhenSettingRangeWithInvalidValueShouldReturnFalseAndSetError()
 {
     var buildEngineMock = new Mock<IBuildEngine>();
     var task = new CodeMetrics()
     {
         BuildEngine = buildEngineMock.Object,
         Metrics = new ITaskItem[]
         {
             _metrics[0] = new TaskItemMock("LinesOfCode").
                 AddMetadata("ProviderName", "CodeMetricsProviderMock").
                 AddMetadata("Ranges", "abc;abc").
                 AddMetadata("Files", "foo")
         }
     };
     task.Execute();
 }
        public void WhenRunningWithProcessExecutorCodeMetricsShouldSetProcessExecutor()
        {
            var buildEngineMock = new Mock<IBuildEngine>();

            var task = new CodeMetrics()
            {
                BuildEngine = buildEngineMock.Object,
                Providers = new ITaskItem[]
                {
                    new TaskItemMock("MSBuildCodeMetrics.Core.UnitTests.Mock.CodeMetricsProviderProcessExecutorMock, MSBuildCodeMetrics.Core.UnitTests").
                    AddMetadata("ProviderName", "CodeMetricsProviderProcessExecutorMock")
                },
                Metrics = new ITaskItem[]
                {
                    new TaskItemMock("Metric").
                        AddMetadata("ProviderName", "DummyProvider").
                        AddMetadata("Ranges", "1").
                        AddMetadata("Files", "foo")
                }
            };
            Assert.IsNull(CodeMetricsProviderProcessExecutorMock.LastProcessExecutorSet);
            task.Execute();
            Assert.IsNotNull(CodeMetricsProviderProcessExecutorMock.LastProcessExecutorSet);
        }
 public void WhenRunningWithoutMetricsShouldReturnFalseAndSetErrorMessage()
 {
     var buildEngineMock = new Mock<IBuildEngine>();
     var task = new CodeMetrics()
     {
         BuildEngine = buildEngineMock.Object
     };
     task.Execute();
 }
 public void WhenRunningWithMetricsWithEmptyRangesShouldReturnFalseAndSetErrorMessage()
 {
     var buildEngineMock = new Mock<IBuildEngine>();
     var errorMessage = String.Empty;
     buildEngineMock.Setup(be => be.LogErrorEvent(It.IsAny<BuildErrorEventArgs>())).
         Callback<BuildErrorEventArgs>(
             e =>
             {
                 errorMessage = e.Message;
             });
     var task = new CodeMetrics()
     {
         BuildEngine = buildEngineMock.Object,
         Metrics = new ITaskItem[]
         {
             new TaskItemMock("Metric").
                 AddMetadata("ProviderName", "CodeMetricsProviderMock").
                 AddMetadata("Ranges", null).
                 AddMetadata("Files", "foo")
         }
     };
     Assert.IsFalse(task.Execute());
     Assert.IsTrue(errorMessage.StartsWith("Ranges can't be null if you need a summary report."));
 }
        public void WhenRunningWithLowerRangeFailMessageAndHasValueOnLowerBandShouldFail()
        {
            var buildEngineMock = new Mock<IBuildEngine>();
            var errorMessage = String.Empty;
            buildEngineMock.Setup(be => be.LogErrorEvent(It.IsAny<BuildErrorEventArgs>())).
                Callback<BuildErrorEventArgs>(
                    e =>
                    {
                        errorMessage = e.Message;
                    });

            var task = new CodeMetrics()
            {
                BuildEngine = buildEngineMock.Object,
                Providers = new ITaskItem[]
                {
                    new TaskItemMock("MSBuildCodeMetrics.Core.UnitTests.Mock.CodeMetricsProviderSingleFileMock, MSBuildCodeMetrics.Core.UnitTests").
                        AddMetadata("Data", "<Metric Name=\"CodeCoverage\"><Measure " +
                                    "Name=\"Assembly1\" Value=\"75\" /><Measure Name=\"Assembly2\" Value=\"100\" /><Measure " +
                                    "Name=\"Assembly3\" Value=\"100\" /></Metric>").
                        AddMetadata("ProviderName", "CodeMetricsProviderMock")
                },
                Metrics = new ITaskItem[]
                {
                    new TaskItemMock("CodeCoverage").
                        AddMetadata("ProviderName", "CodeMetricsProviderMock").
                        AddMetadata("Ranges", "90").
                        AddMetadata("Files", "foo").
                        AddMetadata("LowerRangeFailMessage", "There are assemblies with less than 90% of coverage")
                }
            };

            Assert.AreEqual(false, task.Execute());
            Assert.AreEqual("There are assemblies with less than 90% of coverage", errorMessage);
        }