2 package org.apidesign.exceptions.trycatchredo;
4 import java.io.ByteArrayInputStream;
5 import java.io.ByteArrayOutputStream;
6 import java.io.IOException;
7 import java.io.InputStream;
8 import java.io.OutputStream;
9 import java.net.MalformedURLException;
11 import java.net.URLConnection;
12 import java.net.URLStreamHandler;
13 import java.net.URLStreamHandlerFactory;
14 import java.util.HashMap;
16 import junit.framework.Assert;
20 * @author Jaroslav Tulach
22 public final class MemoryURL extends URLStreamHandler {
26 static void initialize() {
29 class F implements URLStreamHandlerFactory {
30 public URLStreamHandler createURLStreamHandler(String protocol) {
31 if (protocol.startsWith("memory")) {
32 return new MemoryURL();
38 URL.setURLStreamHandlerFactory(f);
41 private static Map<String,InputStream> contents = new HashMap<String,InputStream>();
42 private static Map<String,MC> outputs = new HashMap<String,MC>();
43 public static void registerURL(String u, String content, ByteArrayOutputStream out) throws MalformedURLException {
44 contents.put(u, new ByteArrayInputStream(content.getBytes()));
46 new MC(new URL(u)).out = out;
50 public static byte[] getOutputForURL(String u) {
51 MC out = outputs.get(u);
52 Assert.assertNotNull("No output for " + u, out);
53 return out.out.toByteArray();
56 protected URLConnection openConnection(URL u) throws IOException {
60 private static final class MC extends URLConnection {
61 private InputStream values;
62 private ByteArrayOutputStream out;
66 outputs.put(u.toExternalForm(), this);
69 public void connect() throws IOException {
73 values = contents.remove(url.toExternalForm());
75 throw new IOException("No such content: " + url);
80 public InputStream getInputStream() throws IOException {
86 public OutputStream getOutputStream() throws IOException {
88 out = new ByteArrayOutputStream();