| /******************************************************************************* |
| * Copyright (c) 2010-present Sonatype, Inc. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Stuart McCulloch (Sonatype, Inc.) - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.sisu.space; |
| |
| import static org.eclipse.sisu.space.FileEntryIteratorTest.expand; |
| |
| import java.lang.reflect.Field; |
| import java.net.URL; |
| import java.util.Enumeration; |
| import java.util.NoSuchElementException; |
| |
| import org.junit.Ignore; |
| |
| import junit.framework.TestCase; |
| |
| @Ignore( "Need to replace some test archives" ) |
| public class ResourceEnumerationTest |
| extends TestCase |
| { |
| private static final URL COMMONS_LOGGING_JAR = |
| ZipEntryIteratorTest.class.getResource( "commons-logging-1.1.1.jar" ); |
| |
| public void testResourceEnumeration() |
| throws Exception |
| { |
| final Enumeration<URL> e = |
| new ResourceEnumeration( null, null, true, |
| new URL[] { COMMONS_LOGGING_JAR, expand( COMMONS_LOGGING_JAR ) } ); |
| |
| int n = 0; |
| while ( e.hasMoreElements() ) |
| { |
| e.nextElement(); |
| n++; |
| } |
| assertEquals( 66, n ); |
| |
| try |
| { |
| e.nextElement(); |
| fail( "Expected NoSuchElementException" ); |
| } |
| catch ( final NoSuchElementException nse ) |
| { |
| } |
| } |
| |
| public void testFixedEnumeration() |
| { |
| final Enumeration<URL> e1 = new ResourceEnumeration( "org/apache/commons/logging", "LogFactory.clazz", false, |
| new URL[] { COMMONS_LOGGING_JAR } ); |
| |
| assertFalse( e1.hasMoreElements() ); |
| |
| final Enumeration<URL> e2 = new ResourceEnumeration( "org/apache/commons/logging", "LogFactory.class", false, |
| new URL[] { COMMONS_LOGGING_JAR } ); |
| |
| final String prefix = COMMONS_LOGGING_JAR + "!/"; |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory.class", e2.nextElement().getPath() ); |
| assertFalse( e2.hasMoreElements() ); |
| } |
| |
| public void testRecursiveEnumeration() |
| { |
| final Enumeration<URL> e = |
| new ResourceEnumeration( "/", "LogFactory.class", true, new URL[] { COMMONS_LOGGING_JAR } ); |
| |
| final String prefix = COMMONS_LOGGING_JAR + "!/"; |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory.class", e.nextElement().getPath() ); |
| assertFalse( e.hasMoreElements() ); |
| } |
| |
| public void testGlobbedEnumeration() |
| { |
| int n = 0; |
| final Enumeration<URL> e = new ResourceEnumeration( "/", "*", true, new URL[] { COMMONS_LOGGING_JAR } ); |
| while ( e.hasMoreElements() ) |
| { |
| e.nextElement(); |
| n++; |
| } |
| assertEquals( 33, n ); |
| } |
| |
| public void testGlobbedEnumerationStart() |
| { |
| final Enumeration<URL> e = |
| new ResourceEnumeration( null, "*$2.class", true, new URL[] { COMMONS_LOGGING_JAR } ); |
| |
| final String prefix = COMMONS_LOGGING_JAR + "!/"; |
| assertEquals( prefix + "org/apache/commons/logging/impl/LogFactoryImpl$2.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$2.class", e.nextElement().getPath() ); |
| assertFalse( e.hasMoreElements() ); |
| } |
| |
| public void testGlobbedEnumerationEnd() |
| { |
| final Enumeration<URL> e = |
| new ResourceEnumeration( null, "SimpleLog.*", true, new URL[] { COMMONS_LOGGING_JAR } ); |
| |
| final String prefix = COMMONS_LOGGING_JAR + "!/"; |
| assertEquals( prefix + "org/apache/commons/logging/impl/SimpleLog.class", e.nextElement().getPath() ); |
| assertFalse( e.hasMoreElements() ); |
| } |
| |
| public void testGlobbedEnumerationMiddle() |
| { |
| final Enumeration<URL> e = |
| new ResourceEnumeration( null, "LogFactory*.class", true, new URL[] { COMMONS_LOGGING_JAR } ); |
| |
| final String prefix = COMMONS_LOGGING_JAR + "!/"; |
| assertEquals( prefix + "org/apache/commons/logging/impl/LogFactoryImpl$1.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/impl/LogFactoryImpl$2.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/impl/LogFactoryImpl$3.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/impl/LogFactoryImpl.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$1.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$2.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$3.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$4.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$5.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$6.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory.class", e.nextElement().getPath() ); |
| assertFalse( e.hasMoreElements() ); |
| } |
| |
| public void testMultiGlobbedEnumeration() |
| { |
| final Enumeration<URL> e = new ResourceEnumeration( null, "*Fact*$*", true, new URL[] { COMMONS_LOGGING_JAR } ); |
| |
| final String prefix = COMMONS_LOGGING_JAR + "!/"; |
| assertEquals( prefix + "org/apache/commons/logging/impl/LogFactoryImpl$1.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/impl/LogFactoryImpl$2.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/impl/LogFactoryImpl$3.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$1.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$2.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$3.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$4.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$5.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$6.class", e.nextElement().getPath() ); |
| assertFalse( e.hasMoreElements() ); |
| } |
| |
| public void testSubPathEnumeration() |
| { |
| final Enumeration<URL> e = new ResourceEnumeration( "/org/apache/commons/logging/impl", "*Fact*$*", true, |
| new URL[] { COMMONS_LOGGING_JAR } ); |
| |
| final String prefix = COMMONS_LOGGING_JAR + "!/"; |
| assertEquals( prefix + "org/apache/commons/logging/impl/LogFactoryImpl$1.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/impl/LogFactoryImpl$2.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/impl/LogFactoryImpl$3.class", e.nextElement().getPath() ); |
| assertFalse( e.hasMoreElements() ); |
| } |
| |
| public void testNonRecursiveSubPathEnumeration() |
| { |
| final Enumeration<URL> e = new ResourceEnumeration( "/org/apache/commons/logging/", "*Fact*$*", false, |
| new URL[] { COMMONS_LOGGING_JAR } ); |
| |
| final String prefix = COMMONS_LOGGING_JAR + "!/"; |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$1.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$2.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$3.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$4.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$5.class", e.nextElement().getPath() ); |
| assertEquals( prefix + "org/apache/commons/logging/LogFactory$6.class", e.nextElement().getPath() ); |
| assertFalse( e.hasMoreElements() ); |
| } |
| |
| public void testBrokenUrlEnumeration() |
| throws Exception |
| { |
| final Enumeration<URL> e = |
| new ResourceEnumeration( null, null, true, new URL[] { expand( COMMONS_LOGGING_JAR ) } ); |
| |
| assertTrue( e.hasMoreElements() ); |
| |
| // intentionally break the internal next entry name to trigger a malformed URL problem |
| final Field nextEntryName = ResourceEnumeration.class.getDeclaredField( "nextEntryName" ); |
| nextEntryName.setAccessible( true ); |
| nextEntryName.set( e, "foo:" ); |
| |
| try |
| { |
| e.nextElement(); |
| fail( "Expected IllegalStateException" ); |
| } |
| catch ( final IllegalStateException ise ) |
| { |
| } |
| } |
| } |