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,OutputStream> outputs = new HashMap<String,OutputStream>();
43 public static void registerURL(String u, String content, OutputStream out) throws MalformedURLException {
44 contents.put(u, new ByteArrayInputStream(content.getBytes()));
48 public static String getOutputForURL(String u) {
49 OutputStream out = outputs.get(u);
50 Assert.assertNotNull("No output for " + u, out);
51 return out.toString();
54 protected URLConnection openConnection(URL u) throws IOException {
58 private static final class MC extends URLConnection {
59 private InputStream values;
60 private OutputStream out;
64 out = outputs.get(u.toExternalForm());
66 out = new ByteArrayOutputStream();
67 outputs.put(u.toExternalForm(), out);
71 public void connect() throws IOException {
75 values = contents.remove(url.toExternalForm());
77 throw new IOException("No such content: " + url);
82 public InputStream getInputStream() throws IOException {
88 public OutputStream getOutputStream() throws IOException {
90 out = new ByteArrayOutputStream();