package org.netbeans.gradle.project.query;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import org.junit.ClassRule;
import org.junit.Test;
import org.netbeans.api.java.queries.SourceForBinaryQuery;
import org.netbeans.gradle.model.util.BasicFileUtils;
import org.netbeans.gradle.project.util.NbSupplier;
import org.netbeans.gradle.project.util.SafeTmpFolder;
import org.netbeans.gradle.project.util.TestBinaryUtils;
import org.netbeans.spi.java.queries.SourceForBinaryQueryImplementation2;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.util.Utilities;
import static org.junit.Assert.*;
import static org.netbeans.gradle.project.query.TestSourceQueryUtils.*;
public class GradleHomeSourceForBinaryQueryTest {
@ClassRule
public static final SafeTmpFolder TMP_DIR_ROOT = new SafeTmpFolder();
private GradleHomeSourceForBinaryQuery createWithRoot(File rootDir) {
final FileObject rootObj = rootDir != null ? FileUtil.toFileObject(rootDir) : null;
return new GradleHomeSourceForBinaryQuery(new NbSupplier<FileObject>() {
@Override
public FileObject get() {
return rootObj;
}
});
}
private void doTestFindSourceOfStandardLibInSubDir(String... jarSubDir) throws IOException {
File rootDir = TMP_DIR_ROOT.newFolder();
File libDir = new File(rootDir, "lib");
File srcDir = new File(rootDir, "src");
File jarDir = BasicFileUtils.getSubPath(libDir, jarSubDir);
jarDir.mkdirs();
srcDir.mkdirs();
SourceForBinaryQueryImplementation2 query = createWithRoot(rootDir);
File jarPath = new File(jarDir, "testbin.jar");
TestBinaryUtils.createTestJar(jarPath);
SourceForBinaryQuery.Result result1 = query.findSourceRoots(Utilities.toURI(jarPath).toURL());
expectSameArchive("srcDir", srcDir, expectedSingleFile(result1));
SourceForBinaryQueryImplementation2.Result result2 = query.findSourceRoots2(Utilities.toURI(jarPath).toURL());
expectSameArchive("srcDir", srcDir, expectedSingleFile(result2));
assertFalse("preferSources", result2.preferSources());
}
@Test
public void testFindSourceOfStandardLib() throws IOException {
doTestFindSourceOfStandardLibInSubDir();
}
@Test
public void testFindSourceOfStandardLibInSubDir() throws IOException {
doTestFindSourceOfStandardLibInSubDir("subdir");
}
@Test
public void testNoGradleHome() throws IOException {
File rootDir = TMP_DIR_ROOT.newFolder();
File libDir = new File(rootDir, "lib");
File srcDir = new File(rootDir, "src");
libDir.mkdirs();
srcDir.mkdirs();
SourceForBinaryQueryImplementation2 query = createWithRoot(null);
File jarPath = new File(libDir, "testbin.jar");
TestBinaryUtils.createTestJar(jarPath);
URL binaryUrl = Utilities.toURI(jarPath).toURL();
SourceForBinaryQuery.Result result1 = query.findSourceRoots(binaryUrl);
assertNull("result1", result1);
SourceForBinaryQueryImplementation2.Result result2 = query.findSourceRoots2(binaryUrl);
assertNull("result2", result2);
}
@Test
public void testNotInLibDir() throws IOException {
File rootDir = TMP_DIR_ROOT.newFolder();
SourceForBinaryQueryImplementation2 query = createWithRoot(rootDir);
File jarPath = new File(rootDir, "myapp.jar");
TestBinaryUtils.createTestJar(jarPath);
URL binaryUrl = Utilities.toURI(jarPath).toURL();
SourceForBinaryQuery.Result result1 = query.findSourceRoots(binaryUrl);
assertNull("result1", result1);
SourceForBinaryQueryImplementation2.Result result2 = query.findSourceRoots2(binaryUrl);
assertNull("result2", result2);
}
@Test
public void testMissingSrcDir() throws IOException {
File rootDir = TMP_DIR_ROOT.newFolder();
File libDir = new File(rootDir, "lib");
libDir.mkdirs();
SourceForBinaryQueryImplementation2 query = createWithRoot(rootDir);
File jarPath = new File(libDir, "testbin.jar");
TestBinaryUtils.createTestJar(jarPath);
URL binaryUrl = Utilities.toURI(jarPath).toURL();
SourceForBinaryQuery.Result result1 = query.findSourceRoots(binaryUrl);
assertNull("result1", result1);
SourceForBinaryQueryImplementation2.Result result2 = query.findSourceRoots2(binaryUrl);
assertNull("result2", result2);
}
}