samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterOnCDImageTest.java
2 package org.apidesign.delegatingwriter;
4 import java.io.BufferedWriter;
5 import java.io.IOException;
6 import java.io.StringWriter;
7 import org.junit.Before;
9 import static org.junit.Assert.*;
11 /** Emulates what goes wrong when one wants to process really large character
14 * @author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
16 public class BufferedWriterOnCDImageTest {
18 public BufferedWriterOnCDImageTest() {
22 public void testBehaviourOfRealBufferInJDKObviouslyThisIsGoingToThrowOutOfMemoryException() throws IOException {
23 // BEGIN: writer.countcd
24 CountingWriter writer = new CountingWriter();
25 CDSequence cdImage = new CDSequence();
26 BufferedWriter bufferedWriter = new BufferedWriter(writer);
27 bufferedWriter.append(cdImage);
28 assertEquals("Correct number of writes delegated", cdImage.length(), writer.getCharacterCount());
29 // END: writer.countcd
33 public void testBehaviourOfBufferThatDelegatesToAppend() throws IOException {
34 CountingWriter writer = new CountingWriter();
35 CDSequence cdImage = new CDSequence();
36 BufferedWriter bufferedWriter = new AltBufferedWriter(writer, AltBufferedWriter.Behaviour.DELEGATE_TO_OUT);
37 bufferedWriter.append(cdImage);
38 assertEquals("Correct number of writes delegated", cdImage.length(), writer.getCharacterCount());
41 // BEGIN: writer.bigseq
42 /** A "lazy" sequence of characters, for example one that can represent
43 * content of a CD, read it lazily, do not fit all into memory at once.
45 private static final class CDSequence implements CharSequence {
46 private final int start;
47 private final int end;
50 this(0, 647 * 1024 * 1024);
53 private CDSequence(int start, int end) {
64 public char charAt(int index) {
65 int ch = index % ('Z' - 'A' + 1);
66 return (char) ('A' + ch);
69 public CharSequence subSequence(int start, int end) {
70 return new CDSequence(start, end);
74 public String toString() {
75 char[] arr = new char[length()];
76 for (int i = 0; i < length(); i++) {
79 return new String(arr);
83 } // end of CharSequence