package org.limewire.ui.swing.search.resultpanel;
import org.limewire.ui.swing.search.resultpanel.SearchResultTruncator.FontWidthResolver;
import junit.framework.TestCase;
public class SearchResultTruncatorTest extends TestCase {
private SearchResultTruncatorImpl trunc;
private MockFontWidthResolver mockResolver;
@Override
protected void setUp() {
trunc = new SearchResultTruncatorImpl();
mockResolver = new MockFontWidthResolver();
}
public void testFitsWithinWidthDoesNoProcessing() {
mockResolver.width = 5;
assertEquals("heynow", trunc.truncateHeading("heynow", 6, mockResolver));
}
public void testTruncateEndOfText() {
String result = "<b>Foo</b> is my favorite word";
String expected = "<b>Foo</b> is my...";
mockResolver.satisfactoryWidth = 9;
mockResolver.satisfactoryString = expected;
assertEquals(expected, trunc.truncateHeading(result, 9, mockResolver));
}
public void testTruncateBeginningOfText() {
String result = "My favorite word is <b>Foo</b>";
String expected = "...rd is <b>Foo</b>";
mockResolver.satisfactoryWidth = 9;
mockResolver.satisfactoryString = expected;
assertEquals(expected, trunc.truncateHeading(result, 9, mockResolver));
}
public void testTruncateToMiddleOfText() {
String result = "I work for the <b>department</b> of redundancy <b>department</b>";
String expected = "... the <b>department</b>...";
mockResolver.satisfactoryWidth = 15;
mockResolver.satisfactoryString = expected;
assertEquals(expected, trunc.truncateHeading(result, 15, mockResolver));
}
public void testLongTextHasNoBoldMatch() {
String result = "I work for the department of redundancy department";
String expected = "I work for the ...";
mockResolver.satisfactoryWidth = 15;
mockResolver.satisfactoryString = expected;
assertEquals(expected, trunc.truncateHeading(result, 15, mockResolver));
}
public void testStripMultipleSpacesOutOfText() {
String result = "I work\r \nfor \t the department of redundancy department";
String expected = "I work for the ...";
mockResolver.satisfactoryWidth = 15;
mockResolver.satisfactoryString = expected;
assertEquals(expected, trunc.truncateHeading(result, 15, mockResolver));
}
public void testStripEmbeddedWhitespaceCharactersOutOfText() {
String result = "I wo\rk for \the departme\nt of redundancy department";
String expected = "I wo k for he departme t...";
mockResolver.satisfactoryWidth = 22;
mockResolver.satisfactoryString = expected;
assertEquals(expected, trunc.truncateHeading(result, 22, mockResolver));
}
public void testStripHTMLCaseInsensitivelyTags() {
String result = "<html>I work for the department of redundancy department</html>";
String expected = "I work for the department...";
mockResolver.satisfactoryWidth = 22;
mockResolver.satisfactoryString = expected;
assertEquals(expected, trunc.truncateHeading(result, 22, mockResolver));
result = "<HTML>I work for the department of redundancy department</HTML>";
assertEquals(expected, trunc.truncateHeading(result, 22, mockResolver));
}
public void testCantTruncateSmallTextWhenThePixelWidthIsTooSmall() {
String result = "Im";
String expected = "Im";
mockResolver.satisfactoryWidth = 1;
mockResolver.satisfactoryString = expected;
assertEquals(expected, trunc.truncateHeading(result, 1, mockResolver));
}
public void testTruncateSmallText() {
String result = "I'm a foo";
String expected = "I...";
mockResolver.satisfactoryWidth = 4;
mockResolver.satisfactoryString = expected;
assertEquals(expected, trunc.truncateHeading(result, 4, mockResolver));
}
private static class MockFontWidthResolver implements FontWidthResolver {
int width;
int satisfactoryWidth;
String satisfactoryString;
@Override
public int getPixelWidth(String text) {
if (satisfactoryString != null) {
if (text.equals(satisfactoryString)) {
return satisfactoryWidth;
}
return Integer.MAX_VALUE;
}
return width;
}
}
}