/*
* 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.surt;
import junit.framework.TestCase;
import org.apache.commons.httpclient.URIException;
/**
*
*
* @author brad
* @version $Date$, $Revision$
*/
public class SURTTokenizerTest extends TestCase {
SURTTokenizer tok;
/**
* Test method for 'org.archive.wayback.accesscontrol.SURTTokenizer.nextSearch()'
*/
public void testSimple() {
tok = toSurtT("http://www.archive.org/foo");
assertEquals("(org,archive,www,)/foo\t",tok.nextSearch());
assertEquals("(org,archive,www,)/foo",tok.nextSearch());
assertEquals("(org,archive,www,)/",tok.nextSearch());
assertEquals("(org,archive,www",tok.nextSearch());
assertEquals("(org,archive",tok.nextSearch());
assertEquals("(org",tok.nextSearch());
assertNull(tok.nextSearch());
}
/** test */
public void testSlashPathTrailingSlash() {
tok = toSurtT("http://www.archive.org/foo/");
assertEquals("(org,archive,www,)/foo/\t",tok.nextSearch());
assertEquals("(org,archive,www,)/foo/",tok.nextSearch());
assertEquals("(org,archive,www,)/foo",tok.nextSearch());
assertEquals("(org,archive,www,)/",tok.nextSearch());
assertEquals("(org,archive,www",tok.nextSearch());
assertEquals("(org,archive",tok.nextSearch());
assertEquals("(org",tok.nextSearch());
assertNull(tok.nextSearch());
}
/** test */
public void testSlashPathTwoDirs() {
tok = toSurtT("http://www.archive.org/foo/bar");
assertEquals("(org,archive,www,)/foo/bar\t",tok.nextSearch());
assertEquals("(org,archive,www,)/foo/bar",tok.nextSearch());
assertEquals("(org,archive,www,)/foo",tok.nextSearch());
assertEquals("(org,archive,www,)/",tok.nextSearch());
assertEquals("(org,archive,www",tok.nextSearch());
assertEquals("(org,archive",tok.nextSearch());
assertEquals("(org",tok.nextSearch());
assertNull(tok.nextSearch());
}
/** test */
public void testSlashPathTwoDirsTrailingSlash() {
tok = toSurtT("http://www.archive.org/foo/bar/");
assertEquals("(org,archive,www,)/foo/bar/\t",tok.nextSearch());
assertEquals("(org,archive,www,)/foo/bar/",tok.nextSearch());
assertEquals("(org,archive,www,)/foo/bar",tok.nextSearch());
assertEquals("(org,archive,www,)/foo",tok.nextSearch());
assertEquals("(org,archive,www,)/",tok.nextSearch());
assertEquals("(org,archive,www",tok.nextSearch());
assertEquals("(org,archive",tok.nextSearch());
assertEquals("(org",tok.nextSearch());
assertNull(tok.nextSearch());
}
/** test */
public void testSlashPath() {
tok = toSurtT("http://www.archive.org/");
assertEquals("(org,archive,www,)/\t",tok.nextSearch());
assertEquals("(org,archive,www,)/",tok.nextSearch());
assertEquals("(org,archive,www",tok.nextSearch());
assertEquals("(org,archive",tok.nextSearch());
assertEquals("(org",tok.nextSearch());
assertNull(tok.nextSearch());
}
/** test */
public void testEmptyPath() {
tok = toSurtT("http://www.archive.org");
assertEquals("(org,archive,www,)/\t",tok.nextSearch());
assertEquals("(org,archive,www,)/",tok.nextSearch());
assertEquals("(org,archive,www",tok.nextSearch());
assertEquals("(org,archive",tok.nextSearch());
assertEquals("(org",tok.nextSearch());
assertNull(tok.nextSearch());
}
/** test */
public void testEmptyPathMore() {
tok = toSurtT("http://brad.www.archive.org");
assertEquals("(org,archive,www,brad,)/\t",tok.nextSearch());
assertEquals("(org,archive,www,brad,)/",tok.nextSearch());
assertEquals("(org,archive,www,brad",tok.nextSearch());
assertEquals("(org,archive,www",tok.nextSearch());
assertEquals("(org,archive",tok.nextSearch());
assertEquals("(org",tok.nextSearch());
assertNull(tok.nextSearch());
}
/** test */
public void testShortPathHash() {
tok = toSurtT("http://www.archive.org/one/two#hash");
assertEquals("(org,archive,www,)/one/two\t",tok.nextSearch());
assertEquals("(org,archive,www,)/one/two",tok.nextSearch());
assertEquals("(org,archive,www,)/one",tok.nextSearch());
assertEquals("(org,archive,www,)/",tok.nextSearch());
assertEquals("(org,archive,www",tok.nextSearch());
assertEquals("(org,archive",tok.nextSearch());
assertEquals("(org",tok.nextSearch());
assertNull(tok.nextSearch());
}
/** test */
public void testCGI1() {
tok = toSurtT("http://www.archive.org/cgi?foobar");
assertEquals("(org,archive,www,)/cgi?foobar\t",tok.nextSearch());
assertEquals("(org,archive,www,)/cgi?foobar",tok.nextSearch());
assertEquals("(org,archive,www,)/cgi",tok.nextSearch());
assertEquals("(org,archive,www,)/",tok.nextSearch());
assertEquals("(org,archive,www",tok.nextSearch());
assertEquals("(org,archive",tok.nextSearch());
assertEquals("(org",tok.nextSearch());
assertNull(tok.nextSearch());
}
/** test */
public void testPort() {
tok = toSurtT("http://www.archive.org:8080/cgi?foobar");
assertEquals("(org,archive,www,:8080)/cgi?foobar\t",tok.nextSearch());
assertEquals("(org,archive,www,:8080)/cgi?foobar",tok.nextSearch());
assertEquals("(org,archive,www,:8080)/cgi",tok.nextSearch());
assertEquals("(org,archive,www,:8080)/",tok.nextSearch());
assertEquals("(org,archive,www,:8080",tok.nextSearch());
assertEquals("(org,archive,www",tok.nextSearch());
assertEquals("(org,archive",tok.nextSearch());
assertEquals("(org",tok.nextSearch());
assertNull(tok.nextSearch());
}
/** test */
public void testLogin() {
tok = toSurtT("http://brad@www.archive.org/cgi?foobar");
assertEquals("(org,archive,www,@brad)/cgi?foobar\t",tok.nextSearch());
assertEquals("(org,archive,www,@brad)/cgi?foobar",tok.nextSearch());
assertEquals("(org,archive,www,@brad)/cgi",tok.nextSearch());
assertEquals("(org,archive,www,@brad)/",tok.nextSearch());
assertEquals("(org,archive,www,@brad",tok.nextSearch());
assertEquals("(org,archive,www",tok.nextSearch());
assertEquals("(org,archive",tok.nextSearch());
assertEquals("(org",tok.nextSearch());
assertNull(tok.nextSearch());
}
/** test */
public void testLoginPass() {
tok = toSurtT("http://brad:pass@www.archive.org/cgi?foobar");
assertEquals("(org,archive,www,@brad:pass)/cgi?foobar\t",tok.nextSearch());
assertEquals("(org,archive,www,@brad:pass)/cgi?foobar",tok.nextSearch());
assertEquals("(org,archive,www,@brad:pass)/cgi",tok.nextSearch());
assertEquals("(org,archive,www,@brad:pass)/",tok.nextSearch());
assertEquals("(org,archive,www,@brad:pass",tok.nextSearch());
assertEquals("(org,archive,www",tok.nextSearch());
assertEquals("(org,archive",tok.nextSearch());
assertEquals("(org",tok.nextSearch());
assertNull(tok.nextSearch());
}
/** test */
public void testPreSURTedLoginPass() {
tok = toSurtT("(org,archive,www,@brad:pass)/cgi?foobar");
assertEquals("(org,archive,www,@brad:pass)/cgi?foobar\t",tok.nextSearch());
assertEquals("(org,archive,www,@brad:pass)/cgi?foobar",tok.nextSearch());
assertEquals("(org,archive,www,@brad:pass)/cgi",tok.nextSearch());
assertEquals("(org,archive,www,@brad:pass)/",tok.nextSearch());
assertEquals("(org,archive,www,@brad:pass",tok.nextSearch());
assertEquals("(org,archive,www",tok.nextSearch());
assertEquals("(org,archive",tok.nextSearch());
assertEquals("(org",tok.nextSearch());
assertNull(tok.nextSearch());
}
/** test */
public void testLoginPassPort() {
tok = toSurtT("http://brad:pass@www.archive.org:8080/cgi?foobar");
assertEquals("(org,archive,www,:8080@brad:pass)/cgi?foobar\t",tok.nextSearch());
assertEquals("(org,archive,www,:8080@brad:pass)/cgi?foobar",tok.nextSearch());
assertEquals("(org,archive,www,:8080@brad:pass)/cgi",tok.nextSearch());
assertEquals("(org,archive,www,:8080@brad:pass)/",tok.nextSearch());
assertEquals("(org,archive,www,:8080@brad:pass",tok.nextSearch());
assertEquals("(org,archive,www,:8080",tok.nextSearch());
assertEquals("(org,archive,www",tok.nextSearch());
assertEquals("(org,archive",tok.nextSearch());
assertEquals("(org",tok.nextSearch());
assertNull(tok.nextSearch());
}
private SURTTokenizer toSurtT(final String u) {
SURTTokenizer tok = null;
try {
tok = new SURTTokenizer(u, false);
} catch (URIException e) {
e.printStackTrace();
assertFalse("URL Exception " + e.getLocalizedMessage(),true);
}
return tok;
}
}