blob: 74b22768d4e2d9de4823b0225610bbe0392ee06d [file] [log] [blame]
package org.apache.harmony.luni.tests.java.net;
import dalvik.annotation.SideEffect;
import junit.framework.TestCase;
import tests.support.Support_Configuration;
import java.io.IOException;
import java.lang.reflect.Field;
import java.net.ContentHandler;
import java.net.ContentHandlerFactory;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class ContentHandlerFactoryTest extends TestCase {
ContentHandlerFactory oldFactory = null;
Field factoryField = null;
boolean isTestable = false;
boolean isGetContentCalled = false;
boolean isCreateContentHandlerCalled = false;
@SideEffect("This test affects tests that are run after this one." +
" The reason are side effects due to caching in URLConnection." +
" Maybe this test needs to be run in isolation.")
public void test_createContentHandler() throws IOException {
TestContentHandlerFactory factory = new TestContentHandlerFactory();
if(isTestable) {
assertFalse(isCreateContentHandlerCalled);
URL url = new URL("http://" +
Support_Configuration.SpecialInetTestAddress);
URLConnection.setContentHandlerFactory(factory);
URLConnection con = url.openConnection();
try {
con.getContent();
assertTrue(isCreateContentHandlerCalled);
assertTrue(isGetContentCalled);
} catch (Exception e) {
throw new RuntimeException(e);
}
isGetContentCalled = false;
try {
con.getContent(new Class[] {});
assertTrue(isGetContentCalled);
} catch (Exception e) {
throw new RuntimeException(e);
}
try {
con.setContentHandlerFactory(factory);
fail("java.lang.Error was not thrown.");
} catch(java.lang.Error e) {
//expected
}
try {
con.setContentHandlerFactory(null);
fail("java.lang.Error was not thrown.");
} catch(java.lang.Error e) {
//expected
}
} else {
ContentHandler ch = factory.createContentHandler("text/plain");
URL url;
try {
url = new URL("http://" +
Support_Configuration.SpecialInetTestAddress);
assertNotNull(ch.getContent(url.openConnection()));
} catch (MalformedURLException e) {
fail("MalformedURLException was thrown: " + e.getMessage());
} catch (IOException e) {
fail("IOException was thrown.");
}
}
}
public void setUp() {
Field [] fields = URLConnection.class.getDeclaredFields();
int counter = 0;
for (Field field : fields) {
if (ContentHandlerFactory.class.equals(field.getType())) {
counter++;
factoryField = field;
}
}
if(counter == 1) {
isTestable = true;
factoryField.setAccessible(true);
try {
oldFactory = (ContentHandlerFactory) factoryField.get(null);
} catch (IllegalArgumentException e) {
fail("IllegalArgumentException was thrown during setUp: "
+ e.getMessage());
} catch (IllegalAccessException e) {
fail("IllegalAccessException was thrown during setUp: "
+ e.getMessage());
}
}
}
public void tearDown() {
if(isTestable) {
try {
factoryField.set(null, oldFactory);
} catch (IllegalArgumentException e) {
fail("IllegalArgumentException was thrown during tearDown: "
+ e.getMessage());
} catch (IllegalAccessException e) {
fail("IllegalAccessException was thrown during tearDown: "
+ e.getMessage());
}
}
}
public class TestContentHandler extends ContentHandler {
public Object getContent(URLConnection u) {
isGetContentCalled = true;
return null;
}
}
public class TestContentHandlerFactory implements ContentHandlerFactory {
public ContentHandler createContentHandler(String mimetype) {
isCreateContentHandlerCalled = true;
return new TestContentHandler();
}
}
}