package org.smoothbuild.builtin.java.junit;
import static org.smoothbuild.db.values.ValuesDb.memoryValuesDb;
import static org.smoothbuild.io.fs.base.Path.path;
import static org.smoothbuild.testing.db.values.ValueCreators.file;
import static org.smoothbuild.util.Classes.binaryPath;
import static org.testory.Testory.given;
import static org.testory.Testory.thenReturned;
import static org.testory.Testory.when;
import static org.testory.common.Matchers.same;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import org.smoothbuild.db.values.ValuesDb;
import org.smoothbuild.lang.value.SFile;
import org.smoothbuild.util.Classes;
public class FileClassLoaderTest {
private final ValuesDb valuesDb = memoryValuesDb();
private FileClassLoader fileClassLoader;
private SFile file;
private Class<MyClass> klass;
@Test
public void loads_class_from_binary() throws Exception {
given(klass = FileClassLoaderTest.MyClass.class);
given(file = createByteCodeFile(klass));
given(fileClassLoader = new FileClassLoader(map(klass.getName(), file)));
when(fileClassLoader.findClass(klass.getName()).getClassLoader());
thenReturned(same(fileClassLoader));
}
private static Map<String, SFile> map(String name, SFile file) {
HashMap<String, SFile> result = new HashMap<>();
result.put(name, file);
return result;
}
private SFile createByteCodeFile(Class<?> klass) throws IOException {
return file(valuesDb, path(binaryPath(klass)), Classes.bytecode(klass));
}
public static class MyClass {
public static String myMethod() {
return "myResult";
}
}
}