test/langtools/tools/javac/RawStringLiteralLang.java
author darcy
Thu, 13 Dec 2018 19:06:11 +0100
changeset 53023 6879069d9d94
parent 51713 d424675a9743
permissions -rw-r--r--
8205626: Start of release updates for JDK 13 8205393: Add SourceVersion.RELEASE_13 8205394: Add source 13 and target 13 to javac 8205645: Bump maximum recognized class file version to 57 for JDK 13 8214825: Update preview language features for start of JDK 13 Reviewed-by: erikj, alanb, mchung, mcimadamore, dholmes, smarks, jjg

/*
 * Copyright (c) 2018, 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.
 */

/*
 * @test
 * @summary Unit tests for Raw String Literal language changes
 * @compile --enable-preview -source 13 -encoding utf8 RawStringLiteralLang.java
 * @run main/othervm --enable-preview RawStringLiteralLang
 */

public class RawStringLiteralLang {
    public static void main(String... args) {
        test1();
        test2();
    }

    /*
     * Test raw string functionality.
     */
    static void test1() {
        EQ(`abc`, "abc");
        EQ(`can't`, "can\'t");
        EQ(``can`t``, "can`t");
        EQ(`can\\'t`, "can\\\\'t");
        EQ(``can\\`t``, "can\\\\`t");
        EQ(`\t`, "\\t");
        EQ(`•`, "\u2022");

        LENGTH("abc``def", 8);
        EQ("abc`\u0020`def", "abc` `def");
    }

    /*
     * Test multi-line string functionality.
     */
    static void test2() {
        EQ(`abc
def
ghi`, "abc\ndef\nghi");
        EQ(`abc
def
ghi
`, "abc\ndef\nghi\n");
        EQ(`
abc
def
ghi`, "\nabc\ndef\nghi");
        EQ(`
abc
def
ghi
`, "\nabc\ndef\nghi\n");
    }

    /*
     * Raise an exception if the string is not the expected length.
     */
    static void LENGTH(String rawString, int length) {
        if (rawString == null || rawString.length() != length) {
            System.err.println("Failed LENGTH");
            System.err.println(rawString + " " + length);
            throw new RuntimeException("Failed LENGTH");
        }
    }

    /*
     * Raise an exception if the two input strings are not equal.
     */
    static void EQ(String input, String expected) {
        if (input == null || expected == null || !expected.equals(input)) {
            System.err.println("Failed EQ");
            System.err.println();
            System.err.println("Input:");
            System.err.println(input.replaceAll(" ", "."));
            System.err.println();
            System.err.println("Expected:");
            System.err.println(expected.replaceAll(" ", "."));
            throw new RuntimeException();
        }
    }
}