blob: 593a1df92177a743a6887146095f92e7340c2743 [file] [log] [blame]
/*******************************************************************************
* 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 )
{
}
}
}