| /* |
| * Copyright (c) 1998, 2014, 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 |
| * @bug 4136352 |
| * @summary Test Native2ASCII error messages |
| * @library /lib/testlibrary |
| * @build jdk.testlibrary.* NativeErrors |
| * @run main NativeErrors |
| */ |
| |
| |
| import java.io.File; |
| import java.util.ResourceBundle; |
| import java.util.MissingResourceException; |
| import jdk.testlibrary.OutputAnalyzer; |
| import jdk.testlibrary.JDKToolLauncher; |
| import jdk.testlibrary.ProcessTools; |
| |
| public class NativeErrors { |
| |
| private static ResourceBundle rsrc; |
| |
| static { |
| try { |
| rsrc = ResourceBundle.getBundle( |
| "sun.tools.native2ascii.resources.MsgNative2ascii"); |
| } catch (MissingResourceException e) { |
| throw new Error("Missing message file."); |
| } |
| } |
| |
| public static void main(String args[]) throws Throwable { |
| // Execute command in another vm. Verify stdout for expected err msg. |
| |
| // Test with no input file given. |
| checkResult(executeCmd("-encoding"), "err.bad.arg"); |
| |
| File f0 = new File(System.getProperty("test.src", "."), "test123"); |
| String path0 = f0.getPath(); |
| if ( f0.exists() ) { |
| throw new Error("Input file should not exist: " + path0); |
| } |
| checkResult(executeCmd(path0), "err.cannot.read"); |
| |
| File f1 = new File(System.getProperty("test.src", "."), "test1"); |
| File f2 = File.createTempFile("test2", ".tmp"); |
| String path1 = f1.getPath(); |
| String path2 = f2.getPath(); |
| if ( !f1.exists() ) { |
| throw new Error("Missing input file: " + path1); |
| } |
| if ( !f2.setWritable(false) ) { |
| throw new Error("Output file cannot be made read only: " + path2); |
| } |
| f2.deleteOnExit(); |
| if ( f2.canWrite() ) { |
| String msg = "Output file is still writable. " + |
| "Probably because test is run as root. Read-only test skipped."; |
| System.out.println(msg); |
| } else { |
| // Test write to a read-only file. |
| checkResult(executeCmd(path1, path2), "err.cannot.write"); |
| } |
| } |
| |
| private static String executeCmd(String... toolArgs) throws Throwable { |
| JDKToolLauncher cmd = JDKToolLauncher.createUsingTestJDK("native2ascii"); |
| for (String s : toolArgs) { |
| cmd.addToolArg(s); |
| } |
| OutputAnalyzer output = ProcessTools.executeProcess(cmd.getCommand()); |
| if (output == null || output.getStdout() == null) { |
| throw new Exception("Output was null. Process did not finish correctly."); |
| } |
| if (output.getExitValue() == 0) { |
| throw new Exception("Process exit code was 0, but error was expected."); |
| } |
| return output.getStdout(); |
| } |
| |
| private static void checkResult( |
| String errorReceived, String errorKey) throws Exception { |
| String errorExpected = rsrc.getString(errorKey); |
| if (errorExpected == null) { |
| throw new Exception("No error message for key: " + errorKey); |
| } |
| // Remove template tag from error message. |
| errorExpected = errorExpected.replaceAll("\\{0\\}", ""); |
| |
| System.out.println("received: " + errorReceived); |
| System.out.println("expected: " + errorExpected); |
| if (errorReceived.indexOf(errorExpected) < 0) { |
| throw new RuntimeException("Native2ascii bad arg error broken."); |
| } |
| } |
| |
| } |