/*******************************************************************************
* Copyright (c) 2009 itemis AG (http://www.itemis.eu) and others.
* 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
*
*******************************************************************************/
package org.eclipse.emf.mwe.core.resources;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import org.junit.Assert;
import org.junit.Test;
/**
* @author Sven Efftinge - Initial contribution and API
*
*/
public class CachingResourceLoaderTest extends Assert {
@Test public void testLoadResource() throws Exception {
DelegatingResourceLoader delegatingResourceLoader = new DelegatingResourceLoader(
new ResourceLoaderImpl(getClass().getClassLoader()));
CachingResourceLoaderImpl loader = new CachingResourceLoaderImpl(delegatingResourceLoader);
String uri = getClass().getCanonicalName().replace('.', '/') + ".txt";
URL resource = loader.getResource(uri);
InputStream stream1 = loader.getResourceAsStream(uri);
InputStream stream2 = loader.getResourceAsStream(uri);
InputStream stream3 = resource.openStream();
String text1 = new BufferedReader(new InputStreamReader(stream1)).readLine().trim();
String text2 = new BufferedReader(new InputStreamReader(stream2)).readLine().trim();
String text3 = new BufferedReader(new InputStreamReader(stream3)).readLine().trim();
assertEquals("Foo", text1);
assertEquals("Foo", text2);
assertEquals("Foo", text3);
assertEquals(0, delegatingResourceLoader.getResourceAsStream);
assertEquals(1, delegatingResourceLoader.getResource);
loader.getResource(uri);
assertEquals(1, delegatingResourceLoader.getResource);
}
private static class DelegatingResourceLoader implements ResourceLoader {
private ResourceLoader delegate;
public int getResource = 0;
public int getResourceAsStream = 0;
public int loadClass = 0;
public DelegatingResourceLoader(ResourceLoader delegate) {
super();
this.delegate = delegate;
}
public URL getResource(String uri) {
getResource++;
return delegate.getResource(uri);
}
public InputStream getResourceAsStream(String uri) {
getResourceAsStream++;
return delegate.getResourceAsStream(uri);
}
public Class<?> loadClass(String clazzName) {
loadClass++;
return delegate.loadClass(clazzName);
}
}
@Test public void testLoadClass() throws Exception {
DelegatingResourceLoader delegatingResourceLoader = new DelegatingResourceLoader(
new ResourceLoaderImpl(getClass().getClassLoader()));
CachingResourceLoaderImpl loader = new CachingResourceLoaderImpl(delegatingResourceLoader);
for (int i = 0; i < 10; i++) {
Class<?> class1 = loader.loadClass(getClass().getCanonicalName());
assertEquals(getClass(), class1);
assertEquals(1, delegatingResourceLoader.loadClass);
}
}
}