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.core.analysis; 13 14 import static org.jacoco.core.analysis.ICoverageNode.ElementType.GROUP; 15 import static org.junit.Assert.assertEquals; 16 import static org.junit.Assert.assertTrue; 17 18 import java.util.Comparator; 19 20 import org.jacoco.core.analysis.ICoverageNode.CounterEntity; 21 import org.jacoco.core.internal.analysis.CounterImpl; 22 import org.junit.Test; 23 24 /** 25 * Unit tests for {@link CounterComparator}. 26 */ 27 public class CounterComparatorTest { 28 29 @Test 30 public void testTotalItemsComparator() { 31 final Comparator<ICounter> cmp = CounterComparator.TOTALITEMS; 32 assertCmpLess(cmp, 19, 5, 19, 6); 33 assertCmpEquals(cmp, 20, 5, 19, 6); 34 assertCmpGreater(cmp, 21, 5, 19, 6); 35 } 36 37 @Test 38 public void testCoveredItemsComparator() { 39 final Comparator<ICounter> cmp = CounterComparator.COVEREDITEMS; 40 assertCmpLess(cmp, 73, 7, 42, 8); 41 assertCmpEquals(cmp, 42, 8, 82, 8); 42 assertCmpGreater(cmp, 21, 9, 32, 8); 43 } 44 45 @Test 46 public void testMissedItemsComparator() { 47 final Comparator<ICounter> cmp = CounterComparator.MISSEDITEMS; 48 assertCmpLess(cmp, 10, 40, 11, 80); 49 assertCmpEquals(cmp, 10, 40, 10, 80); 50 assertCmpGreater(cmp, 11, 39, 10, 80); 51 } 52 53 @Test 54 public void testCoveredRatioComparator() { 55 final Comparator<ICounter> cmp = CounterComparator.COVEREDRATIO; 56 assertCmpLess(cmp, 25, 25, 44, 46); 57 assertCmpEquals(cmp, 40, 10, 64, 16); 58 assertCmpGreater(cmp, 25, 25, 46, 44); 59 } 60 61 @Test 62 public void testMissedRatioComparator() { 63 final Comparator<ICounter> cmp = CounterComparator.MISSEDRATIO; 64 assertCmpLess(cmp, 25, 25, 46, 44); 65 assertCmpEquals(cmp, 40, 10, 64, 16); 66 assertCmpGreater(cmp, 25, 25, 44, 46); 67 } 68 69 @Test 70 public void testReverseComparator() { 71 final Comparator<ICounter> cmp = CounterComparator.TOTALITEMS.reverse(); 72 assertCmpGreater(cmp, 19, 5, 19, 6); 73 assertCmpEquals(cmp, 20, 5, 19, 6); 74 assertCmpLess(cmp, 21, 5, 19, 6); 75 } 76 77 @Test 78 public void testReverseReverseComparator() { 79 final Comparator<ICounter> cmp = CounterComparator.TOTALITEMS.reverse() 80 .reverse(); 81 assertCmpGreater(cmp, 21, 5, 19, 6); 82 assertCmpEquals(cmp, 20, 5, 19, 6); 83 assertCmpLess(cmp, 19, 5, 19, 6); 84 } 85 86 @Test 87 public void testNodeComparator1() { 88 ICoverageNode d1 = new MockNode(18); 89 ICoverageNode d2 = new MockNode(15); 90 final Comparator<ICoverageNode> cmp = CounterComparator.TOTALITEMS 91 .on(CounterEntity.INSTRUCTION); 92 assertTrue(cmp.compare(d1, d2) > 0); 93 } 94 95 @Test 96 public void testNodeComparator2() { 97 ICoverageNode d1 = new MockNode(18); 98 ICoverageNode d2 = new MockNode(15); 99 final Comparator<ICoverageNode> cmp = CounterComparator.TOTALITEMS 100 .on(CounterEntity.LINE); 101 assertEquals(0, cmp.compare(d1, d2), 0.0); 102 } 103 104 private void assertCmpEquals(Comparator<ICounter> cmp, int missed1, 105 int covered1, int missed2, int covered2) { 106 assertEquals(0, 107 cmp.compare(ctr(missed1, covered1), ctr(missed2, covered2)), 108 0.0); 109 } 110 111 private void assertCmpLess(Comparator<ICounter> cmp, int missed1, 112 int covered1, int missed2, int covered2) { 113 assertTrue(cmp.compare(ctr(missed1, covered1), ctr(missed2, covered2)) < 0); 114 } 115 116 private void assertCmpGreater(Comparator<ICounter> cmp, int missed1, 117 int covered1, int missed2, int covered2) { 118 assertTrue(cmp.compare(ctr(missed1, covered1), ctr(missed2, covered2)) > 0); 119 } 120 121 private CounterImpl ctr(int missed, int covered) { 122 return CounterImpl.getInstance(missed, covered); 123 } 124 125 private static final class MockNode extends CoverageNodeImpl { 126 MockNode(int total) { 127 super(GROUP, "mock"); 128 instructionCounter = CounterImpl.getInstance(total, 0); 129 } 130 } 131 132 } 133