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.util.Utilities;
import static org.junit.Assert.*;
import static org.netbeans.gradle.project.query.TestSourceQueryUtils.*;
public class GradleCacheSourceForBinaryQueryTest {
@ClassRule
public static final SafeTmpFolder TMP_DIR_ROOT = new SafeTmpFolder();
private static SourceForBinaryQueryImplementation2 createWithRoot(final File gradleHomeRoot) {
return new GradleCacheSourceForBinaryQuery(new NbSupplier<File>() {
@Override
public File get() {
return gradleHomeRoot;
}
});
}
private void verifySource(File gradleHome, URL binaryUrl, File srcFile) {
SourceForBinaryQueryImplementation2 query = createWithRoot(gradleHome);
SourceForBinaryQuery.Result result1 = query.findSourceRoots(binaryUrl);
assertNotNull("result1", result1);
expectSameArchive("sourcesPath", srcFile, expectedSingleFile(result1));
SourceForBinaryQueryImplementation2.Result result2 = query.findSourceRoots2(binaryUrl);
assertNotNull("result2", result2);
expectSameArchive("sourcesPath", srcFile, expectedSingleFile(result2));
assertFalse("preferSources", result2.preferSources());
}
private void verifyNotDownloadedSource(File gradleHome, URL binaryUrl) {
SourceForBinaryQueryImplementation2 query = createWithRoot(gradleHome);
SourceForBinaryQuery.Result result1 = query.findSourceRoots(binaryUrl);
assertNotNull("result1", result1);
assertEquals("sourcesPath", 0, result1.getRoots().length);
SourceForBinaryQueryImplementation2.Result result2 = query.findSourceRoots2(binaryUrl);
assertNotNull("result2", result2);
assertEquals("sourcesPath", 0, result2.getRoots().length);
assertFalse("preferSources", result2.preferSources());
}
@Test
public void testOldCacheFormat() throws IOException {
File gradleHome = TMP_DIR_ROOT.newFolder();
File artifactRoot = BasicFileUtils.getSubPath(gradleHome, "org", "myproj");
File jarDir = BasicFileUtils.getSubPath(artifactRoot, "jar", "43253");
File jar = BasicFileUtils.getSubPath(jarDir, "myproj.jar");
jarDir.mkdirs();
TestBinaryUtils.createTestJar(jar);
File srcDir = BasicFileUtils.getSubPath(artifactRoot, "source", "643632");
File srcFile = BasicFileUtils.getSubPath(srcDir, "myproj-sources.jar");
srcDir.mkdirs();
TestBinaryUtils.createTestJar(srcFile);
URL binaryUrl = Utilities.toURI(jar).toURL();
verifySource(gradleHome, binaryUrl, srcFile);
}
@Test
public void testOldCacheFormatMissingSource() throws IOException {
File gradleHome = TMP_DIR_ROOT.newFolder();
File artifactRoot = BasicFileUtils.getSubPath(gradleHome, "org", "myproj");
File jarDir = BasicFileUtils.getSubPath(artifactRoot, "jar", "43253");
File jar = BasicFileUtils.getSubPath(jarDir, "myproj.jar");
jarDir.mkdirs();
TestBinaryUtils.createTestJar(jar);
URL binaryUrl = Utilities.toURI(jar).toURL();
verifyNotDownloadedSource(gradleHome, binaryUrl);
}
@Test
public void testNewCacheFormat() throws IOException {
File gradleHome = TMP_DIR_ROOT.newFolder();
File artifactRoot = BasicFileUtils.getSubPath(gradleHome, "org", "myproj");
File jarDir = BasicFileUtils.getSubPath(artifactRoot, "57436");
File jar = BasicFileUtils.getSubPath(jarDir, "myproj.jar");
jarDir.mkdirs();
TestBinaryUtils.createTestJar(jar);
File srcDir = BasicFileUtils.getSubPath(artifactRoot, "25754");
File srcFile = BasicFileUtils.getSubPath(srcDir, "myproj-sources.jar");
srcDir.mkdirs();
TestBinaryUtils.createTestJar(srcFile);
URL binaryUrl = Utilities.toURI(jar).toURL();
verifySource(gradleHome, binaryUrl, srcFile);
}
@Test
public void testNewCacheFormatMissingSource() throws IOException {
File gradleHome = TMP_DIR_ROOT.newFolder();
File artifactRoot = BasicFileUtils.getSubPath(gradleHome, "org", "myproj");
File jarDir = BasicFileUtils.getSubPath(artifactRoot, "57436");
File jar = BasicFileUtils.getSubPath(jarDir, "myproj.jar");
jarDir.mkdirs();
TestBinaryUtils.createTestJar(jar);
URL binaryUrl = Utilities.toURI(jar).toURL();
verifyNotDownloadedSource(gradleHome, binaryUrl);
}
@Test
public void testNotInCache() throws IOException {
File root = TMP_DIR_ROOT.newFolder();
File gradleHome = new File(root, ".gradle");
gradleHome.mkdirs();
File binaryHome = new File(root, "otherdir");
File artifactRoot = BasicFileUtils.getSubPath(binaryHome, "org", "myproj");
File jarDir = BasicFileUtils.getSubPath(artifactRoot, "57436");
File jar = BasicFileUtils.getSubPath(jarDir, "myproj.jar");
jarDir.mkdirs();
TestBinaryUtils.createTestJar(jar);
URL binaryUrl = Utilities.toURI(jar).toURL();
SourceForBinaryQueryImplementation2 query = createWithRoot(gradleHome);
assertNull("result1", query.findSourceRoots(binaryUrl));
assertNull("result2", query.findSourceRoots2(binaryUrl));
}
}