# HG changeset patch # User Jaroslav Tulach # Date 1213429985 -7200 # Node ID 7b26c64804c2a7376a26fa324cd4ff2b782c9146 # Parent cbba5b31d11c0a92418fd5921ab7f6e60d14fa2d Reflection will save to world! diff -r cbba5b31d11c -r 7b26c64804c2 samples/delegatingwriter/src/org/apidesign/delegatingwriter/AltBufferedWriter.java --- a/samples/delegatingwriter/src/org/apidesign/delegatingwriter/AltBufferedWriter.java Sat Jun 14 09:53:04 2008 +0200 +++ b/samples/delegatingwriter/src/org/apidesign/delegatingwriter/AltBufferedWriter.java Sat Jun 14 09:53:05 2008 +0200 @@ -71,8 +71,29 @@ // END: writer.delegateout } - private Writer appendDelegateConditionally(CharSequence csq) { - throw new UnsupportedOperationException("Not yet implemented"); + private Writer appendDelegateConditionally(CharSequence csq) throws IOException { + // BEGIN: writer.conditionally + boolean isOverriden = false; + try { + isOverriden = + (getClass().getMethod("write", String.class).getDeclaringClass() != Writer.class) || + (getClass().getMethod("write", Integer.TYPE).getDeclaringClass() != BufferedWriter.class) || + (getClass().getMethod("write", String.class, Integer.TYPE, Integer.TYPE).getDeclaringClass() != BufferedWriter.class); + } catch (Exception ex) { + throw new IOException(ex); + } + + if (isOverriden) { + if (csq == null) { + write("null"); + } else { + write(csq.toString()); + } + } else { + out.append(csq); + } + return this; + // END: writer.conditionally } public enum Behaviour { diff -r cbba5b31d11c -r 7b26c64804c2 samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterCryptoTest.java --- a/samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterCryptoTest.java Sat Jun 14 09:53:04 2008 +0200 +++ b/samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterCryptoTest.java Sat Jun 14 09:53:05 2008 +0200 @@ -45,4 +45,12 @@ ); } + @Test + public void testBehaviourWhenDelegatingConditionallyIsOK() throws IOException { + CryptoWriter bufferedWriter = new CryptoWriter(writer, AltBufferedWriter.Behaviour.DELEGATE_CONDITIONALLY); + bufferedWriter.append("VMS"); + bufferedWriter.flush(); + assertEquals("Converted", "WNT", writer.toString()); + } + } \ No newline at end of file diff -r cbba5b31d11c -r 7b26c64804c2 samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterOnCDImageTest.java --- a/samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterOnCDImageTest.java Sat Jun 14 09:53:04 2008 +0200 +++ b/samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterOnCDImageTest.java Sat Jun 14 09:53:05 2008 +0200 @@ -35,6 +35,16 @@ bufferedWriter.append(cdImage); assertEquals("Correct number of writes delegated", cdImage.length(), writer.getCharacterCount()); } + + @Test + public void testBehaviourWhenDelegatingConditionallyIsOK() throws IOException { + CountingWriter writer = new CountingWriter(); + CDSequence cdImage = new CDSequence(); + BufferedWriter bufferedWriter = new AltBufferedWriter(writer, AltBufferedWriter.Behaviour.DELEGATE_CONDITIONALLY); + bufferedWriter.append(cdImage); + assertEquals("Correct number of writes delegated", cdImage.length(), writer.getCharacterCount()); + } + // BEGIN: writer.bigseq /** A "lazy" sequence of characters, for example one that can represent diff -r cbba5b31d11c -r 7b26c64804c2 samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterThrowingExceptionTest.java --- a/samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterThrowingExceptionTest.java Sat Jun 14 09:53:04 2008 +0200 +++ b/samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterThrowingExceptionTest.java Sat Jun 14 09:53:05 2008 +0200 @@ -43,6 +43,14 @@ assertEquals("Hello!", writer.toString()); } + @Test + public void testBehaviourWhenDelegatingConditionallyIsOK() throws IOException { + BufferedWriter bufferedWriter = new AltBufferedWriter(writer, AltBufferedWriter.Behaviour.DELEGATE_CONDITIONALLY); + doAppendHello(bufferedWriter, "Hello!"); + bufferedWriter.flush(); + + assertEquals("Hello!", writer.toString()); + } private void doAppendHello(BufferedWriter bufferedWriter, CharSequence what) throws IOException { // BEGIN: writer.throw.client