/* * Copyright (c) 2006 Rogério Liesenfeld * This file is subject to the terms of the MIT license (see LICENSE.txt). */ package integrationTests; import java.io.*; import javax.xml.stream.*; import org.junit.*; import static org.junit.Assert.*; import static org.junit.Assume.*; import mockit.coverage.*; import integrationTests.ClassInRegularPackage.*; import static javax.xml.stream.XMLStreamConstants.*; public final class XmlFileTest { XMLStreamReader xmlReader; @Test public void generateXmlFileWithCoverageData() throws Exception { assumeTrue("xml".equals(System.getProperty("coverage-output"))); assumeTrue("loaded".equals(System.getProperty("coverage-classes"))); assumeTrue("src".equals(System.getProperty("coverage-srcDirs"))); new ClassInRegularPackage().doSomething(NestedEnum.Second); CodeCoverage.generateOutput(false); String parentDir = Configuration.getOrChooseOutputDirectory(""); InputStream xmlFile = new FileInputStream(new File(parentDir, "coverage.xml")); xmlReader = XMLInputFactory.newFactory().createXMLStreamReader(xmlFile); assertEquals("UTF-8", xmlReader.getCharacterEncodingScheme()); // <coverage version="1"> assertEquals(START_ELEMENT, xmlReader.nextTag()); assertEquals("coverage", xmlReader.getLocalName()); assertEquals("1", xmlReader.getAttributeValue(0)); // <file path="..."> assertEquals(START_ELEMENT, xmlReader.nextTag()); assertEquals("file", xmlReader.getLocalName()); assertEquals(1, xmlReader.getAttributeCount()); assertEquals("path", xmlReader.getAttributeLocalName(0)); assertEquals("src/integrationTests/ClassInRegularPackage.java", xmlReader.getAttributeValue(0)); assertLineToCover(3, true); assertLineToCover(7, true); assertLineToCover(10, true); assertLineToCover(13, true); assertLineToCover(24, true); assertLineToCover(26, false); assertLineToCover(29, true); assertLineToCover(33, true, 2, 1); // </file> assertEquals(END_ELEMENT, xmlReader.nextTag()); assertEquals("file", xmlReader.getLocalName()); // </coverage> assertEquals(END_ELEMENT, xmlReader.nextTag()); assertEquals("coverage", xmlReader.getLocalName()); } // <lineToCover lineNumber="n" covered="true|false"/> void assertLineToCover(int lineNumber, boolean covered) throws Exception { assertLineToCover(lineNumber, covered, 0, 0); } // <lineToCover lineNumber="n" covered="true|false" branchesToCover="n" coveredBranches="n"/> void assertLineToCover(int lineNumber, boolean covered, int branches, int coveredBranches) throws Exception { assertEquals(START_ELEMENT, xmlReader.nextTag()); assertEquals("lineToCover", xmlReader.getLocalName()); assertEquals(branches == 0 ? 2 : 4, xmlReader.getAttributeCount()); int attributeIndex = 0; assertEquals("lineNumber", xmlReader.getAttributeLocalName(attributeIndex)); assertEquals(Integer.toString(lineNumber), xmlReader.getAttributeValue(attributeIndex)); attributeIndex++; assertEquals("covered", xmlReader.getAttributeLocalName(attributeIndex)); assertEquals(Boolean.toString(covered), xmlReader.getAttributeValue(attributeIndex)); if (branches > 0) { attributeIndex++; assertEquals("branchesToCover", xmlReader.getAttributeLocalName(attributeIndex)); assertEquals(Integer.toString(branches), xmlReader.getAttributeValue(attributeIndex)); attributeIndex++; assertEquals("coveredBranches", xmlReader.getAttributeLocalName(attributeIndex)); assertEquals(Integer.toString(coveredBranches), xmlReader.getAttributeValue(attributeIndex)); } assertEquals(END_ELEMENT, xmlReader.nextTag()); } }