// Copyright 2012 Google Inc. All Rights Reserved.
package com.google.api.explorer.client.routing;
import com.google.api.explorer.client.routing.UrlBuilder.RootNavigationItem;
import com.google.common.collect.ImmutableMultimap;
import junit.framework.TestCase;
/**
* Tests for the {@link UrlBuilder} class.
*
*/
public class URLBuilderTest extends TestCase {
private UrlBuilder builder = new UrlBuilder();
/** Test that all URL builder steps through the method work properly. */
public void testMethodURL() {
builder.addRootNavigationItem(RootNavigationItem.PREFERRED_SERVICES);
assertEquals("p/", builder.toString());
builder.addService("plus", "v1");
assertEquals("p/plus/v1/", builder.toString());
builder.addMethodName("a.method.name");
assertEquals("p/plus/v1/a.method.name", builder.toString());
builder.addQueryString("akey=avalue");
assertEquals("p/plus/v1/a.method.name?akey=avalue", builder.toString());
}
/** Test selecting a history item. */
public void testHistoryUrl() {
builder.addRootNavigationItem(RootNavigationItem.REQUEST_HISTORY);
assertEquals("h/", builder.toString());
builder.addHistoryItemKey("1");
assertEquals("h/1", builder.toString());
}
/** Test jumping from a search result directly to a method. */
public void testSearchThroughMethod() {
builder.addSearchRoot("queryword");
assertEquals("search/queryword/", builder.toString());
builder.addMethodFromSearch("plus", "v1", "a.method.name");
assertEquals("search/queryword/m/plus/v1/a.method.name", builder.toString());
}
/** Tests that empty query params are allowed. */
public void testEmptyQueryParams() {
builder.addRootNavigationItem(RootNavigationItem.PREFERRED_SERVICES).addService("plus", "v1")
.addMethodName("a.method.name").addQueryParams(ImmutableMultimap.<String, String>of());
assertEquals("p/plus/v1/a.method.name?", builder.toString());
}
/** Test a subset of invalid transitions to make sure they are working properly. */
public void testInvalidTransitions() {
try {
builder.addQueryString("akey=avalue");
fail();
} catch (IllegalStateException e) {
assertEquals("", builder.toString());
}
try {
builder.addMethodFromSearch("plus", "v1", "a.method.name");
fail();
} catch (IllegalStateException e) {
assertEquals("", builder.toString());
}
try {
builder.addService("plus", "v1");
fail();
} catch (IllegalStateException e) {
assertEquals("", builder.toString());
}
builder.addRootNavigationItem(RootNavigationItem.PREFERRED_SERVICES);
assertEquals("p/", builder.toString());
try {
builder.addHistoryFromSearch("1");
fail();
} catch (IllegalStateException e) {
assertEquals("p/", builder.toString());
}
}
}