1.1 --- a/samples/delegatingwriter/src/org/apidesign/delegatingwriter/AltBufferedWriter.java Sat Jun 14 09:53:04 2008 +0200
1.2 +++ b/samples/delegatingwriter/src/org/apidesign/delegatingwriter/AltBufferedWriter.java Sat Jun 14 09:53:05 2008 +0200
1.3 @@ -71,8 +71,29 @@
1.4 // END: writer.delegateout
1.5 }
1.6
1.7 - private Writer appendDelegateConditionally(CharSequence csq) {
1.8 - throw new UnsupportedOperationException("Not yet implemented");
1.9 + private Writer appendDelegateConditionally(CharSequence csq) throws IOException {
1.10 + // BEGIN: writer.conditionally
1.11 + boolean isOverriden = false;
1.12 + try {
1.13 + isOverriden =
1.14 + (getClass().getMethod("write", String.class).getDeclaringClass() != Writer.class) ||
1.15 + (getClass().getMethod("write", Integer.TYPE).getDeclaringClass() != BufferedWriter.class) ||
1.16 + (getClass().getMethod("write", String.class, Integer.TYPE, Integer.TYPE).getDeclaringClass() != BufferedWriter.class);
1.17 + } catch (Exception ex) {
1.18 + throw new IOException(ex);
1.19 + }
1.20 +
1.21 + if (isOverriden) {
1.22 + if (csq == null) {
1.23 + write("null");
1.24 + } else {
1.25 + write(csq.toString());
1.26 + }
1.27 + } else {
1.28 + out.append(csq);
1.29 + }
1.30 + return this;
1.31 + // END: writer.conditionally
1.32 }
1.33
1.34 public enum Behaviour {
2.1 --- a/samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterCryptoTest.java Sat Jun 14 09:53:04 2008 +0200
2.2 +++ b/samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterCryptoTest.java Sat Jun 14 09:53:05 2008 +0200
2.3 @@ -45,4 +45,12 @@
2.4 );
2.5 }
2.6
2.7 + @Test
2.8 + public void testBehaviourWhenDelegatingConditionallyIsOK() throws IOException {
2.9 + CryptoWriter bufferedWriter = new CryptoWriter(writer, AltBufferedWriter.Behaviour.DELEGATE_CONDITIONALLY);
2.10 + bufferedWriter.append("VMS");
2.11 + bufferedWriter.flush();
2.12 + assertEquals("Converted", "WNT", writer.toString());
2.13 + }
2.14 +
2.15 }
2.16 \ No newline at end of file
3.1 --- a/samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterOnCDImageTest.java Sat Jun 14 09:53:04 2008 +0200
3.2 +++ b/samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterOnCDImageTest.java Sat Jun 14 09:53:05 2008 +0200
3.3 @@ -35,6 +35,16 @@
3.4 bufferedWriter.append(cdImage);
3.5 assertEquals("Correct number of writes delegated", cdImage.length(), writer.getCharacterCount());
3.6 }
3.7 +
3.8 + @Test
3.9 + public void testBehaviourWhenDelegatingConditionallyIsOK() throws IOException {
3.10 + CountingWriter writer = new CountingWriter();
3.11 + CDSequence cdImage = new CDSequence();
3.12 + BufferedWriter bufferedWriter = new AltBufferedWriter(writer, AltBufferedWriter.Behaviour.DELEGATE_CONDITIONALLY);
3.13 + bufferedWriter.append(cdImage);
3.14 + assertEquals("Correct number of writes delegated", cdImage.length(), writer.getCharacterCount());
3.15 + }
3.16 +
3.17
3.18 // BEGIN: writer.bigseq
3.19 /** A "lazy" sequence of characters, for example one that can represent
4.1 --- a/samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterThrowingExceptionTest.java Sat Jun 14 09:53:04 2008 +0200
4.2 +++ b/samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterThrowingExceptionTest.java Sat Jun 14 09:53:05 2008 +0200
4.3 @@ -43,6 +43,14 @@
4.4 assertEquals("Hello!", writer.toString());
4.5 }
4.6
4.7 + @Test
4.8 + public void testBehaviourWhenDelegatingConditionallyIsOK() throws IOException {
4.9 + BufferedWriter bufferedWriter = new AltBufferedWriter(writer, AltBufferedWriter.Behaviour.DELEGATE_CONDITIONALLY);
4.10 + doAppendHello(bufferedWriter, "Hello!");
4.11 + bufferedWriter.flush();
4.12 +
4.13 + assertEquals("Hello!", writer.toString());
4.14 + }
4.15
4.16 private void doAppendHello(BufferedWriter bufferedWriter, CharSequence what) throws IOException {
4.17 // BEGIN: writer.throw.client