package org.displaytag.test;
import junit.framework.Assert;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
/**
* Assert class used to compare URLs.
* @author Fabrizio Giustina
* @version $Revision$ ($Author$)
*/
public final class URLAssert
{
/**
* Don't instantiate.
*/
private URLAssert()
{
// unused
}
/**
* utility method for comparing two URLs.
* @param expectedUrl expected URL
* @param generatedUrl generated URL
*/
public static void assertEquals(String expectedUrl, String generatedUrl)
{
// hack for missing base url
if (expectedUrl.startsWith("?"))
{
expectedUrl = "[empty]" + expectedUrl;
}
if (generatedUrl.startsWith("?"))
{
generatedUrl = "[empty]" + generatedUrl;
}
// if urls contains parameters they could be written in different order
String[] generatedSplit = StringUtils.split(generatedUrl, "?#");
String[] expectedSplit = StringUtils.split(expectedUrl, "?#");
Assert.assertEquals(
"Different number of tokens (base, parameters, anchor) in link.",
generatedSplit.length,
expectedSplit.length);
// same base url
Assert.assertEquals("Wrong base url", expectedSplit[0], generatedSplit[0]);
// same anchor #
if (generatedSplit.length > 2)
{
Assert.assertEquals("Anchor is different", generatedSplit[2], expectedSplit[2]);
}
else if (generatedSplit.length > 1 && (generatedUrl.indexOf("?") == -1))
{
// url without parameters
Assert.assertEquals("Anchor is different", generatedSplit[1], expectedSplit[1]);
return;
}
// same parameters
if (generatedSplit.length > 1)
{
// compare parameters
String[] generatedParameters = StringUtils.split(StringUtils.replace(generatedSplit[1], "&", "&"), '&');
String[] expectedParameters = StringUtils.split(StringUtils.replace(expectedSplit[1], "&", "&"), '&');
Assert.assertEquals(
"Compared urls have different number of parameters",
expectedParameters.length,
generatedParameters.length);
for (int j = 0; j < expectedParameters.length; j++)
{
// assuming url?param == url?param=
String singleParam = expectedParameters[j];
if (singleParam.indexOf("=") == -1)
{
singleParam += "=";
}
Assert.assertTrue(
"Expected parameter " + singleParam + " could not be found in generated URL",
ArrayUtils.contains(generatedParameters, singleParam));
}
}
}
}