/* * Copyright (C) 2012 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.crsh.text; import org.crsh.AbstractTestCase; import java.io.IOException; /** * @author Julien Viet */ public class VirtualScreenTestCase extends AbstractTestCase { static class TestBuffer extends ScreenBuffer implements ScreenContext { int width, height; TestBuffer(int width, int height) { this.width = width; this.height = height; } public int getWidth() { return width; } public int getHeight() { return height; } } public void testWrite() throws Exception { assertBuffer(2, 2, "abcd", "abcde"); assertBuffer(2, 2, "abcd", "a", "b", "c", "d", "e"); assertBuffer(2, 2, "a\nbc", "a\nb", "c", "d"); assertBuffer(2, 2, "a\nb", "a\n", "b\n", "c"); assertBuffer(2, 2, "a\nb", "a", "\n", "b", "\n", "c"); assertBuffer(2, 2, "\n","\n", "\n", "a"); assertBuffer(2, 2, "", ""); } private void assertBuffer(int width, int height, String actual, String... test) throws IOException { TestBuffer tmp = new TestBuffer(width, height); VirtualScreen buffer = new VirtualScreen(tmp); for (String a : test) { buffer.append(a); buffer.paint(); assertTrue(buffer.isPainting() || buffer.isPainted()); } assertEquals(actual, tmp.toString()); } public void testPreviousRow() throws Exception { TestBuffer tmp = new TestBuffer(2, 2); VirtualScreen buffer = new VirtualScreen(tmp); assertFalse(buffer.previousRow()); buffer.append("abcdef"); assertTrue(buffer.isRefresh()); assertTrue(buffer.paint().isPainted()); assertFalse(buffer.previousRow()); assertTrue(buffer.nextRow()); tmp.clear(); assertTrue(buffer.previousRow()); assertTrue(buffer.isRefresh()); assertTrue(buffer.paint().isPainted()); assertEquals("abcd", tmp.toString()); assertFalse(buffer.previousRow()); } public void testPreviousRow2() throws Exception { TestBuffer tmp = new TestBuffer(2, 2); VirtualScreen buffer = new VirtualScreen(tmp); buffer.append("a\nb"); assertTrue(buffer.isRefresh()); assertTrue(buffer.paint().isPainting()); assertFalse(buffer.nextRow()); buffer.append("\n"); assertTrue(buffer.paint().isPainted()); assertTrue(buffer.nextRow()); tmp.clear(); assertTrue(buffer.previousRow()); assertTrue(buffer.isRefresh()); assertTrue(buffer.paint().isPainted()); assertEquals("a\nb", tmp.toString()); } public void testPreviewRow3() throws Exception { TestBuffer tmp = new TestBuffer(2, 2); VirtualScreen buffer = new VirtualScreen(tmp); buffer.append("a\nb\nc\nd\ne\nf"); assertTrue(buffer.isRefresh()); assertTrue(buffer.paint().isPainted()); assertTrue(buffer.nextRow()); assertTrue(buffer.isRefresh()); assertTrue(buffer.paint().isPainted()); assertTrue(buffer.nextRow()); assertTrue(buffer.isRefresh()); assertTrue(buffer.paint().isPainted()); tmp.clear(); assertTrue(buffer.previousRow()); assertTrue(buffer.isRefresh()); assertTrue(buffer.paint().isPainted()); assertEquals("b\nc", tmp.toString()); } public void testNextRow0() throws Exception { TestBuffer tmp = new TestBuffer(2, 2); VirtualScreen buffer = new VirtualScreen(tmp); assertTrue(buffer.isRefresh()); assertTrue(buffer.paint().isPainting()); assertFalse(buffer.nextRow()); assertTrue(buffer.isPainting()); } public void testNextRow1() throws Exception { TestBuffer tmp = new TestBuffer(2, 2); VirtualScreen buffer = new VirtualScreen(tmp); buffer.append("abcd"); assertTrue(buffer.isRefresh()); assertTrue(buffer.paint().isPainted()); assertFalse(buffer.nextRow()); assertTrue(buffer.isPainted()); } public void testNextRow2() throws Exception { TestBuffer tmp = new TestBuffer(2, 2); VirtualScreen buffer = new VirtualScreen(tmp); buffer.append("abcde"); assertTrue(buffer.isRefresh()); assertTrue(buffer.paint().isPainted()); assertTrue(buffer.nextRow()); assertTrue(buffer.isRefresh()); assertTrue(buffer.paint().isPainting()); assertFalse(buffer.nextRow()); assertTrue(buffer.isPainting()); buffer.append("fg"); assertTrue(buffer.isPainting()); assertTrue(buffer.paint().isPainted()); assertTrue(buffer.nextRow()); assertTrue(buffer.isRefresh()); assertTrue(buffer.paint().isPainting()); } public void testNextRow3() throws Exception { TestBuffer tmp = new TestBuffer(2, 2); VirtualScreen buffer = new VirtualScreen(tmp); buffer.append("a\nb"); assertFalse(buffer.nextRow()); assertTrue(buffer.isRefresh()); assertTrue(buffer.paint().isPainting()); buffer.append("\n"); assertTrue(buffer.isPainting()); assertTrue(buffer.paint().isPainted()); tmp.clear(); assertTrue(buffer.nextRow()); assertTrue(buffer.isRefresh()); assertTrue(buffer.paint().isPainting()); assertEquals("b\n", tmp.toString()); } public void testRefresh() throws Exception { TestBuffer tmp = new TestBuffer(2, 2); VirtualScreen buffer = new VirtualScreen(tmp); tmp.width = 3; assertFalse(buffer.update()); } public void testPainted() throws Exception { assertPainted("abc", "d"); assertPainted("abc", "\n"); assertPainted("\n", "ab"); assertPainted("\n", "\n"); } public void assertPainted(String s1, String s2) throws Exception { TestBuffer tmp = new TestBuffer(2, 2); VirtualScreen buffer = new VirtualScreen(tmp); buffer.append(s1); assertTrue(buffer.isRefresh()); assertTrue(buffer.paint().isPainting()); buffer.append(s2); assertTrue(buffer.isPainting()); assertTrue(buffer.paint().isPainted()); } }