| /* |
| * Copyright (c) 2014, 2015, 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 8059977 |
| * @summary StandardJavaFileManager should support java.nio.file.Path. |
| * Test get/setLocation methods. |
| * @modules java.compiler |
| * jdk.compiler |
| * @build SJFM_TestBase |
| * @run main SJFM_Locations |
| */ |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.nio.file.Path; |
| import java.nio.file.Paths; |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.stream.Collectors; |
| import java.util.stream.Stream; |
| import javax.tools.JavaFileManager; |
| import javax.tools.StandardJavaFileManager; |
| |
| /** |
| * For those paths which are supported by a file manager, verify |
| * that setLocation can accept such paths, and that getLocation |
| * can subsequently return the same paths. |
| * |
| * In addition, for files in the default file system, verify |
| * the combinations of setting a location using files or paths |
| * and then subsequently getting the location as files or paths. |
| */ |
| public class SJFM_Locations extends SJFM_TestBase { |
| public static void main(String... args) throws Exception { |
| new SJFM_Locations().run(); |
| } |
| |
| @Test |
| void test_locations(StandardJavaFileManager fm) throws IOException { |
| test_setFiles_getFiles(fm, getTestFileDirs()); |
| test_setFiles_getPaths(fm, getTestFileDirs()); |
| test_setPaths_getFiles(fm, getTestFilePathDirs()); |
| test_setPaths_getPaths(fm, getTestFilePathDirs()); |
| // test_setPaths_getPaths(fm, getTestZipPathDirs()); |
| } |
| |
| void test_setFiles_getFiles(StandardJavaFileManager fm, List<File> inFiles) throws IOException { |
| System.err.println("test_setFiles_getFiles"); |
| JavaFileManager.Location l = newLocation(); |
| fm.setLocation(l, inFiles); |
| Iterable<? extends File> outFiles = fm.getLocation(l); |
| compare(inFiles, outFiles); |
| } |
| |
| void test_setFiles_getPaths(StandardJavaFileManager fm, List<File> inFiles) throws IOException { |
| System.err.println("test_setFiles_getPaths"); |
| JavaFileManager.Location l = newLocation(); |
| fm.setLocation(l, inFiles); |
| Iterable<? extends Path> outPaths = fm.getLocationAsPaths(l); |
| compare(inFiles, outPaths); |
| } |
| |
| void test_setPaths_getFiles(StandardJavaFileManager fm, List<Path> inPaths) throws IOException { |
| System.err.println("test_setPaths_getFiles"); |
| JavaFileManager.Location l = newLocation(); |
| fm.setLocationFromPaths(l, inPaths); |
| Iterable<? extends File> outFiles = fm.getLocation(l); |
| compare(inPaths, outFiles); |
| } |
| |
| void test_setPaths_getPaths(StandardJavaFileManager fm, List<Path> inPaths) throws IOException { |
| System.err.println("test_setPaths_getPaths"); |
| JavaFileManager.Location l = newLocation(); |
| fm.setLocationFromPaths(l, inPaths); |
| Iterable<? extends Path> outPaths = fm.getLocationAsPaths(l); |
| compare(inPaths, outPaths); |
| } |
| |
| //---------------------------------------------------------------------------------------------- |
| |
| /** |
| * Gets a representative series of directories in the default file system, |
| * derived from the test.src directory and test.classes path. |
| * |
| * @return a list of directories, represented with {@code File} |
| * @throws IOException |
| */ |
| List<File> getTestFileDirs() throws IOException { |
| return Stream.of("test.src", "test.classes") |
| .map(s -> System.getProperty(s)) |
| .flatMap(s -> Stream.of(s.split(File.pathSeparator, 0))) |
| .filter(s -> !s.isEmpty()) |
| .map(s -> new File(s)) |
| .collect(Collectors.toList()); |
| } |
| |
| /** |
| * Gets a representative series of directories in the default file system, |
| * derived from the test.src directory and test.classes path. |
| * |
| * @return a list of directories, represented with {@code Path} |
| * @throws IOException |
| */ |
| List<Path> getTestFilePathDirs() throws IOException { |
| return Stream.of("test.src", "test.classes") |
| .map(s -> System.getProperty(s)) |
| .flatMap(s -> Stream.of(s.split(File.pathSeparator, 0))) |
| .filter(s -> !s.isEmpty()) |
| .map(s -> Paths.get(s)) |
| .collect(Collectors.toList()); |
| } |
| |
| |
| /** |
| * Compares two lists of items by comparing their individual string representations. |
| * |
| * @param in the first set of items to be compared |
| * @param out the second set of items to be compared |
| */ |
| void compare(Iterable<?> in, Iterable<?> out) { |
| List<String> ins = toString(in); |
| List<String> outs = toString(out); |
| if (!ins.equals(outs)) { |
| error("mismatch in comparison"); |
| System.err.println("in:"); |
| for (String s: ins) System.err.println(s); |
| System.err.println("out:"); |
| for (String s: outs) System.err.println(s); |
| } |
| } |
| |
| List<String> toString(Iterable<?> iter) { |
| List<String> strings = new ArrayList<>(); |
| for (Object item: iter) |
| strings.add(item.toString()); |
| return strings; |
| } |
| |
| /** |
| * Create an instance of a location. |
| * @return a location |
| */ |
| JavaFileManager.Location newLocation() { |
| final String name = "locn" + (count++); |
| return new JavaFileManager.Location() { |
| @Override |
| public String getName() { |
| return name; |
| } |
| |
| @Override |
| public boolean isOutputLocation() { |
| return false; |
| } |
| }; |
| } |
| |
| int count = 0; |
| } |