package com.redhat.ceylon.common.tool; import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import org.junit.Assert; import org.junit.Test; public class WordWrapTest { private class Helper { private StringWriter sw; private WordWrap wrap; private final int width; public Helper(int width) { this.width = width; clear(); } public WordWrap getWrap() { return wrap; } public void clear() { sw = new StringWriter(); wrap = new WordWrap(sw, width); } public String getLine(int lineNumber) { try { wrap.flush(); BufferedReader reader = new BufferedReader(new StringReader(sw.toString())); try { String result = reader.readLine(); for (int ii = 0; ii < lineNumber; ii++) { result = reader.readLine(); } return result; } finally { reader.close(); } } catch (IOException e) { throw new RuntimeException(e); } } public int getNumLines() { try { wrap.flush(); BufferedReader reader = new BufferedReader(new StringReader(sw.toString())); try { int num = 0; String result = reader.readLine(); while (result != null) { num++; result = reader.readLine(); } return num; } finally { reader.close(); } } catch (IOException e) { throw new RuntimeException(e); } } public void assertLines(String... expectedLines) { try { wrap.flush(); BufferedReader reader = new BufferedReader(new StringReader(sw.toString())); try { int num = 0; String result = reader.readLine(); while (result != null) { Assert.assertEquals("On line " + num +": ", expectedLines[num], result); num++; result = reader.readLine(); } Assert.assertEquals("Unspected number of lines", expectedLines.length, num); } finally { reader.close(); } } catch (IOException e) { throw new RuntimeException(e); } } } private Helper helper = new Helper(10); @Test public void testLessThanWidth() { helper.clear(); helper.getWrap().append("123 567"); helper.assertLines("123 567"); } @Test public void testLessThanWidth2() { helper.clear(); helper.getWrap().append("123 567 9"); helper.assertLines("123 567 9"); } @Test public void testLessThanWidth3() { helper.clear(); helper.getWrap().append("123 567 90"); helper.assertLines("123 567", "90"); } @Test public void testMoreThanWidth() { helper.clear(); helper.getWrap().append("123 567 9012"); helper.assertLines("123 567", "9012"); } @Test public void testMoreThanWidth2() { helper.clear(); helper.getWrap().append("123 567").append(" 9012"); helper.assertLines("123 567", "9012"); } @Test public void testMoreThanWidth3() { helper.clear(); helper.getWrap().append("123 567 ").append("9012"); helper.assertLines("123 567", "9012"); } @Test public void testMoreThanWidth4() { helper.clear(); helper.getWrap().append("123 567 91011 12"); helper.assertLines("123 567", "91011 12"); } @Test public void testIndent() { helper.clear(); helper.getWrap().setIndent(2); helper.getWrap().append("123 567 91011 12"); helper.assertLines(" 123 567", " 91011 12"); } @Test public void testFirstLineIndent() { helper.clear(); helper.getWrap().setIndentFirstLine(1); helper.getWrap().setIndentRestLines(2); helper.getWrap().append("123 567 91011 12"); helper.assertLines(" 123 567", " 91011 12"); } @Test public void testCollapsingWhitespace() { helper.clear(); helper.getWrap().append("123 67 91011 12"); helper.assertLines("123 67", "91011 12"); } @Test public void testTab() { helper.clear(); helper.getWrap().addTabStop(4); helper.getWrap().addTabStop(8); helper.getWrap().append("1").tab().append("23").tab().append("4"); helper.assertLines("1 23 4"); } }