package com.widowcrawler.parse;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
/**
* @author Scott Mansfield
*/
public class LinkNormalizerTest {
private LinkNormalizer linkNormalizer;
@Before
public void before() {
this.linkNormalizer = new LinkNormalizer();
}
@SuppressWarnings("ConstantConditions")
@Test(expected = NullPointerException.class)
public void normalize_originalIsNull_throwsNullPointerException() {
// Arrange
String original = null;
String extracted = "http://www.baz.com/quux";
// Act
String output = linkNormalizer.normalize(original, extracted);
// Assert
assertEquals(extracted, output);
}
@SuppressWarnings("ConstantConditions")
@Test(expected = NullPointerException.class)
public void normalize_extractedIsNull_throwsNullPointerException() {
// Arrange
String original = "http://www.foo.com/bar";
String extracted = null;
// Act
String output = linkNormalizer.normalize(original, extracted);
// Assert
// nothing to assert
}
@Test(expected = IllegalArgumentException.class)
public void normalize_originalIsBlank_throwsIllegalArgumentException() {
// Arrange
String original = "";
String extracted = "http://www.baz.com/quux";
// Act
String output = linkNormalizer.normalize(original, extracted);
// Assert
// nothing to assert
}
@Test
public void normalize_extractedIsBadURI_returnsNull() {
// Arrange
String original = "http://www.foo.com/bar";
String extracted = "ij><g8o.hp(<G^F*";
// Act
String output = linkNormalizer.normalize(original, extracted);
// Assert
assertNull(output);
}
@Test
public void normalize_extractedIsFullURI_noChange() {
// Arrange
String original = "http://www.foo.com/bar";
String extracted = "http://www.baz.com/quux";
// Act
String output = linkNormalizer.normalize(original, extracted);
// Assert
// nothing to assert
}
@Test
public void normalize_extractedIsPathOnly_addsSchemeAndHost() {
// Arrange
String original = "http://www.foo.com/bar";
String extracted = "/quux";
// Act
String output = linkNormalizer.normalize(original, extracted);
// Assert
assertEquals("http://www.foo.com/quux", output);
}
@Test
public void normalize_extractedIsPathOnlyNoSlash_addsSchemeAndHost() {
// Arrange
String original = "http://www.foo.com/bar";
String extracted = "quux";
// Act
String output = linkNormalizer.normalize(original, extracted);
// Assert
assertEquals("http://www.foo.com/quux", output);
}
@Test
public void normalize_extractedIsProtocolRelative_addsScheme() {
// Arrange
String original = "http://www.foo.com/bar";
String extracted = "//www.baz.com/quux";
// Act
String output = linkNormalizer.normalize(original, extracted);
// Assert
assertEquals("http://www.baz.com/quux", output);
}
@Test
public void normalize_extractedIsFullURIWithBadPath_noChange() {
// Arrange
String original = "http://www.foo.com/bar";
String extracted = "http://www.baz.com/../quux";
// Act
String output = linkNormalizer.normalize(original, extracted);
// Assert
assertEquals(extracted, output);
}
@Test
public void normalize_extractedContainsRelativePathWithDirectoryChange_directoryChanged() {
// Arrange
String original = "http://www.foo.com/bar/baz";
String extracted = "../quux";
// Act
String output = linkNormalizer.normalize(original, extracted);
// Assert
assertEquals("http://www.foo.com/quux", output);
}
@Test
public void normalize_extractedContainsRelativePathWithDirectoryChangeAndOriginalIsDirectory_directoryChanged() {
// Arrange
String original = "http://www.foo.com/bar/baz/";
String extracted = "../quux";
// Act
String output = linkNormalizer.normalize(original, extracted);
// Assert
assertEquals("http://www.foo.com/bar/quux", output);
}
@Test
public void normalize_extractedContainsRelativePathWithExtraDirectoryChange_directoryChangedButStops() {
// Arrange
String original = "http://www.foo.com/bar/baz";
String extracted = "../../quux";
// Act
String output = linkNormalizer.normalize(original, extracted);
// Assert
assertEquals("http://www.foo.com/../quux", output);
}
}