1/******************************************************************************* 2 * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors 3 * All rights reserved. This program and the accompanying materials 4 * are made available under the terms of the Eclipse Public License v1.0 5 * which accompanies this distribution, and is available at 6 * http://www.eclipse.org/legal/epl-v10.html 7 * 8 * Contributors: 9 * Marc R. Hoffmann - initial API and implementation 10 * 11 *******************************************************************************/ 12package org.jacoco.report; 13 14import static org.junit.Assert.assertEquals; 15import static org.junit.Assert.assertNotNull; 16import static org.junit.Assert.assertNull; 17 18import java.io.IOException; 19import java.io.Reader; 20import java.util.HashMap; 21import java.util.Map; 22 23import org.junit.Before; 24import org.junit.Test; 25 26/** 27 * Unit tests for {@link MultiSourceFileLocator}. 28 */ 29public class MultiSourceFileLocatorTest { 30 31 private MultiSourceFileLocator locator; 32 33 @Before 34 public void setup() { 35 locator = new MultiSourceFileLocator(7); 36 } 37 38 @Test 39 public void testGetTabWidth() throws IOException { 40 assertEquals(7, locator.getTabWidth()); 41 } 42 43 @Test 44 public void testEmpty() throws IOException { 45 assertNull(locator.getSourceFile("org/jacoco/example", "Test.java")); 46 } 47 48 @Test 49 public void testNohit() throws IOException { 50 final StubLocator loc1 = new StubLocator(); 51 locator.add(loc1); 52 final StubLocator loc2 = new StubLocator(); 53 locator.add(loc2); 54 final StubLocator loc3 = new StubLocator(); 55 locator.add(loc3); 56 57 assertNull(locator.getSourceFile("org/jacoco/example", "Test.java")); 58 } 59 60 @Test 61 public void testHit() throws IOException { 62 final StubLocator loc1 = new StubLocator(); 63 loc1.put("org/jacoco/example/Test1.java", '1'); 64 locator.add(loc1); 65 final StubLocator loc2 = new StubLocator(); 66 loc2.put("org/jacoco/example/Test2.java", '2'); 67 locator.add(loc2); 68 final StubLocator loc3 = new StubLocator(); 69 loc3.put("org/jacoco/example/Test3.java", '3'); 70 locator.add(loc3); 71 72 final Reader source = locator.getSourceFile("org/jacoco/example", 73 "Test2.java"); 74 assertNotNull(source); 75 assertEquals('2', source.read()); 76 } 77 78 @Test 79 public void testPrecedence() throws IOException { 80 final StubLocator loc1 = new StubLocator(); 81 loc1.put("org/jacoco/example/TestX.java", '1'); 82 locator.add(loc1); 83 final StubLocator loc2 = new StubLocator(); 84 loc2.put("org/jacoco/example/Test.java", '2'); 85 locator.add(loc2); 86 final StubLocator loc3 = new StubLocator(); 87 loc3.put("org/jacoco/example/Test.java", '3'); 88 locator.add(loc3); 89 90 final Reader source = locator.getSourceFile("org/jacoco/example", 91 "Test.java"); 92 assertNotNull(source); 93 assertEquals('2', source.read()); 94 } 95 96 private static class StubLocator implements ISourceFileLocator { 97 98 private final Map<String, Reader> sources = new HashMap<String, Reader>(); 99 100 void put(String path, char content) { 101 sources.put(path, new StubReader(content)); 102 } 103 104 public Reader getSourceFile(String packageName, String fileName) 105 throws IOException { 106 return sources.get(packageName + "/" + fileName); 107 } 108 109 public int getTabWidth() { 110 return 0; 111 } 112 } 113 114 private static class StubReader extends Reader { 115 116 private final char content; 117 118 StubReader(char content) { 119 this.content = content; 120 } 121 122 @Override 123 public int read(char[] cbuf, int off, int len) throws IOException { 124 for (int idx = 0; idx < len; idx++) { 125 cbuf[off + idx] = content; 126 } 127 return len; 128 } 129 130 @Override 131 public void close() throws IOException { 132 } 133 134 } 135 136} 137