diff options
-rw-r--r-- | src/org/connectbot/ConsoleActivity.java | 8 | ||||
-rw-r--r-- | src/org/connectbot/bean/SelectionArea.java | 71 | ||||
-rw-r--r-- | src/org/connectbot/service/TerminalBridge.java | 20 | ||||
-rw-r--r-- | tests/src/org/connectbot/HostBeanTest.java | 2 | ||||
-rw-r--r-- | tests/src/org/connectbot/SelectionAreaTest.java | 141 |
5 files changed, 192 insertions, 50 deletions
diff --git a/src/org/connectbot/ConsoleActivity.java b/src/org/connectbot/ConsoleActivity.java index c02a75a..9ac1c3f 100644 --- a/src/org/connectbot/ConsoleActivity.java +++ b/src/org/connectbot/ConsoleActivity.java @@ -495,8 +495,8 @@ public class ConsoleActivity extends Activity { case MotionEvent.ACTION_DOWN: // recording starting area if (area.isSelectingOrigin()) { - area.setTop(row); - area.setLeft(col); + area.setRow(row); + area.setColumn(col); lastTouchRow = row; lastTouchCol = col; copySource.redraw(); @@ -513,8 +513,8 @@ public class ConsoleActivity extends Activity { area.finishSelectingOrigin(); // update selected area - area.setBottom(row); - area.setRight(col); + area.setRow(row); + area.setColumn(col); lastTouchRow = row; lastTouchCol = col; copySource.redraw(); diff --git a/src/org/connectbot/bean/SelectionArea.java b/src/org/connectbot/bean/SelectionArea.java index 0024494..6175fd0 100644 --- a/src/org/connectbot/bean/SelectionArea.java +++ b/src/org/connectbot/bean/SelectionArea.java @@ -69,66 +69,76 @@ public class SelectionArea { selectingOrigin = false; } - public void setTop(int top) { - this.top = bottom = checkBounds(top, maxRows); + public void decrementRow() { + if (selectingOrigin) + setTop(top - 1); + else + setBottom(bottom - 1); } - public void decrementTop() { - setTop(--top); + public void incrementRow() { + if (selectingOrigin) + setTop(top + 1); + else + setBottom(bottom + 1); } - public void incrementTop() { - setTop(++top); + public void setRow(int row) { + if (selectingOrigin) + setTop(row); + else + setBottom(row); + } + + private void setTop(int top) { + this.top = bottom = checkBounds(top, maxRows); } public int getTop() { return Math.min(top, bottom); } - public void setBottom(int bottom) { + private void setBottom(int bottom) { this.bottom = checkBounds(bottom, maxRows); } - public void decrementBottom() { - setBottom(--bottom); - } - - public void incrementBottom() { - setBottom(++bottom); - } - public int getBottom() { return Math.max(top, bottom); } - public void setLeft(int left) { - this.left = right = checkBounds(left, maxColumns); + public void decrementColumn() { + if (selectingOrigin) + setLeft(left - 1); + else + setRight(right - 1); } - public void decrementLeft() { - setLeft(--left); + public void incrementColumn() { + if (selectingOrigin) + setLeft(left + 1); + else + setRight(right + 1); } - public void incrementLeft() { - setLeft(++left); + public void setColumn(int column) { + if (selectingOrigin) + setLeft(column); + else + setRight(column); + } + + private void setLeft(int left) { + this.left = right = checkBounds(left, maxColumns); } public int getLeft() { return Math.min(left, right); } - public void setRight(int right) { + private void setRight(int right) { this.right = checkBounds(right, maxColumns); } - public void decrementRight() { - setRight(--right); - } - - public void incrementRight() { - setRight(++right); - } - public int getRight() { return Math.max(left, right); } @@ -166,6 +176,7 @@ public class SelectionArea { return buffer.toString(); } + @Override public String toString() { StringBuilder buffer = new StringBuilder(); diff --git a/src/org/connectbot/service/TerminalBridge.java b/src/org/connectbot/service/TerminalBridge.java index fff216e..6963a75 100644 --- a/src/org/connectbot/service/TerminalBridge.java +++ b/src/org/connectbot/service/TerminalBridge.java @@ -1022,10 +1022,7 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal case KeyEvent.KEYCODE_DPAD_LEFT: if (selectingForCopy) { - if (selectionArea.isSelectingOrigin()) - selectionArea.decrementLeft(); - else - selectionArea.decrementRight(); + selectionArea.decrementColumn(); redraw(); } else { ((vt320) buffer).keyPressed(vt320.KEY_LEFT, ' ', @@ -1037,10 +1034,7 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal case KeyEvent.KEYCODE_DPAD_UP: if (selectingForCopy) { - if (selectionArea.isSelectingOrigin()) - selectionArea.decrementTop(); - else - selectionArea.decrementBottom(); + selectionArea.decrementRow(); redraw(); } else { ((vt320) buffer).keyPressed(vt320.KEY_UP, ' ', @@ -1052,10 +1046,7 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal case KeyEvent.KEYCODE_DPAD_DOWN: if (selectingForCopy) { - if (selectionArea.isSelectingOrigin()) - selectionArea.incrementTop(); - else - selectionArea.incrementBottom(); + selectionArea.incrementRow(); redraw(); } else { ((vt320) buffer).keyPressed(vt320.KEY_DOWN, ' ', @@ -1067,10 +1058,7 @@ public class TerminalBridge implements VDUDisplay, OnKeyListener, InteractiveCal case KeyEvent.KEYCODE_DPAD_RIGHT: if (selectingForCopy) { - if (selectionArea.isSelectingOrigin()) - selectionArea.incrementLeft(); - else - selectionArea.incrementRight(); + selectionArea.incrementColumn(); redraw(); } else { ((vt320) buffer).keyPressed(vt320.KEY_RIGHT, ' ', diff --git a/tests/src/org/connectbot/HostBeanTest.java b/tests/src/org/connectbot/HostBeanTest.java index 274acca..d24427e 100644 --- a/tests/src/org/connectbot/HostBeanTest.java +++ b/tests/src/org/connectbot/HostBeanTest.java @@ -34,6 +34,8 @@ public class HostBeanTest extends AndroidTestCase { @Override protected void setUp() throws Exception { + super.setUp(); + host1 = new HostBean(); host1.setNickname("Home"); host1.setUsername("bob"); diff --git a/tests/src/org/connectbot/SelectionAreaTest.java b/tests/src/org/connectbot/SelectionAreaTest.java new file mode 100644 index 0000000..30e8c44 --- /dev/null +++ b/tests/src/org/connectbot/SelectionAreaTest.java @@ -0,0 +1,141 @@ +/* + ConnectBot: simple, powerful, open-source SSH client for Android + Copyright (C) 2007-2008 Kenny Root, Jeffrey Sharkey + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ +package org.connectbot; + +import org.connectbot.bean.SelectionArea; + +import android.test.AndroidTestCase; + +/** + * @author Kenny Root + * + */ +public class SelectionAreaTest extends AndroidTestCase { + private static final int WIDTH = 80; + private static final int HEIGHT = 24; + + public void testCreate() { + SelectionArea sa = new SelectionArea(); + + assertTrue(sa.getLeft() == 0); + assertTrue(sa.getRight() == 0); + assertTrue(sa.getTop() == 0); + assertTrue(sa.getBottom() == 0); + assertTrue(sa.isSelectingOrigin()); + } + + public void testCheckMovement() { + SelectionArea sa = new SelectionArea(); + + sa.setBounds(WIDTH, HEIGHT); + + sa.incrementColumn(); + + // Should be (1,0) to (1,0) + assertTrue(sa.getLeft() == 1); + assertTrue(sa.getTop() == 0); + assertTrue(sa.getRight() == 1); + assertTrue(sa.getBottom() == 0); + + sa.finishSelectingOrigin(); + assertFalse(sa.isSelectingOrigin()); + + sa.incrementColumn(); + sa.incrementColumn(); + + // Should be (1,0) to (3,0) + assertTrue(sa.getLeft() == 1); + assertTrue(sa.getTop() == 0); + assertTrue(sa.getRight() == 3); + assertTrue(sa.getBottom() == 0); + } + + public void testBounds() { + SelectionArea sa = new SelectionArea(); + + sa.setBounds(WIDTH, HEIGHT); + + for (int i = 0; i <= WIDTH; i++) + sa.decrementColumn(); + assertTrue("Left bound should be 0, but instead is " + sa.getLeft(), + sa.getLeft() == 0); + + for (int i = 0; i <= HEIGHT; i++) + sa.decrementRow(); + assertTrue("Top bound should be 0, but instead is " + sa.getLeft(), + sa.getTop() == 0); + + sa.finishSelectingOrigin(); + + for (int i = 0; i <= WIDTH * 2; i++) + sa.incrementColumn(); + + assertTrue("Left bound should be 0, but instead is " + sa.getLeft(), + sa.getLeft() == 0); + assertTrue("Right bound should be " + (WIDTH - 1) + ", but instead is " + sa.getRight(), + sa.getRight() == (WIDTH - 1)); + + for (int i = 0; i <= HEIGHT * 2; i++) + sa.incrementRow(); + + assertTrue("Bottom bound should be " + (HEIGHT - 1) + ", but instead is " + sa.getBottom(), + sa.getBottom() == (HEIGHT - 1)); + assertTrue("Top bound should be 0, but instead is " + sa.getTop(), + sa.getTop() == 0); + } + + public void testSetThenMove() { + SelectionArea sa = new SelectionArea(); + + sa.setBounds(WIDTH, HEIGHT); + + int targetColumn = WIDTH / 2; + int targetRow = HEIGHT / 2; + + sa.setColumn(targetColumn); + sa.setRow(targetRow); + + sa.incrementRow(); + assertTrue("Row should be " + (targetRow + 1) + ", but instead is " + sa.getTop(), + sa.getTop() == (targetRow + 1)); + + sa.decrementColumn(); + assertTrue("Column shold be " + (targetColumn - 1) + ", but instead is " + sa.getLeft(), + sa.getLeft() == (targetColumn - 1)); + + sa.finishSelectingOrigin(); + + sa.setRow(0); + sa.setColumn(0); + + sa.incrementRow(); + sa.decrementColumn(); + + assertTrue("Top row should be 1, but instead is " + sa.getTop(), + sa.getTop() == 1); + + assertTrue("Left column shold be 0, but instead is " + sa.getLeft(), + sa.getLeft() == 0); + + assertTrue("Bottom row should be " + (targetRow + 1) + ", but instead is " + sa.getBottom(), + sa.getBottom() == (targetRow + 1)); + + assertTrue("Right column shold be " + (targetColumn - 1) + ", but instead is " + sa.getRight(), + sa.getRight() == (targetColumn - 1)); + } +} |