/** * This file is part of muCommander, http://www.mucommander.com * Copyright (C) 2002-2016 Maxence Bernard * * muCommander is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * muCommander is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.mucommander.commons.file.util; import com.mucommander.commons.file.AbstractFile; import com.mucommander.commons.io.StreamUtils; import org.testng.annotations.Test; import java.io.IOException; import java.io.InputStream; import java.net.URL; /** * A test case for the {@link ResourceLoader} class. * * @author Maxence Bernard */ public class ResourceLoaderTest { /** * Tests {@link ResourceLoader#getDefaultClassLoader()}. */ @Test public void testDefaultClassLoader() { assert ResourceLoader.getDefaultClassLoader() != null; } /** * Tests <code>ResourceLoader#getResourceAsURL</code> methods. * * @throws IOException should not happen */ @Test public void testResourceAsURL() throws IOException { assertReadable(ResourceLoader.getResourceAsURL(getExistingResourcePath())); assertReadable(ResourceLoader.getResourceAsURL("/"+getExistingResourcePath())); assert ResourceLoader.getResourceAsURL(getNonExistingResourcePath()) == null; assertReadable(ResourceLoader.getResourceAsURL(getExistingResourcePath(), getThisClassLoader(), getRootPackageFile())); assertReadable(ResourceLoader.getResourceAsURL("/"+getExistingResourcePath(), getThisClassLoader(), getRootPackageFile())); assert ResourceLoader.getResourceAsURL(getNonExistingResourcePath(), getThisClassLoader(), getRootPackageFile()) == null; } /** * Tests <code>ResourceLoader#getPackageResourceAsURL</code> methods. * * @throws IOException should not happen */ @Test public void testPackageResourceAsURL() throws IOException { assertReadable(ResourceLoader.getPackageResourceAsURL(getThisPackage(), getExistingResourceName())); assert ResourceLoader.getPackageResourceAsURL(getThisPackage(), getNonExistingResourceName()) == null; assertReadable(ResourceLoader.getPackageResourceAsURL(getThisPackage(), getExistingResourceName(), getThisClassLoader(), getRootPackageFile())); assert ResourceLoader.getPackageResourceAsURL(getThisPackage(), getNonExistingResourceName(), getThisClassLoader(), getRootPackageFile()) == null; } /** * Tests <code>ResourceLoader#getResourceAsStream</code> methods. * * @throws IOException should not happen */ @Test public void testResourceAsStream() throws IOException { assertReadable(ResourceLoader.getResourceAsStream(getExistingResourcePath())); assertReadable(ResourceLoader.getResourceAsStream("/"+getExistingResourcePath())); assert ResourceLoader.getResourceAsStream(getNonExistingResourcePath()) == null; assertReadable(ResourceLoader.getResourceAsStream(getExistingResourcePath(), getThisClassLoader(), getRootPackageFile())); assertReadable(ResourceLoader.getResourceAsStream("/"+getExistingResourcePath(), getThisClassLoader(), getRootPackageFile())); assert ResourceLoader.getResourceAsStream(getNonExistingResourcePath(), getThisClassLoader(), getRootPackageFile()) == null; } /** * Tests <code>ResourceLoader#getPackageResourceAsStream</code> methods. * * @throws IOException should not happen */ @Test public void testPackageResourceAsStream() throws IOException { assertReadable(ResourceLoader.getPackageResourceAsStream(getThisPackage(), getExistingResourceName())); assert ResourceLoader.getPackageResourceAsStream(getThisPackage(), getNonExistingResourceName()) == null; assertReadable(ResourceLoader.getPackageResourceAsStream(getThisPackage(), getExistingResourceName(), getThisClassLoader(), getRootPackageFile())); assert ResourceLoader.getPackageResourceAsStream(getThisPackage(), getNonExistingResourceName(), getThisClassLoader(), getRootPackageFile()) == null; } /** * Tests <code>ResourceLoader#getResourceAsFile</code> methods. * * @throws IOException should not happen */ @Test public void testResourceAsFile() throws IOException { assertReadable(ResourceLoader.getResourceAsFile(getExistingResourcePath())); assertReadable(ResourceLoader.getResourceAsFile("/"+getExistingResourcePath())); assert ResourceLoader.getResourceAsFile(getNonExistingResourcePath()) == null; assertReadable(ResourceLoader.getResourceAsFile(getExistingResourcePath(), getThisClassLoader(), getRootPackageFile())); assertReadable(ResourceLoader.getResourceAsFile("/"+getExistingResourcePath(), getThisClassLoader(), getRootPackageFile())); assert ResourceLoader.getResourceAsFile(getNonExistingResourcePath(), getThisClassLoader(), getRootPackageFile()) == null; } /** * Tests <code>ResourceLoader#getPackageResourceAsFile</code> methods. * * @throws IOException should not happen */ @Test public void testPackageResourceAsFile() throws IOException { assertReadable(ResourceLoader.getPackageResourceAsFile(getThisPackage(), getExistingResourceName())); assert ResourceLoader.getPackageResourceAsFile(getThisPackage(), getNonExistingResourceName()) == null; assertReadable(ResourceLoader.getPackageResourceAsFile(getThisPackage(), getExistingResourceName(), getThisClassLoader(), getRootPackageFile())); assert ResourceLoader.getPackageResourceAsFile(getThisPackage(), getNonExistingResourceName(), getThisClassLoader(), getRootPackageFile()) == null; } /** * Tests <code>ResourceLoader#getRootPackageAsFile</code> methods. * * @throws IOException should not happen */ @Test public void testRootPackageAsFile() throws IOException { AbstractFile rootPackageFile = ResourceLoader.getRootPackageAsFile(getClass()); assert rootPackageFile != null; assert rootPackageFile.exists(); assert rootPackageFile.isBrowsable(); AbstractFile thisClassFile = rootPackageFile.getChild("com/mucommander/commons/file/util/ResourceLoaderTest.class"); assertReadable(thisClassFile); } /** * Tests {@link ResourceLoader#getRelativeClassPath(Class)}. */ @Test public void testRelativeClassPath() { assert "com/mucommander/commons/file/util/ResourceLoaderTest.class".equals(ResourceLoader.getRelativeClassPath(getClass())); } /** * Tests {@link ResourceLoader#getRelativePackagePath(Package)}. */ @Test public void testRelativePackagePath() { // Returned path does not end with a '/' assert "com/mucommander/commons/file/util".equals(ResourceLoader.getRelativePackagePath(getThisPackage())); } //////////////////// // Helper methods // //////////////////// private void assertReadable(InputStream in) throws IOException { assert in != null; StreamUtils.readUntilEOF(in); in.close(); } private void assertReadable(URL url) throws IOException { assert url != null; InputStream in = url.openStream(); StreamUtils.readUntilEOF(in); in.close(); } private void assertReadable(AbstractFile file) throws IOException { assert file != null; assertReadable(file.getInputStream()); assert file.exists(); } private ClassLoader getThisClassLoader() { return getClass().getClassLoader(); } private Package getThisPackage() { return getClass().getPackage(); } private AbstractFile getRootPackageFile() { return ResourceLoader.getRootPackageAsFile(getClass()); } private String getExistingResourceName() { return "ResourceLoaderTest.class"; } private String getExistingResourcePath() { return "com/mucommander/commons/file/util/"+getExistingResourceName(); } private String getNonExistingResourceName() { return "RubberChicken"; } private String getNonExistingResourcePath() { return "com/mucommander/commons/file/util/"+getNonExistingResourceName(); } }