| /* |
| * Copyright (C) 2007 The Guava Authors |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.google.common.io; |
| |
| import java.io.Closeable; |
| import java.io.Flushable; |
| import java.io.IOException; |
| import java.io.Writer; |
| |
| /** |
| * Unit test for {@link AppendableWriter}. |
| * |
| * @author Alan Green |
| */ |
| public class AppendableWriterTest extends IoTestCase { |
| |
| /** Helper class for testing behavior with Flushable and Closeable targets. */ |
| private static class SpyAppendable implements Appendable, Flushable, Closeable { |
| boolean flushed; |
| boolean closed; |
| StringBuilder result = new StringBuilder(); |
| |
| @Override |
| public Appendable append(CharSequence csq) { |
| result.append(csq); |
| return this; |
| } |
| |
| @Override |
| public Appendable append(char c) { |
| result.append(c); |
| return this; |
| } |
| |
| @Override |
| public Appendable append(CharSequence csq, int start, int end) { |
| result.append(csq, start, end); |
| return this; |
| } |
| |
| @Override |
| public void flush() { |
| flushed = true; |
| } |
| |
| @Override |
| public void close() { |
| closed = true; |
| } |
| } |
| |
| public void testWriteMethods() throws IOException { |
| StringBuilder builder = new StringBuilder(); |
| Writer writer = new AppendableWriter(builder); |
| |
| writer.write("Hello".toCharArray()); |
| writer.write(','); |
| writer.write(0xBEEF0020); // only lower 16 bits are important |
| writer.write("Wo"); |
| writer.write("Whirled".toCharArray(), 3, 2); |
| writer.write("Mad! Mad, I say", 2, 2); |
| |
| assertEquals("Hello, World!", builder.toString()); |
| } |
| |
| public void testAppendMethods() throws IOException { |
| StringBuilder builder = new StringBuilder(); |
| Writer writer = new AppendableWriter(builder); |
| |
| writer.append("Hello,"); |
| writer.append(' '); |
| writer.append("The World Wide Web", 4, 9); |
| writer.append("!"); |
| |
| assertEquals("Hello, World!", builder.toString()); |
| } |
| |
| public void testCloseFlush() throws IOException { |
| SpyAppendable spy = new SpyAppendable(); |
| Writer writer = new AppendableWriter(spy); |
| |
| writer.write("Hello"); |
| assertFalse(spy.flushed); |
| assertFalse(spy.closed); |
| |
| writer.flush(); |
| assertTrue(spy.flushed); |
| assertFalse(spy.closed); |
| |
| writer.close(); |
| assertTrue(spy.flushed); |
| assertTrue(spy.closed); |
| } |
| |
| public void testCloseIsFinal() throws IOException { |
| StringBuilder builder = new StringBuilder(); |
| Writer writer = new AppendableWriter(builder); |
| |
| writer.write("Hi"); |
| writer.close(); |
| |
| try { |
| writer.write(" Greg"); |
| fail("Should have thrown IOException due to writer already closed"); |
| } catch (IOException expected) { |
| } |
| |
| try { |
| writer.flush(); |
| fail("Should have thrown IOException due to writer already closed"); |
| } catch (IOException expected) { |
| } |
| |
| // close()ing already closed writer is allowed |
| writer.close(); |
| } |
| } |