langtools/test/tools/jdeprscan/tests/jdk/jdeprscan/TestPrims.java
changeset 44877 1ab95a256567
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/jdeprscan/tests/jdk/jdeprscan/TestPrims.java	Tue Apr 25 16:14:35 2017 -0700
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2017, 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 8168444
+ * @summary Test of jdeprscan handling of primitives and primitive arrays.
+ * @modules jdk.jdeps/com.sun.tools.jdeprscan
+ * @build jdk.jdeprscan.TestPrims
+ * @run testng jdk.jdeprscan.TestPrims
+ */
+
+package jdk.jdeprscan;
+
+import com.sun.tools.jdeprscan.Main;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.regex.Pattern;
+import org.testng.annotations.Test;
+
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+public class TestPrims {
+
+    @Test
+    public void test() throws IOException {
+        final String TESTSRC = System.getProperty("test.src");
+        final String TESTCLASSPATH = System.getProperty("test.class.path");
+        String CSV_FILE = TESTSRC + File.separator + "TestPrims.csv";
+
+        ByteArrayOutputStream outBaos = new ByteArrayOutputStream();
+        ByteArrayOutputStream errBaos = new ByteArrayOutputStream();
+        boolean mainResult;
+
+        try (PrintStream out = new PrintStream(outBaos, false, "UTF-8");
+             PrintStream err = new PrintStream(errBaos, false, "UTF-8")) {
+            mainResult = Main.call(
+                out, err,
+                "--class-path", TESTCLASSPATH,
+                "--Xload-csv", CSV_FILE,
+                "jdk.jdeprscan.TestPrims$Usage");
+            // assertion is checked below after output is dumped
+        }
+
+        byte[] outBytes = outBaos.toByteArray();
+        byte[] errBytes = errBaos.toByteArray();
+        ByteArrayInputStream outbais = new ByteArrayInputStream(outBytes);
+        ByteArrayInputStream errbais = new ByteArrayInputStream(errBytes);
+
+        System.out.println("--- stdout ---");
+        outbais.transferTo(System.out);
+        System.out.println("--- end stdout ---");
+
+        System.out.println("--- stderr ---");
+        errbais.transferTo(System.out);
+        System.out.println("--- end stderr ---");
+
+        String outString = new String(outBytes, "UTF-8");
+        String errString = new String(errBytes, "UTF-8");
+
+        // matches message "class <classname> uses deprecated class [I"
+        boolean outMatch = Pattern.compile("^class ").matcher(outString).find();
+
+        // matches message "error: cannot find class [I"
+        boolean errMatch = Pattern.compile("^error: ").matcher(errString).find();
+
+        if (!mainResult) {
+            System.out.println("FAIL: Main.call returned false");
+        }
+
+        if (outMatch) {
+            System.out.println("FAIL: stdout contains unexpected error message");
+        }
+
+        if (errMatch) {
+            System.out.println("FAIL: stderr contains unexpected error message");
+        }
+
+        assertTrue(mainResult && !outMatch && !errMatch);
+    }
+
+    static class Usage {
+        void prims(boolean z, byte b, short s, char c,
+                   int i, long j, float f, double d) { }
+
+        void primsArrays(boolean[] z, byte[] b, short[] s, char[] c,
+                         int[] i, long[] j, float[] f, double[] d) { }
+
+        boolean zfield;
+        byte    bfield;
+        short   sfield;
+        char    cfield;
+        int     ifield;
+        long    jfield;
+        float   ffield;
+        double  dfield;
+
+        boolean[] azfield;
+        byte[]    abfield;
+        short[]   asfield;
+        char[]    acfield;
+        int[]     aifield;
+        long[]    ajfield;
+        float[]   affield;
+        double[]  adfield;
+
+
+        Object[] clones() {
+            return new Object[] {
+                azfield.clone(),
+                abfield.clone(),
+                asfield.clone(),
+                acfield.clone(),
+                aifield.clone(),
+                ajfield.clone(),
+                affield.clone(),
+                adfield.clone()
+            };
+        }
+    }
+}