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 *******************************************************************************/ 12 package org.jacoco.report.internal.html.table; 13 14 import static org.junit.Assert.assertEquals; 15 import static org.junit.Assert.assertTrue; 16 17 import java.io.IOException; 18 import java.util.Arrays; 19 import java.util.Comparator; 20 import java.util.Locale; 21 22 import org.jacoco.core.analysis.CoverageNodeImpl; 23 import org.jacoco.core.analysis.ICoverageNode; 24 import org.jacoco.core.analysis.ICoverageNode.CounterEntity; 25 import org.jacoco.core.analysis.ICoverageNode.ElementType; 26 import org.jacoco.core.internal.analysis.CounterImpl; 27 import org.jacoco.report.MemoryMultiReportOutput; 28 import org.jacoco.report.internal.ReportOutputFolder; 29 import org.jacoco.report.internal.html.HTMLDocument; 30 import org.jacoco.report.internal.html.HTMLElement; 31 import org.jacoco.report.internal.html.HTMLSupport; 32 import org.jacoco.report.internal.html.resources.Resources; 33 import org.junit.After; 34 import org.junit.Before; 35 import org.junit.Test; 36 import org.w3c.dom.Document; 37 38 /** 39 * Unit tests for {@link BarColumn}. 40 */ 41 public class BarColumnTest { 42 43 private MemoryMultiReportOutput output; 44 45 private ReportOutputFolder root; 46 47 private Resources resources; 48 49 private HTMLDocument doc; 50 51 private HTMLElement td; 52 53 private HTMLSupport support; 54 55 private IColumnRenderer column; 56 57 @Before 58 public void setup() throws Exception { 59 output = new MemoryMultiReportOutput(); 60 root = new ReportOutputFolder(output); 61 resources = new Resources(root); 62 doc = new HTMLDocument(root.createFile("Test.html"), "UTF-8"); 63 doc.head().title(); 64 td = doc.body().table("somestyle").tr().td(); 65 support = new HTMLSupport(); 66 column = new BarColumn(CounterEntity.LINE, Locale.ENGLISH); 67 } 68 69 @After 70 public void teardown() throws IOException { 71 output.close(); 72 output.assertAllClosed(); 73 } 74 75 @Test 76 public void testInit() throws Exception { 77 final ITableItem i = createItem(6, 24); 78 assertTrue(column.init(Arrays.asList(i), i.getNode())); 79 doc.close(); 80 } 81 82 @Test 83 public void testFooter() throws Exception { 84 column.footer(td, createNode(15, 5), resources, root); 85 doc.close(); 86 final Document doc = support.parse(output.getFile("Test.html")); 87 assertEquals("15 of 20", 88 support.findStr(doc, "/html/body/table/tr/td/text()")); 89 } 90 91 @Test 92 public void testBarWidths() throws Exception { 93 final ITableItem i1 = createItem(15, 5); 94 final ITableItem i2 = createItem(6, 24); 95 column.init(Arrays.asList(i1, i2), createNode(21, 29)); 96 column.item(td, i1, resources, root); 97 doc.close(); 98 final Document doc = support.parse(output.getFile("Test.html")); 99 100 assertEquals("2", 101 support.findStr(doc, "count(/html/body/table/tr[1]/td/img)")); 102 103 // red bar 104 assertEquals("jacoco-resources/redbar.gif", 105 support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@src")); 106 assertEquals("15", 107 support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@alt")); 108 assertEquals("60", 109 support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@width")); 110 111 // green bar 112 assertEquals("jacoco-resources/greenbar.gif", 113 support.findStr(doc, "/html/body/table/tr[1]/td/img[2]/@src")); 114 assertEquals("5", 115 support.findStr(doc, "/html/body/table/tr[1]/td/img[2]/@alt")); 116 assertEquals("20", 117 support.findStr(doc, "/html/body/table/tr[1]/td/img[2]/@width")); 118 } 119 120 @Test 121 public void testRedBarOnly() throws Exception { 122 final ITableItem i1 = createItem(20, 0); 123 column.init(Arrays.asList(i1), createNode(20, 0)); 124 column.item(td, i1, resources, root); 125 doc.close(); 126 final Document doc = support.parse(output.getFile("Test.html")); 127 128 assertEquals("1", 129 support.findStr(doc, "count(/html/body/table/tr[1]/td/img)")); 130 131 // red bar 132 assertEquals("jacoco-resources/redbar.gif", 133 support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@src")); 134 assertEquals("20", 135 support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@alt")); 136 assertEquals("120", 137 support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@width")); 138 } 139 140 @Test 141 public void testGreenBarOnly() throws Exception { 142 final ITableItem i1 = createItem(00, 20); 143 column.init(Arrays.asList(i1), createNode(00, 20)); 144 column.item(td, i1, resources, root); 145 doc.close(); 146 final Document doc = support.parse(output.getFile("Test.html")); 147 148 assertEquals("1", 149 support.findStr(doc, "count(/html/body/table/tr[1]/td/img)")); 150 151 // red bar 152 assertEquals("jacoco-resources/greenbar.gif", 153 support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@src")); 154 assertEquals("20", 155 support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@alt")); 156 assertEquals("120", 157 support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@width")); 158 } 159 160 @Test 161 public void testNoBars() throws Exception { 162 final ITableItem i1 = createItem(00, 00); 163 column.init(Arrays.asList(i1), createNode(00, 00)); 164 column.item(td, i1, resources, root); 165 doc.close(); 166 final Document doc = support.parse(output.getFile("Test.html")); 167 168 assertEquals("0", 169 support.findStr(doc, "count(/html/body/table/tr[1]/td/img)")); 170 } 171 172 @Test 173 public void testLocale() throws Exception { 174 final BarColumn col = new BarColumn(CounterEntity.LINE, Locale.FRENCH); 175 final ITableItem i1 = createItem(0, 123456); 176 col.init(Arrays.asList(i1), createNode(00, 20)); 177 col.item(td, i1, resources, root); 178 doc.close(); 179 final Document doc = support.parse(output.getFile("Test.html")); 180 181 assertEquals("123\u00a0456", 182 support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@alt")); 183 } 184 185 @Test 186 public void testComparator1() throws Exception { 187 final Comparator<ITableItem> c = column.getComparator(); 188 final ITableItem i1 = createItem(50, 50); 189 final ITableItem i2 = createItem(20, 80); 190 assertTrue(c.compare(i1, i2) < 0); 191 assertTrue(c.compare(i2, i1) > 0); 192 assertEquals(0, c.compare(i1, i1)); 193 doc.close(); 194 } 195 196 @Test 197 public void testComparator2() throws Exception { 198 final Comparator<ITableItem> c = column.getComparator(); 199 final ITableItem i1 = createItem(50, 60); 200 final ITableItem i2 = createItem(50, 50); 201 assertTrue(c.compare(i1, i2) < 0); 202 assertTrue(c.compare(i2, i1) > 0); 203 assertEquals(0, c.compare(i1, i1)); 204 doc.close(); 205 } 206 207 private ITableItem createItem(final int missed, final int covered) { 208 final ICoverageNode node = createNode(missed, covered); 209 return new ITableItem() { 210 public String getLinkLabel() { 211 return "Foo"; 212 } 213 214 public String getLink(ReportOutputFolder base) { 215 return null; 216 } 217 218 public String getLinkStyle() { 219 return Resources.getElementStyle(node.getElementType()); 220 } 221 222 public ICoverageNode getNode() { 223 return node; 224 } 225 }; 226 } 227 228 private CoverageNodeImpl createNode(final int missed, final int covered) { 229 return new CoverageNodeImpl(ElementType.GROUP, "Foo") { 230 { 231 this.lineCounter = CounterImpl.getInstance(missed, covered); 232 } 233 }; 234 } 235 236 } 237