aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenny Root <kenny@the-b.org>2015-07-24 18:37:05 -0700
committerKenny Root <kenny@the-b.org>2015-07-24 18:37:05 -0700
commit1a47c5ed12da8893fb2595ae1a99d4082ec36bd7 (patch)
tree69bc36a4d3d0b77f0e2cbf26ff0bb48561e15497
parenta89be6e0f0ff1edfe9fc9b15c22e445339584f33 (diff)
parentd5e1a15d7e10b50bc84d5ce738404f36cca9795f (diff)
downloadconnectbot-1a47c5ed12da8893fb2595ae1a99d4082ec36bd7.tar.gz
connectbot-1a47c5ed12da8893fb2595ae1a99d4082ec36bd7.tar.bz2
connectbot-1a47c5ed12da8893fb2595ae1a99d4082ec36bd7.zip
Merge pull request #107 from kruton/unit-test
Add simple unit test to get the ball rolling
-rw-r--r--.idea/runConfigurations/All_tests.xml29
-rw-r--r--app/app.iml5
-rw-r--r--app/build.gradle2
-rw-r--r--app/src/main/java/org/connectbot/ConsoleActivity.java11
-rw-r--r--app/src/main/java/org/connectbot/HostListActivity.java2
-rw-r--r--app/src/main/java/org/connectbot/service/TerminalManager.java11
-rw-r--r--app/src/test/java/org/connectbot/HostListActivityTest.java57
7 files changed, 104 insertions, 13 deletions
diff --git a/.idea/runConfigurations/All_tests.xml b/.idea/runConfigurations/All_tests.xml
new file mode 100644
index 0000000..8314df3
--- /dev/null
+++ b/.idea/runConfigurations/All_tests.xml
@@ -0,0 +1,29 @@
+<component name="ProjectRunConfigurationManager">
+ <configuration default="false" name="All tests" type="JUnit" factoryName="JUnit">
+ <extension name="coverage" enabled="false" merge="false" runner="idea">
+ <pattern>
+ <option name="PATTERN" value="org.connectbot.*" />
+ <option name="ENABLED" value="true" />
+ </pattern>
+ </extension>
+ <module name="app" />
+ <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+ <option name="ALTERNATIVE_JRE_PATH" value="" />
+ <option name="PACKAGE_NAME" value="" />
+ <option name="MAIN_CLASS_NAME" value="" />
+ <option name="METHOD_NAME" value="" />
+ <option name="TEST_OBJECT" value="package" />
+ <option name="VM_PARAMETERS" value="-ea" />
+ <option name="PARAMETERS" value="" />
+ <option name="WORKING_DIRECTORY" value="file://$MODULE_DIR$" />
+ <option name="ENV_VARIABLES" />
+ <option name="PASS_PARENT_ENVS" value="true" />
+ <option name="TEST_SEARCH_SCOPE">
+ <value defaultName="singleModule" />
+ </option>
+ <envs />
+ <dir value="$PROJECT_DIR$/app/src/test" />
+ <patterns />
+ <method />
+ </configuration>
+</component> \ No newline at end of file
diff --git a/app/app.iml b/app/app.iml
index eeb0796..827213f 100644
--- a/app/app.iml
+++ b/app/app.iml
@@ -91,6 +91,7 @@
<orderEntry type="library" exported="" name="jzlib-1.1.3" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="maven-ant-tasks-2.1.3" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="ant-1.8.0" level="project" />
+ <orderEntry type="library" exported="" scope="TEST" name="assertj-core-1.7.0" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="accessibility-test-framework-1.0" level="project" />
<orderEntry type="library" exported="" name="support-annotations-22.2.1" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="ant-launcher-1.8.0" level="project" />
@@ -99,13 +100,15 @@
<orderEntry type="library" exported="" scope="TEST" name="shadows-core-3.0" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="asm-util-5.0.1" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="bcprov-jdk16-1.46" level="project" />
+ <orderEntry type="library" exported="" scope="TEST" name="mockito-core-1.10.19" level="project" />
<orderEntry type="library" exported="" name="jsocks-1.0.0" level="project" />
+ <orderEntry type="library" exported="" scope="TEST" name="objenesis-2.1" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="icu4j-53.1" level="project" />
<orderEntry type="library" exported="" name="support-v4-22.2.1" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="robolectric-resources-3.0" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="robolectric-annotations-3.0" level="project" />
- <orderEntry type="library" exported="" scope="TEST" name="asm-tree-5.0.1" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="sqlite4java-0.282" level="project" />
+ <orderEntry type="library" exported="" scope="TEST" name="asm-tree-5.0.1" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="asm-analysis-5.0.1" level="project" />
<orderEntry type="library" exported="" scope="TEST" name="robolectric-utils-3.0" level="project" />
<orderEntry type="library" exported="" name="sshlib-2.2.0" level="project" />
diff --git a/app/build.gradle b/app/build.gradle
index 22edce2..9219eb5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -27,6 +27,8 @@ dependencies {
compile 'org.connectbot:sshlib:2.2.0'
testCompile 'junit:junit:4.12'
+ testCompile 'org.mockito:mockito-core:1.10.19'
+ testCompile 'org.assertj:assertj-core:1.7.0'
testCompile('org.robolectric:robolectric:3.0') {
exclude group: 'commons-logging', module: 'commons-logging'
exclude group: 'org.apache.httpcomponents', module: 'httpclient'
diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java
index 77f8a3f..e7a8f7d 100644
--- a/app/src/main/java/org/connectbot/ConsoleActivity.java
+++ b/app/src/main/java/org/connectbot/ConsoleActivity.java
@@ -145,9 +145,6 @@ public class ConsoleActivity extends Activity {
// let manager know about our event handling services
bound.disconnectHandler = disconnectHandler;
-
- Log.d(TAG, String.format("Connected to TerminalManager and found bridges.size=%d", bound.bridges.size()));
-
bound.setResizeAllowed(true);
// clear out any existing bridges and record requested index
@@ -169,7 +166,7 @@ public class ConsoleActivity extends Activity {
}
// create views for all bridges on this service
- for (TerminalBridge bridge : bound.bridges) {
+ for (TerminalBridge bridge : bound.getBridges()) {
final int currentIndex = addNewTerminalView(bridge);
@@ -182,12 +179,6 @@ public class ConsoleActivity extends Activity {
}
public void onServiceDisconnected(ComponentName className) {
- // tell each bridge to forget about our prompt handler
- synchronized (bound.bridges) {
- for (TerminalBridge bridge : bound.bridges)
- bridge.promptHelper.setHandler(null);
- }
-
flip.removeAllViews();
updateEmptyVisible();
bound = null;
diff --git a/app/src/main/java/org/connectbot/HostListActivity.java b/app/src/main/java/org/connectbot/HostListActivity.java
index 7946e9a..2fd9560 100644
--- a/app/src/main/java/org/connectbot/HostListActivity.java
+++ b/app/src/main/java/org/connectbot/HostListActivity.java
@@ -447,7 +447,7 @@ public class HostListActivity extends ListActivity {
// Don't lose hosts that are connected via shortcuts but not in the database.
if (bound != null) {
- for (TerminalBridge bridge : bound.bridges) {
+ for (TerminalBridge bridge : bound.getBridges()) {
if (!hosts.contains(bridge.host))
hosts.add(0, bridge.host);
}
diff --git a/app/src/main/java/org/connectbot/service/TerminalManager.java b/app/src/main/java/org/connectbot/service/TerminalManager.java
index 8e7187f..1688d2a 100644
--- a/app/src/main/java/org/connectbot/service/TerminalManager.java
+++ b/app/src/main/java/org/connectbot/service/TerminalManager.java
@@ -70,7 +70,7 @@ import android.util.Log;
public class TerminalManager extends Service implements BridgeDisconnectedListener, OnSharedPreferenceChangeListener {
public final static String TAG = "CB.TerminalManager";
- public List<TerminalBridge> bridges = new LinkedList<TerminalBridge>();
+ private List<TerminalBridge> bridges = new LinkedList<TerminalBridge>();
public Map<HostBean, WeakReference<TerminalBridge>> mHostBridgeMap =
new HashMap<HostBean, WeakReference<TerminalBridge>>();
public Map<String, WeakReference<TerminalBridge>> mNicknameBridgeMap =
@@ -471,6 +471,10 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
}
}
+ public List<TerminalBridge> getBridges() {
+ return bridges;
+ }
+
public class TerminalBinder extends Binder {
public TerminalManager getService() {
return TerminalManager.this;
@@ -518,6 +522,11 @@ public class TerminalManager extends Service implements BridgeDisconnectedListen
if (bridges.size() == 0) {
stopWithDelay();
+ } else {
+ // tell each bridge to forget about their previous prompt handler
+ for (TerminalBridge bridge : bridges) {
+ bridge.promptHelper.setHandler(null);
+ }
}
return true;
diff --git a/app/src/test/java/org/connectbot/HostListActivityTest.java b/app/src/test/java/org/connectbot/HostListActivityTest.java
new file mode 100644
index 0000000..ebfeed6
--- /dev/null
+++ b/app/src/test/java/org/connectbot/HostListActivityTest.java
@@ -0,0 +1,57 @@
+/*
+ * ConnectBot: simple, powerful, open-source SSH client for Android
+ * Copyright 2015 Kenny Root, Jeffrey Sharkey
+ *
+ * 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 org.connectbot;
+
+import org.connectbot.service.TerminalManager;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricGradleTestRunner;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import android.content.ComponentName;
+import android.content.Intent;
+import android.os.Build;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+import static org.robolectric.Shadows.shadowOf;
+
+@RunWith(RobolectricGradleTestRunner.class)
+@Config(constants = BuildConfig.class, sdk = Build.VERSION_CODES.KITKAT, packageName = "org.connectbot")
+public class HostListActivityTest {
+ private void mockBindToService(TerminalManager terminalManager) {
+ TerminalManager.TerminalBinder stubBinder = mock(TerminalManager.TerminalBinder.class);
+ when(stubBinder.getService()).thenReturn(terminalManager);
+ shadowOf(RuntimeEnvironment.application).setComponentNameAndServiceForBindService(new ComponentName("org.connectbot", TerminalManager.class.getName()), stubBinder);
+ }
+
+ @Test
+ public void bindsToTerminalManager() {
+ TerminalManager terminalManager = spy(TerminalManager.class);
+ mockBindToService(terminalManager);
+
+ HostListActivity activity = Robolectric.buildActivity(HostListActivity.class).create().start().get();
+
+ Intent serviceIntent = new Intent(activity, TerminalManager.class);
+ assertThat(shadowOf(activity).getNextStartedService()).isEqualTo(serviceIntent);
+ }
+} \ No newline at end of file