Home | History | Annotate | Download | only in table
      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