package org.jooby.assets; import static org.easymock.EasyMock.expect; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.File; import java.net.URLClassLoader; import org.jooby.test.MockUnit; import org.jooby.test.MockUnit.Block; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) @PrepareForTest({AssetClassLoader.class, File.class }) public class AssetClassLoaderTest { @Test public void publicClassLoader() throws Exception { File dir = new File("public"); new MockUnit(File.class, ClassLoader.class) .expect(publicDir(true, dir)) .run(unit -> { new AssetClassLoader(); ClassLoader cl = AssetClassLoader.classLoader(unit.get(ClassLoader.class)); assertTrue(cl instanceof URLClassLoader); }); } @Test public void providedClassLoader() throws Exception { File dir = new File("public"); new MockUnit(File.class, ClassLoader.class) .expect(publicDir(false, dir)) .run(unit -> { ClassLoader cl = AssetClassLoader.classLoader(unit.get(ClassLoader.class)); assertEquals(unit.get(ClassLoader.class), cl); }); } private Block publicDir(final boolean exists, final File file) { return unit -> { File f = unit.constructor(File.class) .build("public"); expect(f.exists()).andReturn(exists); if (exists) { expect(f.toURI()).andReturn(file.toURI()); } unit.registerMock(File.class, f); }; } }