Reflection will save to world!
authorJaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 09:53:05 +0200
changeset 647b26c64804c2
parent 63 cbba5b31d11c
child 65 4db7ceebd2b3
Reflection will save to world!
samples/delegatingwriter/src/org/apidesign/delegatingwriter/AltBufferedWriter.java
samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterCryptoTest.java
samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterOnCDImageTest.java
samples/delegatingwriter/test/org/apidesign/delegatingwriter/BufferedWriterThrowingExceptionTest.java
     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