http://hostname:8080/hoge/?param1=value1¶m2=value2
と
http://hostname:8080/hoge/?param2=value2¶m1=value1
はサーバ側とすれば同じURLですが文字列で比較すると異なります。
URLを比較する便利なものを探しましたが見つからず、自作しました。
いけてないロジックなのでもっといい方法があれば教えてください。
import java.net.URI;
import java.net.URL;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.client.utils.URLEncodedUtils;
import org.junit.Assert;
public class AssertExtensions {
public static void assertUrlEquals(String expected, String actual) {
try {
URL url1 = new URL(expected);
URL url2 = new URL(actual);
URI uri1 = new URI(expected);
URI uri2 = new URI(actual);
List<NameValuePair> paramList1 = URLEncodedUtils.parse(uri1, "UTF-8");
List<NameValuePair> paramList2 = URLEncodedUtils.parse(uri2, "UTF-8");
if (url1.getHost().equals(url2.getHost())) {
if (url1.getPath().equals(url2.getPath())) {
if (url1.getPort() == url2.getPort()) {
if (url1.getProtocol().equals(url2.getProtocol())) {
if (paramList1.size() == paramList2.size()) {
int counter = 0;
for (NameValuePair a : paramList1) {
for (NameValuePair b : paramList2) {
if (a.equals(b)) {
counter++;
break;
}
}
}
if (counter == paramList1.size()) {
return;
}
}
}
}
}
}
} catch (Exception ex) {
}
Assert.fail("expected: " + expected + " but was: " + actual);
}
}