/*
* This file is part of the Wayback archival access software
* (http://archive-access.sourceforge.net/projects/wayback/).
*
* Licensed to the Internet Archive (IA) by one or more individual
* contributors.
*
* The IA licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.archive.wayback.archivalurl;
import java.lang.reflect.Method;
import junit.framework.TestCase;
import org.archive.wayback.core.WaybackRequest;
/**
* @see PathRequestParserTest
* @author brad
*
*/
public class ArchivalUrlTest extends TestCase {
/**
* Test method for {@link org.archive.wayback.archivalurl.ArchivalUrl#toPrefixQueryString(java.lang.String)}.
*/
public void testToString_PrefixQuery() {
WaybackRequest wbr = new WaybackRequest();
wbr.setUrlQueryRequest();
wbr.setRequestUrl("http://www.yahoo.com/");
ArchivalUrl au = new ArchivalUrl(wbr);
assertEquals("*/http://www.yahoo.com/*", au.toString());
}
/**
* Test method for {@link org.archive.wayback.archivalurl.ArchivalUrl#toQueryString(java.lang.String)}.
*/
public void testToString_CaptureQuery() {
WaybackRequest wbr = new WaybackRequest();
wbr.setCaptureQueryRequest();
wbr.setRequestUrl("http://www.yahoo.com/");
ArchivalUrl au = new ArchivalUrl(wbr);
assertEquals("*/http://www.yahoo.com/",au.toString());
}
public void testToString_CaptureQuery_SpecificDateRange() {
WaybackRequest wbr = new WaybackRequest();
wbr.setCaptureQueryRequest();
wbr.setRequestUrl("http://www.yahoo.com/");
wbr.setStartTimestamp("20100101000000");
wbr.setEndTimestamp("20101231235959");
ArchivalUrl au = new ArchivalUrl(wbr);
assertEquals("20100101000000-20101231235959*/http://www.yahoo.com/", au.toString());
// Open ended date ranges
wbr.setEndTimestamp(null);
assertEquals("20100101000000-*/http://www.yahoo.com/", au.toString());
wbr.setStartTimestamp(null);
wbr.setEndTimestamp("20101231235959");
assertEquals("-20101231235959*/http://www.yahoo.com/", au.toString());
// Query for exact date
wbr.put(WaybackRequest.REQUEST_EXACT_DATE, "20100101000000");
assertEquals("20100101000000*/http://www.yahoo.com/", au.toString());
}
private WaybackRequest createReplayWaybackRequest() {
WaybackRequest wbr = new WaybackRequest();
wbr.setReplayRequest();
wbr.setReplayTimestamp("20010101000000");
wbr.setRequestUrl("http://www.yahoo.com/");
return wbr;
}
/**
* Test method for {@link org.archive.wayback.archivalurl.ArchivalUrl#toReplayString(java.lang.String)}.
*/
public void testToString_ReplayRequest() {
WaybackRequest wbr = createReplayWaybackRequest();
ArchivalUrl au = new ArchivalUrl(wbr);
assertEquals("20010101000000/http://www.yahoo.com/", au.toString());
}
public String[][] CONTEXT_METHOD_FLAG = {
{ "setIdentityContext", "id" },
{ "setCSSContext", "cs" },
{ "setIMGContext", "im" },
{ "setObjectEmbedContext", "oe" },
{ "setJSContext", "js" },
{ "setFrameWrapperContext", "fw" },
{ "setIFrameWrapperContext", "if" }
};
public void testToString_ReplayRequest_Contexts() throws Exception {
for (String[] tc : CONTEXT_METHOD_FLAG) {
WaybackRequest wbr = createReplayWaybackRequest();
String setterName = tc[0];
String flag = tc[1];
// I know there's a method ArchivalUrl.assignFlags() for translating flag text
// into flags of WeybackRequest, but I should not use a method of class under
// test for building test sample!
try {
Method setter = wbr.getClass().getMethod(setterName, boolean.class);
setter.invoke(wbr, Boolean.TRUE);
} catch (NoSuchMethodException ex) {
fail("WaybackRequest has no method \"" + setterName + "(boolean)\"");
}
ArchivalUrl au = new ArchivalUrl(wbr);
assertEquals("20010101000000" + flag + "_/http://www.yahoo.com/", au.toString());
}
// actually current implementation allows multiple context flags to be true
// at the same time. do we need to test certain combinations?
}
}