/* * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code 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 General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package test.java.lang.String; /* * @test * @bug 8223780 * @summary This exercises String#translateEscapes patterns and limits. * @compile TranslateEscapes.java * @run main TranslateEscapes */ import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; public class TranslateEscapes { @Test public void testStandardEscapes() { verifyEscape("b", '\b'); verifyEscape("f", '\f'); verifyEscape("n", '\n'); verifyEscape("r", '\r'); verifyEscape("t", '\t'); verifyEscape("'", '\''); verifyEscape("\"", '\"'); verifyEscape("\\", '\\'); } @Test public void testOctalEscapes() { verifyOctalEscape("0", 0); verifyOctalEscape("3", 03); verifyOctalEscape("7", 07); verifyOctalEscape("07", 07); verifyOctalEscape("17", 017); verifyOctalEscape("27", 027); verifyOctalEscape("37", 037); verifyOctalEscape("377", 0377); verifyOctalEscape("777", 077); verifyOctalEscape("78", 07); } @Test static void testExceptions() { exceptionThrown("+"); exceptionThrown("q"); } @Test public void testEscapeLineTerminator() { verifyLineTerminator("\n"); verifyLineTerminator("\r\n"); verifyLineTerminator("\r"); } static void verifyEscape(String string, char ch) { String escapes = "\\" + string; assertEquals(escapes.translateEscapes().charAt(0), ch, String.format("\"%s\" not escape \"%s\"'%n", string, escapes)); } static void verifyOctalEscape(String string, int octal) { String escapes = "\\" + string; assertEquals(escapes.translateEscapes().charAt(0), octal, String.format("\"%s\" not octal %o%n", string, octal)); } static void exceptionThrown(String string) { String escapes = "\\" + string; try { escapes.translateEscapes(); fail(String.format("escape not thrown for %s%n", string)); } catch (IllegalArgumentException ex) { // okay } } static void verifyLineTerminator(String string) { String escapes = "\\" + string; assertTrue(escapes.translateEscapes().isEmpty(), String.format("escape for line terminator not handled %s%n", string.replace("\n", "\\n").replace("\r", "\\r"))); } }