package org.kevoree.kcl;
import org.junit.Test;
import org.kevoree.kcl.api.FlexyClassLoader;
import org.kevoree.kcl.api.FlexyClassLoaderFactory;
import org.kevoree.kcl.api.Helper;
import org.kevoree.kcl.impl.FlexyClassLoaderImpl;
import org.kevoree.log.Log;
import java.io.IOException;
import java.io.InputStream;
/**
* Created with IntelliJ IDEA.
* User: duke
* Date: 19/08/13
* Time: 11:47
*/
public class SimpleTest {
@Test
public void simpleTest() throws IOException, ClassNotFoundException {
System.out.println("Perform simple KCL Test");
FlexyClassLoader jar = FlexyClassLoaderFactory.INSTANCE.create();
jar.load(Helper.stream2File(this.getClass().getClassLoader().getResourceAsStream("org.kevoree.kcl.jar"),"org.kevoree.kcl.jar"));
Class resolvedClass = jar.loadClass("org.kevoree.kcl.impl.FlexyClassLoaderImpl");
System.out.println(resolvedClass.getClassLoader());
assert (resolvedClass.getClassLoader().equals(jar));
Class resolvedLogClass = jar.loadClass(Log.class.getName());
assert (!resolvedLogClass.getClassLoader().equals(jar)); // Log class should be resolved from the System ClassLoader nor the new KCL (no binding)
}
@Test
public void linkedTest() throws IOException, ClassNotFoundException {
FlexyClassLoaderImpl systemEnabledKCL = new FlexyClassLoaderImpl();
System.out.println("Perform simple KCL Test");
FlexyClassLoader jar = new FlexyClassLoaderImpl();
//jar.isolateFromSystem();
jar.load(Helper.stream2File(this.getClass().getClassLoader().getResourceAsStream("org.kevoree.kcl.jar"),"org.kevoree.kcl.jar"));
systemEnabledKCL.attachChild(jar);
FlexyClassLoaderImpl jarLog = new FlexyClassLoaderImpl();
jarLog.load(Helper.stream2File(this.getClass().getClassLoader().getResourceAsStream("org.kevoree.log.jar"),"org.kevoree.log.jar"));
//jarLog.isolateFromSystem();
systemEnabledKCL.attachChild(jarLog);
jar.attachChild(jarLog);
Class resolvedClass = systemEnabledKCL.loadClass("org.kevoree.kcl.impl.FlexyClassLoaderImpl");
//assert (resolvedClass.getClassLoader().equals(systemEnabledKCL));
Class resolvedLogClass = systemEnabledKCL.loadClass(Log.class.getName()); //std resolution of class
// assert (resolvedLogClass.getClassLoader().equals(jarLog));
Class resolvedLogClassTransitive = systemEnabledKCL.loadClass(Log.class.getName());
//assert (resolvedLogClassTransitive.getClassLoader().equals(jarLog)); // Log class should be resolved from the new KCL
//TEst the transitive link
InputStream stream = systemEnabledKCL.getResourceAsStream("META-INF/maven/org.kevoree.kcl/org.kevoree.kcl/pom.xml");
System.out.println(stream);
System.out.println(systemEnabledKCL.getResources("META-INF/maven/org.kevoree.kcl/org.kevoree.kcl/pom.xml").hasMoreElements());
System.out.println(jar.getResources("META-INF/maven/org.kevoree.kcl/org.kevoree.kcl/pom.xml").hasMoreElements());
}
}