blob: f1af4b2ada050252e8580b5d3a683bd44e968cc0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2015 BEA Systems, Inc. and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* wharley@bea.com - initial API and implementation
* IBM Corporation - fixed a resource leak warning
*******************************************************************************/
package org.eclipse.jdt.compiler.apt.tests;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import javax.tools.JavaFileManager;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import org.eclipse.jdt.internal.compiler.apt.util.EclipseFileManager;
import junit.framework.TestCase;
/**
* Test the implementation of the Filer interface,
* in more detail than BatchDispatchTests does.
* @since 3.4
*/
public class FileManagerTests extends TestCase {
/* (non-Javadoc)
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception {
super.setUp();
BatchTestUtils.init();
}
public void testFileManager() {
String tmpFolder = System.getProperty("java.io.tmpdir");
File dir = new File(tmpFolder, "src" + System.currentTimeMillis());
dir.mkdirs();
File inputFile = new File(dir, "X.java");
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new FileWriter(inputFile));
writer.write("public class X {}");
writer.flush();
writer.close();
} catch (IOException e) {
// ignore
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
// ignore
}
}
}
StandardJavaFileManager fileManager = null;
try {
fileManager = new EclipseFileManager(Locale.getDefault(), Charset.defaultCharset());
List<File> fins = new ArrayList<File>();
fins.add(dir);
JavaFileManager.Location sourceLoc = javax.tools.StandardLocation.SOURCE_PATH;
fileManager.setLocation(sourceLoc, fins);
Set<JavaFileObject.Kind> fileTypes = new HashSet<JavaFileObject.Kind>();
fileTypes.add(JavaFileObject.Kind.SOURCE);
Iterable<? extends JavaFileObject> compilationUnits = fileManager.list(sourceLoc, "", fileTypes, true);
Iterator<? extends JavaFileObject> it = compilationUnits.iterator();
StringBuilder builder = new StringBuilder();
while (it.hasNext()) {
JavaFileObject next = it.next();
String name = next.getName();
name = name.replace('\\', '/');
int lastIndexOf = name.lastIndexOf('/');
builder.append(name.substring(lastIndexOf + 1));
}
assertEquals("Wrong contents", "X.java", String.valueOf(builder));
List<File> files = new ArrayList<File>();
files.add(dir);
try {
fileManager.getJavaFileObjectsFromFiles(files);
fail("IllegalArgumentException should be thrown but not");
} catch(IllegalArgumentException iae) {
// Do nothing
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fileManager.close();
} catch (IOException e) {
//ignore the exception
}
}
// check that the .class file exist for X
assertTrue("delete failed", inputFile.delete());
assertTrue("delete failed", dir.delete());
}
// Test that JavaFileManager#inferBinaryName returns null for invalid file
public void testInferBinaryName() {
String tmpFolder = System.getProperty("java.io.tmpdir");
File dir = new File(tmpFolder, "src" + System.currentTimeMillis());
dir.mkdirs();
File inputFile = new File(dir, "test.txt");
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new FileWriter(inputFile));
writer.write("This is not a valid Java file");
writer.flush();
writer.close();
} catch (IOException e) {
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
}
}
}
try {
StandardJavaFileManager fileManager = new EclipseFileManager(Locale.getDefault(), Charset.defaultCharset());
List<File> fins = new ArrayList<File>();
fins.add(dir);
JavaFileManager.Location sourceLoc = javax.tools.StandardLocation.SOURCE_PATH;
fileManager.setLocation(sourceLoc, fins);
Set<JavaFileObject.Kind> fileTypes = new HashSet<JavaFileObject.Kind>();
fileTypes.add(JavaFileObject.Kind.OTHER);
Iterable<? extends JavaFileObject> compilationUnits = fileManager.list(sourceLoc, "", fileTypes, true);
JavaFileObject invalid = null;
for (JavaFileObject javaFileObject : compilationUnits) {
invalid = javaFileObject;
break;
}
String inferredName = fileManager.inferBinaryName(sourceLoc, invalid);
fileManager.close();
assertNull("Should return null for invalid file", inferredName);
} catch (IOException e) {
e.printStackTrace();
}
assertTrue("delete failed", inputFile.delete());
assertTrue("delete failed", dir.delete());
}
public void testBug460085() {
try {
boolean found = false;
EclipseFileManager fileManager = null;
fileManager = new EclipseFileManager(Locale.getDefault(), Charset.defaultCharset());
Iterable <? extends File> files = fileManager.getLocation(javax.tools.StandardLocation.PLATFORM_CLASS_PATH);
Iterator<? extends File> iter = files.iterator();
while (iter.hasNext()) {
File f = iter.next();
if ("rt.jar".equals(f.getName())) {
found = true;
break;
}
}
fileManager.close();
assertTrue("rt.jar not found", found);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void testBug466878_getResource_defaultPackage() throws Exception {
EclipseFileManager fileManager = new EclipseFileManager(Locale.getDefault(), Charset.defaultCharset());
List<File> classpath = new ArrayList<>();
classpath.add(new File(BatchTestUtils.getPluginDirectoryPath(), "resources/targets/filemanager/classes"));
classpath.add(new File(BatchTestUtils.getPluginDirectoryPath(), "resources/targets/filemanager/dependency.zip"));
fileManager.setLocation(javax.tools.StandardLocation.CLASS_PATH, classpath);
assertNotNull(fileManager.getFileForInput(javax.tools.StandardLocation.CLASS_PATH, "", "dirresource.txt"));
assertNotNull(fileManager.getFileForInput(javax.tools.StandardLocation.CLASS_PATH, "", "jarresource.txt"));
fileManager.close();
}
}