/*! * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * Copyright (c) 2002-2016 Pentaho Corporation.. All rights reserved. */ package org.pentaho.platform.web.http.api.resources.utils; import java.io.IOException; import org.apache.commons.lang.StringEscapeUtils; import org.codehaus.jackson.io.CharacterEscapes; import org.eclipse.jetty.util.ajax.JSON; import org.junit.Assert; import org.junit.Test; import org.pentaho.platform.web.http.api.resources.utils.EscapeUtils.HTMLCharacterEscapes; public class EscapeUtilsTest { @Test public void testEscapeJsonOrRaw0() { final String src = "1"; final String expect = "1"; //Check test data Assert.assertEquals( "data", src, StringEscapeUtils.unescapeJava( expect ) ); String actual = EscapeUtils.escapeJsonOrRaw( src ); Assert.assertEquals( expect, actual ); } @Test public void testEscapeJsonOrRaw1() { final String src = "[\"as<>df\",\"<xxx>\"]"; final String expect = "[\"as\\u003C\\u003Edf\",\"\\u003Cxxx\\u003E\"]"; //Check test data Assert.assertEquals( "data", JSON.toString( JSON.parse( src ) ), JSON.toString( JSON.parse( expect ) ) ); String actual = EscapeUtils.escapeJsonOrRaw( src ); Assert.assertEquals( expect, actual ); } @Test public void testEscapeJsonOrRaw2() { final String src = "[\"asdf\",123,\"<html>\", \"f&g\"]"; final String expect = "[\"asdf\",123,\"\\u003Chtml\\u003E\",\"f\\u0026g\"]"; //Check test data Assert.assertEquals( "data", JSON.toString( JSON.parse( src ) ), JSON.toString( JSON.parse( expect ) ) ); String actual = EscapeUtils.escapeJsonOrRaw( src ); Assert.assertEquals( expect, actual ); } @Test public void testEscapeJsonOrRaw3() { final String src = "{\"as&df\":\"<xxx>\", \"AS\" : \"zz\", \"X\":null}"; final String expect = "{\"as\\u0026df\":\"\\u003Cxxx\\u003E\",\"AS\":\"zz\",\"X\":null}"; //Check test data Assert.assertEquals( "data", JSON.toString( JSON.parse( src ) ), JSON.toString( JSON.parse( expect ) ) ); String actual = EscapeUtils.escapeJsonOrRaw( src ); Assert.assertEquals( expect, actual ); } @Test public void testEscapeJsonOrRaw4() { final String src = "{\"as&df\":\"<xxx>\", \"A\\\"S\" : \"z\\\"z\", \"X\":[123,\"\",\">\\\\<\"]}"; final String expect = "{\"as\\u0026df\":\"\\u003Cxxx\\u003E\",\"A\\u0022S\":\"z\\u0022z\",\"X\":[123,\"\",\"\\u003E\\\\\\u003C\"]}"; //Check test data Assert.assertEquals( "data", JSON.toString( JSON.parse( src ) ), JSON.toString( JSON.parse( expect ) ) ); String actual = EscapeUtils.escapeJsonOrRaw( src ); Assert.assertEquals( expect, actual ); } @Test public void testEscapeJsonOrRaw5() { final String src = "{as&df<html>\"\\123"; final String expect = "{as\\u0026df\\u003Chtml\\u003E\\u0022\\\\123"; //Check test data Assert.assertEquals( "data", src, StringEscapeUtils.unescapeJava( expect ) ); String actual = EscapeUtils.escapeJsonOrRaw( src ); Assert.assertEquals( expect, actual ); } @Test public void testEscapeJson1() { final String src = "[\"as<>df\",\"<xxx>\"]"; final String expect = "[\"as\\u003C\\u003Edf\",\"\\u003Cxxx\\u003E\"]"; //Check test data Assert.assertEquals( "data", JSON.toString( JSON.parse( src ) ), JSON.toString( JSON.parse( expect ) ) ); String actual = null; try { actual = EscapeUtils.escapeJson( src ); } catch ( IOException e ) { e.printStackTrace(); Assert.fail( "Exception is not expected: " + e.getClass().getName() + " " + e.getMessage() ); } Assert.assertEquals( expect, actual ); } @Test public void testEscapeRaw1() { final String src = "[\"as<>df\",\"<xxx>\"]"; final String expect = "[\\u0022as\\u003C\\u003Edf\\u0022,\\u0022\\u003Cxxx\\u003E\\u0022]"; //Check test data Assert.assertEquals( "data", src, StringEscapeUtils.unescapeJava( expect ) ); String actual = EscapeUtils.escapeRaw( src ); Assert.assertEquals( expect, actual ); } @Test public void testEscapeJson5() { final String src = "{as&df<html>\"\\123"; final String expect = "{as\\u0026df\\u003Chtml\\u003E\\u0022\\\\123"; //Check test data Assert.assertEquals( "data", src, StringEscapeUtils.unescapeJava( expect ) ); try { String actual = EscapeUtils.escapeJson( src ); Assert.fail( "Exception expected. actual=" + actual ); } catch ( Exception e ) { //expected } } @Test public void testEscapeRaw5() { final String src = "{as&df<html>\"\\123"; final String expect = "{as\\u0026df\\u003Chtml\\u003E\\u0022\\\\123"; //Check test data Assert.assertEquals( "data", src, StringEscapeUtils.unescapeJava( expect ) ); String actual = EscapeUtils.escapeRaw( src ); Assert.assertEquals( expect, actual ); } @Test public void testHTMLCharacterEscapes() { HTMLCharacterEscapes ce = new EscapeUtils.HTMLCharacterEscapes(); int[] actualEscapes = ce.getEscapeCodesForAscii(); Assert.assertEquals( "<", CharacterEscapes.ESCAPE_STANDARD, actualEscapes[(int) '<'] ); Assert.assertEquals( ">", CharacterEscapes.ESCAPE_STANDARD, actualEscapes[(int) '>'] ); Assert.assertEquals( "&", CharacterEscapes.ESCAPE_STANDARD, actualEscapes[(int) '&'] ); Assert.assertEquals( "\'", CharacterEscapes.ESCAPE_STANDARD, actualEscapes[(int) '\''] ); Assert.assertEquals( "\"", CharacterEscapes.ESCAPE_STANDARD, actualEscapes[(int) '\"'] ); int[] standardEscapes = CharacterEscapes.standardAsciiEscapesForJSON(); for ( int i = 0; i < standardEscapes.length; i++ ) { if ( "<>&\'\"".indexOf( (char) i ) < 0 ) { Assert.assertEquals( "(char)" + i, standardEscapes[i], actualEscapes[i] ); } } Assert.assertNull( ce.getEscapeSequence( 1 ) ); Assert.assertNull( ce.getEscapeSequence( (int) '%' ) ); } }