/******************************************************************************* * Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Marc R. Hoffmann - initial API and implementation * *******************************************************************************/ package org.jacoco.ant; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; import java.util.ArrayList; import java.util.List; import org.apache.tools.ant.types.Resource; import org.apache.tools.ant.types.resources.FileResource; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; /** * Unit tests for {@link AntResourcesLocator}. */ public class AntResourcesLocatorTest { @Rule public final TemporaryFolder folder = new TemporaryFolder(); private AntResourcesLocator locator; @Before public void setup() { locator = new AntResourcesLocator("UTF-8", 8); } @Test public void testGetTabWidth() { assertEquals(8, locator.getTabWidth()); } @Test public void testEmpty() { assertTrue(locator.isEmpty()); } @Test public void testFile() throws IOException { locator.add(createFile("org/jacoco/example/Test.java", "AAA")); assertFalse(locator.isEmpty()); final Reader source = locator.getSourceFile("org/jacoco/example", "Test.java"); assertContent("AAA", source); } @Test public void testDirectory() throws IOException { createFile("src/org/jacoco/example/Test.java", "AAA"); locator.add(new FileResource(folder.getRoot(), "src")); assertFalse(locator.isEmpty()); final Reader source = locator.getSourceFile("org/jacoco/example", "Test.java"); assertContent("AAA", source); } @Test public void testFilePrecedence() throws IOException { createFile("src/org/jacoco/example/Test.java", "DDD"); locator.add(new FileResource(folder.getRoot(), "src")); locator.add(createFile("org/jacoco/example/Test.java", "FFF")); final Reader source = locator.getSourceFile("org/jacoco/example", "Test.java"); assertContent("FFF", source); } @Test public void testDirectoryOrdering() throws IOException { createFile("src1/org/jacoco/example/Test.java", "AAA"); locator.add(new FileResource(folder.getRoot(), "src1")); createFile("src2/org/jacoco/example/Test.java", "BBB"); locator.add(new FileResource(folder.getRoot(), "src2")); createFile("src3/org/jacoco/example/Test.java", "CCC"); locator.add(new FileResource(folder.getRoot(), "src3")); final Reader source = locator.getSourceFile("org/jacoco/example", "Test.java"); assertContent("AAA", source); } @Test public void testAddAll() throws IOException { List<Resource> resources = new ArrayList<Resource>(); resources.add(createFile("org/jacoco/example/Test1.java", "AAA")); resources.add(createFile("org/jacoco/example/Test2.java", "BBB")); locator.addAll(resources.iterator()); assertFalse(locator.isEmpty()); Reader source = locator.getSourceFile("org/jacoco/example", "Test1.java"); assertContent("AAA", source); source = locator.getSourceFile("org/jacoco/example", "Test2.java"); assertContent("BBB", source); } private Resource createFile(String path, String content) throws IOException { final File file = new File(folder.getRoot(), path); file.getParentFile().mkdirs(); final Writer writer = new OutputStreamWriter( new FileOutputStream(file), "UTF-8"); writer.write(content); writer.close(); return new FileResource(folder.getRoot(), path); } private void assertContent(String expected, Reader source) throws IOException { assertNotNull(source); final BufferedReader buffer = new BufferedReader(source); assertEquals(expected, buffer.readLine()); assertNull(buffer.readLine()); buffer.close(); } }