/*
* Copyright 2008 Google Inc.
*
* Licensed 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 com.google.gwt.safehtml.shared;
import com.google.gwt.core.client.GWT;
import com.google.gwt.junit.client.GWTTestCase;
/**
* Unit tests for {@link SafeHtmlUtils}.
*/
public class GwtSafeHtmlUtilsTest extends GWTTestCase {
private static final String CONSTANT_HTML =
"<a href=\"javascript:trusted()\">click here & enjoy</a>";
public void testEscape_noEscape() {
String escaped = SafeHtmlUtils.htmlEscape("foobar");
assertEquals("foobar", escaped);
}
public void testEscape_ampersand() {
String escaped = SafeHtmlUtils.htmlEscape("foo&bar");
assertEquals("foo&bar", escaped);
}
public void testEscape_ampersandAndBrackets() {
String escaped = SafeHtmlUtils.htmlEscape("fo<o&b<em>ar");
assertEquals("fo<o&b<em>ar", escaped);
}
public void testEscape_allMetaCharacters() {
String escaped = SafeHtmlUtils.htmlEscape("f\"bar \'<&em><e/m>oo&bar");
assertEquals(
"f"bar '<&em><e/m>oo&bar", escaped);
}
public void testEscape_withEntities1() {
String escaped = SafeHtmlUtils.htmlEscapeAllowEntities(
"f\"bar \'<&em><e/m>oo&bar");
assertEquals(
"f"bar '<&em><e/m>oo&bar", escaped);
}
public void testEscape_withEntities2() {
String escaped = SafeHtmlUtils.htmlEscapeAllowEntities("& foo <");
assertEquals("& foo <", escaped);
}
public void testEscape_withEntities3() {
String escaped = SafeHtmlUtils.htmlEscapeAllowEntities(
"<foo> & <em> bar ' baz");
assertEquals("<foo> & <em> bar ' baz", escaped);
}
public void testEscape_withEntities4() {
String escaped = SafeHtmlUtils.htmlEscapeAllowEntities(
"&foo && bar ' baz&");
assertEquals("&foo && bar ' baz&", escaped);
}
public void testEscape_withEntitiesInvalidEntities() {
String escaped = SafeHtmlUtils.htmlEscapeAllowEntities(
"&a mp;&;&x;");
assertEquals("&a mp;&;&x;&#;&#x;", escaped);
}
public void testFromSafeConstant() {
SafeHtml h = SafeHtmlUtils.fromSafeConstant(CONSTANT_HTML);
assertEquals(CONSTANT_HTML, h.asString());
}
public void testFromSafeConstant_withIncompleteHtml() {
if (GWT.isProdMode()) {
// fromSafeConstant does not parse/validate its argument in prod mode.
// Hence we short-circuit this test in prod mode.
return;
}
try {
SafeHtml h = SafeHtmlUtils.fromSafeConstant("<a href=\"");
fail("Should have thrown IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected
}
}
public void testFromString() {
SafeHtml h = SafeHtmlUtils.fromString(CONSTANT_HTML);
assertEquals(SafeHtmlUtils.htmlEscape(CONSTANT_HTML), h.asString());
}
public void testEscape_chars() {
String escaped = SafeHtmlUtils.htmlEscape('a');
assertEquals("a", escaped);
escaped = SafeHtmlUtils.htmlEscape('&');
assertEquals("&", escaped);
escaped = SafeHtmlUtils.htmlEscape('<');
assertEquals("<", escaped);
escaped = SafeHtmlUtils.htmlEscape('>');
assertEquals(">", escaped);
escaped = SafeHtmlUtils.htmlEscape('"');
assertEquals(""", escaped);
escaped = SafeHtmlUtils.htmlEscape('\'');
assertEquals("'", escaped);
}
@Override
public String getModuleName() {
return "com.google.gwt.safehtml.SafeHtmlTestsModule";
}
}