]> gitweb.fperrin.net Git - Dictionary.git/blobdiff - src/com/hughes/android/dictionary/DictionaryActivityTest.java
go
[Dictionary.git] / src / com / hughes / android / dictionary / DictionaryActivityTest.java
index 5afcb229d033c07313c1cee9eb6dfe66c1d22a04..dc0325b09f94ba140e55dcfa2bbab3313d469db3 100755 (executable)
@@ -1,5 +1,7 @@
 package com.hughes.android.dictionary;\r
 \r
+import com.hughes.android.dictionary.engine.Language;\r
+\r
 import android.test.ActivityInstrumentationTestCase2;\r
 \r
 public class DictionaryActivityTest extends ActivityInstrumentationTestCase2<DictionaryActivity> {\r
@@ -12,32 +14,125 @@ public class DictionaryActivityTest extends ActivityInstrumentationTestCase2<Dic
     final DictionaryActivity dict = getActivity();\r
     dict.finish();\r
   }\r
+  \r
+  abstract class NotifyRunnable implements Runnable {\r
+    boolean finished = false;\r
+    public final void run() {\r
+      assertEquals(false, finished);\r
+      run2();\r
+      synchronized (this) {\r
+        finished = true;\r
+        this.notifyAll();\r
+      }\r
+    }\r
+    public void waitForFinish() throws InterruptedException {\r
+      synchronized (this) {\r
+        while (!finished) {\r
+          this.wait();\r
+        }\r
+        finished = false;\r
+      }\r
+      getActivity().waitForSearchEnd();\r
+    }\r
+    protected abstract void run2();\r
+  }\r
+\r
+  private void postAndWait(final NotifyRunnable notifyRunnable) throws Exception {\r
+    getActivity().uiHandler.post(notifyRunnable);\r
+    notifyRunnable.waitForFinish();\r
+  }\r
+\r
+  public void resetDictionary() throws Exception {\r
+    final DictionaryActivity dict = getActivity();\r
+    \r
+    if (dict.languageList.languageData.language == Language.en) {\r
+      postAndWait(switchLangRunnable());\r
+    }\r
+    assertEquals(Language.de, dict.languageList.languageData.language);\r
+\r
+    postAndWait(new NotifyRunnable() {\r
+      protected void run2() {\r
+        dict.searchText.setText("");\r
+        dict.onSearchTextChange("");\r
+      }\r
+    });\r
+  }\r
 \r
   public void testSwitchLanguage() throws Exception {\r
+    final DictionaryActivity dict = getActivity();\r
+    resetDictionary();\r
+\r
+    final NotifyRunnable switchLang = switchLangRunnable();\r
 \r
+    postAndWait(switchLang);\r
+    assertEquals(Language.en, dict.languageList.languageData.language);\r
+    assertEquals("EN", dict.langButton.getText().toString());\r
+\r
+    postAndWait(switchLang);\r
+    assertEquals(Language.de, dict.languageList.languageData.language);\r
+    assertEquals("DE", dict.langButton.getText().toString());\r
+    \r
+    dict.finish();\r
+  }\r
+\r
+  public void testUpDownArrows() throws Exception {\r
     final DictionaryActivity dict = getActivity();\r
+    resetDictionary();\r
+    assertEquals(0, dict.getSelectedItemPosition());\r
+    \r
+    final NotifyRunnable upButton = new NotifyRunnable() {\r
+      protected void run2() {\r
+        dict.onUpButton();\r
+      }\r
+    };\r
+    final NotifyRunnable downButton = new NotifyRunnable() {\r
+      protected void run2() {\r
+        dict.onDownButton();\r
+      }\r
+    };\r
+    \r
+    dict.getListView().requestFocus();\r
+    assertTrue(dict.getListView().isFocused());\r
+    \r
+    String word1 = "-1";\r
+    String word2 = "-14";\r
+    String word3 = "-15";\r
 \r
-    final Runnable switchLang = new Runnable() {\r
-      public void run() {\r
-        getActivity().onLanguageButton();\r
-      }};\r
+    postAndWait(upButton);\r
+    assertEquals(0, dict.getSelectedItemPosition());\r
+    assertEquals(word1, dict.searchText.getText().toString());\r
 \r
-    if (dict.languageList.languageData.language == Language.EN) {\r
-      dict.uiHandler.post(switchLang);\r
-      Thread.sleep(100);\r
-    }\r
+    postAndWait(downButton);\r
+    assertEquals(2, dict.getSelectedItemPosition());\r
+    assertEquals(word2, dict.searchText.getText().toString());\r
     \r
-    assertEquals(Language.DE, dict.languageList.languageData.language);\r
-      \r
-    dict.uiHandler.post(switchLang);\r
-    Thread.sleep(100);\r
-    assertEquals(Language.EN, dict.languageList.languageData.language);\r
+    postAndWait(downButton);\r
+    assertEquals(4, dict.getSelectedItemPosition());\r
+    assertEquals(word3, dict.searchText.getText().toString());\r
 \r
-    dict.uiHandler.post(switchLang);\r
-    Thread.sleep(200);\r
-    assertEquals(Language.DE, dict.languageList.languageData.language);\r
+    postAndWait(upButton);\r
+    assertEquals(2, dict.getSelectedItemPosition());\r
+    assertEquals(word2, dict.searchText.getText().toString());\r
+    \r
+    postAndWait(upButton);\r
+    assertEquals(0, dict.getSelectedItemPosition());\r
+    assertEquals(word1, dict.searchText.getText().toString());\r
     \r
+    postAndWait(upButton);\r
+    assertEquals(0, dict.getSelectedItemPosition());\r
+\r
+    postAndWait(downButton);\r
+    assertEquals(2, dict.getSelectedItemPosition());\r
+\r
     dict.finish();\r
   }\r
 \r
+  private NotifyRunnable switchLangRunnable() {\r
+    final NotifyRunnable switchLang = new NotifyRunnable() {\r
+      public void run2() {\r
+        getActivity().onLanguageButton();\r
+      }};\r
+    return switchLang;\r
+  }\r
+\r
 }\r