package org.projectusus.ui.internal;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
import org.projectusus.core.basis.FileHotspot;
import org.projectusus.core.basis.SourceCodeLocation;
public class TestSortingOfDisplayHotspots {
@Test
public void trendForConstantHotspot() {
List<FileDisplayHotspot> hotspots = createHotspotList( 3, 3 );
assertEquals( 0, hotspots.get( 0 ).getTrend() );
}
@Test
public void trendForImprovedHotspot() {
List<FileDisplayHotspot> hotspots = createHotspotList( 6, 3 );
assertEquals( -3, hotspots.get( 0 ).getTrend() );
}
@Test
public void trendForWorsenedHotspot() {
List<FileDisplayHotspot> hotspots = createHotspotList( 3, 7 );
assertEquals( 4, hotspots.get( 0 ).getTrend() );
}
@Test
public void twoUnchangedHotspots_largerValueIsFirst() {
List<FileDisplayHotspot> hotspots = createHotspotList( 3, 3, 5, 5 );
Collections.sort( hotspots );
assertEquals( 5, hotspots.get( 0 ).currentMetricsValue() );
assertEquals( 3, hotspots.get( 1 ).currentMetricsValue() );
// trends are both 0
assertEquals( 0, hotspots.get( 0 ).getTrend() );
assertEquals( 0, hotspots.get( 1 ).getTrend() );
}
@Test
public void twoWorsenedHotspots_largerValueIsFirst() {
List<FileDisplayHotspot> hotspots = createHotspotList( 1, 4, 5, 6 );
Collections.sort( hotspots );
assertEquals( 6, hotspots.get( 0 ).currentMetricsValue() );
assertEquals( 4, hotspots.get( 1 ).currentMetricsValue() );
// although the smaller trend comes first:
assertEquals( 1, hotspots.get( 0 ).getTrend() );
assertEquals( 3, hotspots.get( 1 ).getTrend() );
}
@Test
public void twoImprovedHotspots_largerValueIsFirst() {
List<FileDisplayHotspot> hotspots = createHotspotList( 3, 2, 9, 4 );
Collections.sort( hotspots );
assertEquals( 4, hotspots.get( 0 ).currentMetricsValue() );
assertEquals( 2, hotspots.get( 1 ).currentMetricsValue() );
// although the smaller trend comes first:
assertEquals( -5, hotspots.get( 0 ).getTrend() );
assertEquals( -1, hotspots.get( 1 ).getTrend() );
}
@Test
public void improvedAndWorsenedHotspots_largerValueIsFirst() {
List<FileDisplayHotspot> hotspots = createHotspotList( 3, 2, 2, 6 );
Collections.sort( hotspots );
assertEquals( 6, hotspots.get( 0 ).currentMetricsValue() );
assertEquals( 2, hotspots.get( 1 ).currentMetricsValue() );
assertEquals( 4, hotspots.get( 0 ).getTrend() );
assertEquals( -1, hotspots.get( 1 ).getTrend() );
}
@Test
public void worsenedAndImprovedHotspots_largerValueIsFirst() {
List<FileDisplayHotspot> hotspots = createHotspotList( 3, 4, 6, 5 );
Collections.sort( hotspots );
assertEquals( 5, hotspots.get( 0 ).currentMetricsValue() );
assertEquals( 4, hotspots.get( 1 ).currentMetricsValue() );
// although the smaller trend comes first:
assertEquals( -1, hotspots.get( 0 ).getTrend() );
assertEquals( 1, hotspots.get( 1 ).getTrend() );
}
@Test
public void twoEqualHotspots_OneImproved_largerTrendIsFirst() {
List<FileDisplayHotspot> hotspots = createHotspotList( 4, 4, 5, 4 );
Collections.sort( hotspots );
assertEquals( 0, hotspots.get( 0 ).getTrend() );
assertEquals( -1, hotspots.get( 1 ).getTrend() );
}
@Test
public void twoEqualHotspots_OneWorsened_largerTrendIsFirst() {
List<FileDisplayHotspot> hotspots = createHotspotList( 4, 4, 3, 4 );
Collections.sort( hotspots );
assertEquals( 1, hotspots.get( 0 ).getTrend() );
assertEquals( 0, hotspots.get( 1 ).getTrend() );
}
@Test
public void twoEqualHotspots_OneImprovedOneWorsened_largerTrendIsFirst() {
List<FileDisplayHotspot> hotspots = createHotspotList( 5, 4, 3, 4 );
Collections.sort( hotspots );
assertEquals( 1, hotspots.get( 0 ).getTrend() );
assertEquals( -1, hotspots.get( 1 ).getTrend() );
}
@Test
public void twoEqualHotspots_SameTrend_smallerNameIsFirst() {
List<FileDisplayHotspot> hotspots = createHotspotList( 5, 4, 5, 4 );
Collections.sort( hotspots );
assertEquals( "hotspot0", hotspots.get( 0 ).getName() );
assertEquals( "hotspot2", hotspots.get( 1 ).getName() );
}
private List<FileDisplayHotspot> createHotspotList( int... oldAndNewPairs ) {
List<FileDisplayHotspot> result = new ArrayList<FileDisplayHotspot>();
for( int i = 0; i < oldAndNewPairs.length - 1; i = i + 2 ) {
SourceCodeLocation location = new SourceCodeLocation( "hotspot" + i, 0, 0 );
FileHotspot oldHotspot = new FileHotspot( location, oldAndNewPairs[i], null );
FileHotspot newHotspot = new FileHotspot( location, oldAndNewPairs[i + 1], null );
result.add( new FileDisplayHotspot( oldHotspot, newHotspot ) );
}
return result;
}
}