/* * 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;&#;&#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"; } }