package net.ayld.facade.resolver.impl;
import static junit.framework.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Set;
import java.util.jar.JarFile;
import net.ayld.facade.dependency.resolver.DependencyBundleResolver;
import net.ayld.facade.model.ClassName;
import net.ayld.facade.util.Tokenizer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import com.google.common.io.Resources;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:META-INF/test-contexts/testManualDependencyBundleResolverContext.xml"})
public class TestManualDependencyBundleResolver {
@Autowired
private DependencyBundleResolver bundleResolver;
@Autowired
private String workDir;
@Test
public void resolve() throws IOException, URISyntaxException {
final Set<URL> bundleUrls = ImmutableSet.of(
Resources.getResource("test-classes/lib/aspectjweaver-1.6.12.jar"),
Resources.getResource("test-classes/lib/commons-lang3-3.1.jar"),
Resources.getResource("test-classes/lib/primefaces-3.5.jar")
);
final Set<JarFile> bundles = Sets.newHashSet();
for (URL bundleUrl : bundleUrls) {
// make sure extracted folders are not already created
final String jarName = Tokenizer.delimiter("/").tokenize(bundleUrl.toString()).lastToken();
final File extractedDir = new File(Joiner.on(File.separator).join(workDir, jarName));
if (extractedDir.exists()) {
delete(extractedDir);
}
// make URLs to files
bundles.add(new JarFile(new File(bundleUrl.toURI())));
}
final Set<JarFile> jarsContainingClass = bundleResolver.resolve(new ClassName("org.primefaces.context.PrimePartialViewContext"), bundles);
assertTrue(jarsContainingClass.size() > 0);
assertTrue(jarsContainingClass.iterator().next().getName().endsWith("primefaces-3.5.jar"));
}
private static void delete(File file) throws IOException {
if (file.isDirectory()) {
for (File sub : file.listFiles()) {
delete(sub);
}
}
if (!file.delete()) {
throw new IOException("failed to deleteRecursive: " + file);
}
}
}