/*
* 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.brooklyn.util.text;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.text.StringEscapes;
import org.apache.brooklyn.util.text.StringEscapes.BashStringEscapes;
import org.apache.brooklyn.util.text.StringEscapes.JavaStringEscapes;
import org.testng.Assert;
import org.testng.annotations.Test;
public class StringEscapesTest {
@Test
public void testEscapeSql() {
Assert.assertEquals(StringEscapes.escapeSql("I've never been to Brooklyn"), "I''ve never been to Brooklyn");
}
@Test
public void testBashEscaping() {
Assert.assertEquals(
BashStringEscapes.doubleQuoteLiteralsForBash("-Dname=Bob Johnson", "-Dnet.worth=$100"),
"\"-Dname=Bob Johnson\" \"-Dnet.worth=\\$100\"");
}
@Test
public void testBashEscapable() {
Assert.assertTrue(BashStringEscapes.isValidForDoubleQuotingInBash("Bob Johnson"));
Assert.assertFalse(BashStringEscapes.isValidForDoubleQuotingInBash("\""));
Assert.assertTrue(BashStringEscapes.isValidForDoubleQuotingInBash("\\\""));
}
/** Bash handles ampersand in double quoted strings without escaping. */
@Test
public void testBashEscapableAmpersand() {
Assert.assertTrue(BashStringEscapes.isValidForDoubleQuotingInBash("&"));
Assert.assertTrue(BashStringEscapes.isValidForDoubleQuotingInBash("Marks & Spencer"));
}
@Test
public void testJavaUnwrap() {
Assert.assertEquals(JavaStringEscapes.unwrapJavaString("\"Hello World\""), "Hello World");
Assert.assertEquals(JavaStringEscapes.unwrapJavaString("\"Hello \\\"Bob\\\"\""), "Hello \"Bob\"");
try {
JavaStringEscapes.unwrapJavaString("Hello World");
Assert.fail("Should have thrown");
} catch (Exception e) { /* expected */ }
try {
// missing final quote
JavaStringEscapes.unwrapJavaString("\"Hello \\\"Bob\\\"");
Assert.fail("Should have thrown");
} catch (Exception e) { /* expected */ }
Assert.assertEquals(JavaStringEscapes.unwrapJavaStringIfWrapped("\"Hello World\""), "Hello World");
Assert.assertEquals(JavaStringEscapes.unwrapJavaStringIfWrapped("\"Hello \\\"Bob\\\"\""), "Hello \"Bob\"");
Assert.assertEquals(JavaStringEscapes.unwrapJavaStringIfWrapped("Hello World"), "Hello World");
try {
// missing final quote
JavaStringEscapes.unwrapJavaStringIfWrapped("\"Hello \\\"Bob\\\"");
Assert.fail("Should have thrown");
} catch (Exception e) { /* expected */ }
}
@Test
public void testJavaEscape() {
Assert.assertEquals(JavaStringEscapes.wrapJavaString("Hello \"World\""), "\"Hello \\\"World\\\"\"");
}
@Test
public void testJavaLists() {
Assert.assertEquals(MutableList.of("hello", "world"),
JavaStringEscapes.unwrapQuotedJavaStringList("\"hello\", \"world\"", ","));
try {
JavaStringEscapes.unwrapQuotedJavaStringList("\"hello\", world", ",");
Assert.fail("Should have thrown");
} catch (Exception e) { /* expected */ }
Assert.assertEquals(MutableList.of("hello", "world"),
JavaStringEscapes.unwrapJsonishListIfPossible("\"hello\", \"world\""));
Assert.assertEquals(MutableList.of("hello"),
JavaStringEscapes.unwrapJsonishListIfPossible("hello"));
Assert.assertEquals(MutableList.of("hello", "world"),
JavaStringEscapes.unwrapJsonishListIfPossible("hello, world"));
Assert.assertEquals(MutableList.of("hello", "world"),
JavaStringEscapes.unwrapJsonishListIfPossible("\"hello\", world"));
Assert.assertEquals(MutableList.of("hello", "world"),
JavaStringEscapes.unwrapJsonishListIfPossible("[ \"hello\", world ]"));
// if can't parse e.g. because contains double quote, then returns original string as single element list
Assert.assertEquals(MutableList.of("hello\", \"world\""),
JavaStringEscapes.unwrapJsonishListIfPossible("hello\", \"world\""));
Assert.assertEquals(MutableList.of(),
JavaStringEscapes.unwrapJsonishListIfPossible(" "));
Assert.assertEquals(MutableList.of(""),
JavaStringEscapes.unwrapJsonishListIfPossible("\"\""));
Assert.assertEquals(MutableList.of("x"),
JavaStringEscapes.unwrapJsonishListIfPossible(",,x,"));
Assert.assertEquals(MutableList.of("","x",""),
JavaStringEscapes.unwrapJsonishListIfPossible("\"\",,x,\"\""));
}
}