/*
* Sonar C# Plugin :: Gallio
* Copyright (C) 2010 Jose Chillan, Alexandre Victoor and SonarSource
* dev@sonar.codehaus.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
*/
package org.sonar.plugins.csharp.gallio.results.coverage;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.io.File;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.junit.Before;
import org.junit.Test;
import org.sonar.api.batch.SensorContext;
import org.sonar.api.resources.Project;
import org.sonar.api.resources.ProjectFileSystem;
import org.sonar.api.resources.Resource;
import org.sonar.plugins.csharp.gallio.results.coverage.model.FileCoverage;
import org.sonar.plugins.csharp.gallio.results.coverage.model.ParserResult;
import org.sonar.plugins.csharp.gallio.results.coverage.model.ProjectCoverage;
import org.sonar.test.TestUtils;
import com.google.inject.internal.util.Lists;
public class CoverageResultParserTest {
private CoverageResultParser parser;
private SensorContext context;
private Project project;
@Before
public void setUp() {
context = mock(SensorContext.class);
when(context.isIndexed(any(Resource.class), eq(false))).thenReturn(true);
ProjectFileSystem fileSystem = mock(ProjectFileSystem.class);
when(fileSystem.getSourceDirs()).thenReturn(Lists.newArrayList(new File("C:\\Work\\CodeQuality\\Temp\\Example")));
project = mock(Project.class);
when(project.getFileSystem()).thenReturn(fileSystem);
parser = new CoverageResultParser(context);
}
@Test
public void testParsePartCover22() {
ParsingParameters params = new ParsingParameters();
params.report = "coverage-report-2.2.xml";
params.assemblyName = "Example.Core";
params.fileNumber = 4;
params.fileName = "Money.cs";
params.coveredLines = 46;
params.lines = 48;
params.coverage = 0.96;
checkParsing(params);
}
@Test
public void testParsePartCover22Empty() {
ParsingParameters params = new ParsingParameters();
params.report = "coverage-report-2.2-empty.xml";
params.assemblyName = "Example.Core";
params.fileNumber = 1;
params.fileName = "Money.cs";
params.coveredLines = 0;
params.lines = 4;
params.coverage = 0;
checkParsing(params);
}
@Test
public void testParsePartCover22Full() {
ParsingParameters params = new ParsingParameters();
params.report = "coverage-report-2.2-full.xml";
params.assemblyName = "Example.Core";
params.fileNumber = 1;
params.fileName = "Money.cs";
params.coveredLines = 4;
params.lines = 4;
params.coverage = 1.0;
checkParsing(params);
}
@Test
public void testParsePartCover23() {
ParsingParameters params = new ParsingParameters();
params.report = "coverage-report-2.3.xml";
params.assemblyName = "Example.Core";
params.fileNumber = 3;
params.fileName = "MoneyBag.cs";
params.coveredLines = 114;
params.lines = 125;
params.coverage = 0.91;
checkParsing(params);
}
@Test
public void testParsePartCover23NoVersionNumber() {
ParsingParameters params = new ParsingParameters();
params.report = "coverage-report-2.3.no.version.number.xml";
params.assemblyName = "Example.Core";
params.fileNumber = 3;
params.fileName = "MoneyBag.cs";
params.coveredLines = 114;
params.lines = 125;
params.coverage = 0.91;
checkParsing(params);
}
@Test
public void testParsePartCover40NoVersionNumber() {
ParsingParameters params = new ParsingParameters();
params.report = "coverage-report-4.0.no.version.number.xml";
params.assemblyName = "Example.Core";
params.fileNumber = 2;
params.fileName = "Money.cs";
params.coveredLines = 25;
params.lines = 27;
params.coverage = 0.93;
checkParsing(params);
}
@Test
public void testParsePartCover40() {
ParsingParameters params = new ParsingParameters();
params.report = "coverage-report-4.0.xml";
params.assemblyName = "Example.Core";
params.fileNumber = 3;
params.fileName = "Money.cs";
params.coveredLines = 45;
params.lines = 215;
params.coverage = 0.21;
checkParsing(params);
}
@Test
public void testParseNCover3() {
ParsingParameters params = new ParsingParameters();
params.report = "Coverage.NCover3.xml";
params.assemblyName = "Example.Core";
params.fileNumber = 3;
params.fileName = "Money.cs";
params.coveredLines = 35;
params.lines = 37;
params.coverage = 0.95;
checkParsing(params);
}
@Test
public void parseEmptyPartCoverReport() {
File file = TestUtils.getResource("/Results/coverage/empty-partcover-report.xml");
ParserResult result = parser.parse(project, file);
assertTrue(result.getSourceFiles().isEmpty());
}
private void checkParsing(ParsingParameters parameters) {
File file = TestUtils.getResource("/Results/coverage/" + parameters.report);
ParserResult result = parser.parse(project, file);
List<ProjectCoverage> projects = result.getProjects();
List<FileCoverage> files = result.getSourceFiles();
int numberOfLinesInProjects = 0;
for (ProjectCoverage projectCoverage : projects) {
numberOfLinesInProjects += projectCoverage.getCountLines();
}
int numberOfLinesInFiles = 0;
for (FileCoverage fileCoverage : files) {
numberOfLinesInFiles += fileCoverage.getCountLines();
}
assertEquals("line number in projects and files do not match", numberOfLinesInFiles, numberOfLinesInProjects);
ProjectCoverage firstProjectCoverage = projects.get(0);
assertEquals(parameters.fileNumber, files.size());
assertEquals(parameters.assemblyName, firstProjectCoverage.getAssemblyName());
FileCoverage firstFileCoverage = files.get(0);
assertTrue(StringUtils.contains(firstFileCoverage.getFile().getName(), parameters.fileName));
assertEquals(parameters.coveredLines, firstFileCoverage.getCoveredLines());
assertEquals(parameters.lines, firstFileCoverage.getCountLines());
assertEquals(parameters.coverage, firstFileCoverage.getCoverage(), 0.0001);
}
public static class ParsingParameters {
public String report;
public String assemblyName;
public int fileNumber;
public String fileName;
public int coveredLines;
public int lines;
public double coverage;
}
}