--- /dev/null 2016-07-20 19:17:57.000000000 -0700 +++ new/test/tools/jdeprscan/tests/jdk/jdeprscan/TestScan.java 2016-07-20 19:17:56.000000000 -0700 @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2016, 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 Basic test of jdeprscan's scanning phase. + * @modules jdk.jdeps/com.sun.tools.jdeprscan + * @library ../../../cases + * @library ../../../usage + * @build jdk.deprcases.members.* jdk.deprcases.types.* + * @build jdk.deprusage.* + * @build jdk.jdeprscan.TestScan + * @run testng jdk.jdeprscan.TestScan + */ + +package jdk.jdeprscan; + +import com.sun.tools.jdeprscan.Main; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; +import org.testng.Assert; + +import org.testng.annotations.Test; + +import static org.testng.Assert.assertTrue; + + +public class TestScan { + Set loadExpected() throws IOException { + Path expFile = Paths.get(System.getProperty("test.src"), "TestScanExpected.txt"); + return new HashSet<>(Files.readAllLines(expFile, StandardCharsets.UTF_8)); + } + + @Test + public void test1() throws IOException { + String testclasses = System.getProperty("test.classes"); + String deprcases = testclasses + "/../../../cases"; + String deprusage = testclasses + "/../../../usage"; + + Set expected = loadExpected(); + System.out.println("expected = " + expected); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try (PrintStream out = new PrintStream(baos, false, "UTF-8")) { + boolean r = Main.call(out, System.err, + "-cp", deprcases, "--Xload-dir", deprcases, deprusage); + assertTrue(r); + } + byte[] bytes = baos.toByteArray(); + + System.out.println("--- output ---"); + ByteArrayInputStream bais = new ByteArrayInputStream(bytes); + bais.transferTo(System.out); + System.out.println("--- end output ---"); + + Set actual = + new BufferedReader( + new InputStreamReader( + new ByteArrayInputStream(bytes), StandardCharsets.UTF_8)) + .lines() + .map(line -> line.split(" +")) + .map(array -> array[1]) + .collect(Collectors.toSet()); + System.out.println("actual = " + actual); + + Set diff1 = new HashSet<>(expected); + diff1.removeAll(actual); + Set diff2 = new HashSet<>(actual); + diff2.removeAll(expected); + + if (diff1.size() > 0 || diff2.size() > 0) { + System.out.println("missing items: " + diff1); + System.out.println("extra items: " + diff2); + } + + Assert.assertEquals(diff1.size(), 0); + Assert.assertEquals(diff2.size(), 0); + } +}