/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF 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.apache.wicket.util.string; import org.apache.wicket.core.util.string.JavaScriptStripper; import org.junit.Assert; import org.junit.Test; /** * Tests {@link JavaScriptStripper} * * @author <a href="mailto:jbq@apache.org">Jean-Baptiste Quenot</a> */ public class JavaScriptStripperTest extends Assert { /** */ @Test public void unixWICKET501() { String s = new JavaScriptStripper().stripCommentsAndWhitespace(" // Handle the common XPath // expression\n if ( !t.indexOf(\"//\") ) {"); assertEquals(" \n if ( !t.indexOf(\"//\") ) {", s); } /** */ @Test public void dosWICKET501() { String s = new JavaScriptStripper().stripCommentsAndWhitespace(" // Handle the common XPath // expression\r\n if ( !t.indexOf(\"//\") ) {"); assertEquals(" \r\nif ( !t.indexOf(\"//\") ) {", s); } /** */ @Test public void macWICKET501() { String s = new JavaScriptStripper().stripCommentsAndWhitespace(" // Handle the common XPath // expression\r if ( !t.indexOf(\"//\") ) {"); assertEquals(" \r if ( !t.indexOf(\"//\") ) {", s); } /** */ @Test public void regexp() { String s = new JavaScriptStripper().stripCommentsAndWhitespace(" t = jQuery.trim(t).replace( /^\\/\\//i, \"\" );"); assertEquals(" t = jQuery.trim(t).replace( /^\\/\\//i, \"\" );", s); } /** */ @Test public void regexp2() { String s = new JavaScriptStripper().stripCommentsAndWhitespace("foo.replace(/\"//*strip me*/, \"\"); // strip me\rdoFoo();"); assertEquals("foo.replace(/\"/, \"\"); \rdoFoo();", s); } /** */ @Test public void regexp3() { String s = new JavaScriptStripper().stripCommentsAndWhitespace("parseFloat( elem.filter.match(/alpha\\(opacity=(.*)\\)/)[1] ) / 100 : 1;\r//foo"); assertEquals("parseFloat( elem.filter.match(/alpha\\(opacity=(.*)\\)/)[1] ) / 100 : 1;\r", s); } /** */ @Test public void regexp4() { String before = " attr: /**/ //xyz\n /\\[((?:[\\w-]*:)?[\\w-]+)\\s*(?:([!^$*~|]?=)\\s*((['\"])([^\\4]*?)\\4|([^'\"][^\\]]*?)))?\\]/ after regex"; String after = new JavaScriptStripper().stripCommentsAndWhitespace(before); String expected = " attr: \n /\\[((?:[\\w-]*:)?[\\w-]+)\\s*(?:([!^$*~|]?=)\\s*((['\"])([^\\4]*?)\\4|([^'\"][^\\]]*?)))?\\]/ after regex"; assertEquals(expected, after); System.out.println(after); } /** */ @Test public void WICKET1806() { String before = "a = [ /^(\\[) *@?([\\w-]+) *([!*$^~=]*) *('?\"?)(.*?)\\4 *\\]/ ]; b()"; String after = new JavaScriptStripper().stripCommentsAndWhitespace(before); String expected = "a = [ /^(\\[) *@?([\\w-]+) *([!*$^~=]*) *('?\"?)(.*?)\\4 *\\]/ ]; b()"; assertEquals(expected, after); } /** */ @Test public void WICKET2060_1() { String before = " a b c"; String after = new JavaScriptStripper().stripCommentsAndWhitespace(before); String expected = " a b c"; assertEquals(expected, after); } /** */ @Test public void WICKET2060_2() { String before = " a \n b c\n\n"; String after = new JavaScriptStripper().stripCommentsAndWhitespace(before); String expected = " a\nb c\n"; assertEquals(expected, after); } /** */ @Test public void WICKET2060_3() { String before = "return this.__unbind__(type, fn);"; String after = new JavaScriptStripper().stripCommentsAndWhitespace(before); String expected = "return this.__unbind__(type, fn);"; assertEquals(expected, after); } /** */ @Test public void WICKET4760() { String before = "x++ //\nx++"; String after = new JavaScriptStripper().stripCommentsAndWhitespace(before); String expected = "x++ \nx++"; assertEquals(expected, after); } /** */ // @formatter:off public static String TESTSTRING2 = " var test = function () {\n" + " var c = \"!=\";\n" + " /* from jquery 1.5.1 */\n" + " if ( !l.match.PSEUDO.test(c) && !/!=/.test(c)) {\n" + " alert(\"/something bad will happen */* \");\n" + " }\n" + "\n" + " var importantFunction = function () {alert(\"really important function \")}\n" + " /*\n" + " This code will be stripped\n" + " */\n" + "\n" + "}" ; // @formatter:on /** */ @Test public void regExThatStartsWithExclamationMark() { String result = new JavaScriptStripper().stripCommentsAndWhitespace(TESTSTRING2); assertFalse(result.contains("This code will be stripped")); assertTrue(result.contains("something bad will happen")); assertTrue(result.contains("really important function")); System.out.println(result); } }