From 78c371293c67da51323689ceb372856ef480a19e Mon Sep 17 00:00:00 2001 From: Morgan Gangwere Date: Fri, 4 Apr 2014 02:43:42 -0600 Subject: [PATCH] Cookin' with... Ant? Added ant build files and instructions. It works. Call `ant release` after you've gotten keystores worked out. --- .gitignore | 17 +- CHANGELOG | 15 ++ README | 14 ++ application/build.xml | 92 +++++++++ application/local.properties | 10 + application/pom_old.xml | 92 --------- application/proguard-project.txt | 20 ++ application/project.properties | 2 +- libs/ActionBarSherlock/build.xml | 92 +++++++++ libs/ActionBarSherlock/local.properties | 10 + libs/ActionBarSherlock/pom.xml | 148 --------------- libs/ActionBarSherlock/proguard-project.txt | 20 ++ libs/ViewPagerIndicator/build.xml | 92 +++++++++ libs/ViewPagerIndicator/local.properties | 10 + libs/ViewPagerIndicator/pom.xml | 59 ------ libs/ViewPagerIndicator/proguard-project.txt | 20 ++ libs/ViewPagerIndicator/project.properties | 2 +- test/.classpath | 10 - test/.project | 34 ---- test/AndroidManifest.xml | 21 --- test/build.xml | 92 +++++++++ test/libs/robotium-solo-3.5.1.jar | Bin 58332 -> 0 bytes test/local.properties | 10 + test/pom.xml | 119 ------------ test/proguard-project.txt | 20 ++ test/project.properties | 11 -- test/res/drawable/icon.png | Bin 2574 -> 0 bytes test/res/layout/main.xml | 12 -- test/res/values/strings.xml | 5 - test/src/org/yaaic/test/AllTests.java | 43 ----- test/src/org/yaaic/test/model/AllTests.java | 48 ----- .../org/yaaic/test/model/BroadcastTest.java | 65 ------- .../src/org/yaaic/test/model/ChannelTest.java | 68 ------- .../org/yaaic/test/model/IdentityTest.java | 68 ------- .../src/org/yaaic/test/model/MessageTest.java | 73 -------- test/src/org/yaaic/test/model/QueryTest.java | 52 ----- .../org/yaaic/test/model/ScrollbackTest.java | 84 --------- .../org/yaaic/test/model/ServerInfoTest.java | 52 ----- test/src/org/yaaic/test/model/ServerTest.java | 177 ------------------ .../src/org/yaaic/test/receiver/AllTests.java | 41 ---- .../receiver/ConversationReceiverTest.java | 113 ----------- .../src/org/yaaic/test/scenario/AllTests.java | 41 ---- .../yaaic/test/scenario/ChannelScenarios.java | 97 ---------- .../test/scenario/ConnectionScenarios.java | 101 ---------- .../yaaic/test/scenario/ScenarioHelper.java | 174 ----------------- .../test/scenario/ServerListScenarios.java | 131 ------------- tools/check_languages.rb | 108 ----------- 47 files changed, 528 insertions(+), 2057 deletions(-) create mode 100644 application/build.xml create mode 100644 application/local.properties delete mode 100644 application/pom_old.xml create mode 100644 application/proguard-project.txt create mode 100644 libs/ActionBarSherlock/build.xml create mode 100644 libs/ActionBarSherlock/local.properties delete mode 100644 libs/ActionBarSherlock/pom.xml create mode 100644 libs/ActionBarSherlock/proguard-project.txt create mode 100644 libs/ViewPagerIndicator/build.xml create mode 100644 libs/ViewPagerIndicator/local.properties delete mode 100644 libs/ViewPagerIndicator/pom.xml create mode 100644 libs/ViewPagerIndicator/proguard-project.txt delete mode 100644 test/.classpath delete mode 100644 test/.project delete mode 100644 test/AndroidManifest.xml create mode 100644 test/build.xml delete mode 100644 test/libs/robotium-solo-3.5.1.jar create mode 100644 test/local.properties delete mode 100644 test/pom.xml create mode 100644 test/proguard-project.txt delete mode 100644 test/project.properties delete mode 100644 test/res/drawable/icon.png delete mode 100644 test/res/layout/main.xml delete mode 100644 test/res/values/strings.xml delete mode 100644 test/src/org/yaaic/test/AllTests.java delete mode 100644 test/src/org/yaaic/test/model/AllTests.java delete mode 100644 test/src/org/yaaic/test/model/BroadcastTest.java delete mode 100644 test/src/org/yaaic/test/model/ChannelTest.java delete mode 100644 test/src/org/yaaic/test/model/IdentityTest.java delete mode 100644 test/src/org/yaaic/test/model/MessageTest.java delete mode 100644 test/src/org/yaaic/test/model/QueryTest.java delete mode 100644 test/src/org/yaaic/test/model/ScrollbackTest.java delete mode 100644 test/src/org/yaaic/test/model/ServerInfoTest.java delete mode 100644 test/src/org/yaaic/test/model/ServerTest.java delete mode 100644 test/src/org/yaaic/test/receiver/AllTests.java delete mode 100644 test/src/org/yaaic/test/receiver/ConversationReceiverTest.java delete mode 100644 test/src/org/yaaic/test/scenario/AllTests.java delete mode 100644 test/src/org/yaaic/test/scenario/ChannelScenarios.java delete mode 100644 test/src/org/yaaic/test/scenario/ConnectionScenarios.java delete mode 100644 test/src/org/yaaic/test/scenario/ScenarioHelper.java delete mode 100644 test/src/org/yaaic/test/scenario/ServerListScenarios.java delete mode 100755 tools/check_languages.rb diff --git a/.gitignore b/.gitignore index 736cd18..9a71849 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,17 @@ # Git Ignore for Yaaic # Compiled and generated files -bin/ -gen/ -R.java +**/bin/ +**/gen/ +**/R.java + +# Ignore the key file. + +application/keystore # Build files -local.properties +# local.properties ant.properties -build.xml +# build.xml proguard.cfg -# Maven -target/ - diff --git a/CHANGELOG b/CHANGELOG index 647e0cf..8778101 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,18 @@ +------------------------------------------------------------------------------- +Atomic 1.1 - 2014-04-4 - AKA "Hydrogen" +------------------------------------------------------------------------------- + +Atomic is a fork of yaaic. We've changed some things: + +* Color schemes! +* compactness! +* Auto-complete-y + +I cleaned up the translations, mostly because I need to go and change things +and make sure the translations are correct. + +Awesome. + -------------------------------------------------------------------------------- Yaaic 1.0 - 2012-07-29 - 89 commits, 685 files changed, 7 authors -------------------------------------------------------------------------------- diff --git a/README b/README index 2adecfa..48b9706 100644 --- a/README +++ b/README @@ -35,6 +35,20 @@ Current/future features/changes: * Selecting a message copies it to the clipboard * Option to not scroll when a new message appears in a channel +------------------------------------------------------------------- + +Building Atomic: + +You will need to generate a keystore for Atomic: + + keytool -genkey -keystore application/keystore -alias + +and go and add the following to application/ant.properties + + key.store=keystore + key.alias= + key.store.password= + key.alias.password= -------------------------------------------------------------------- diff --git a/application/build.xml b/application/build.xml new file mode 100644 index 0000000..9655e59 --- /dev/null +++ b/application/build.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/application/local.properties b/application/local.properties new file mode 100644 index 0000000..2be10c0 --- /dev/null +++ b/application/local.properties @@ -0,0 +1,10 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must *NOT* be checked into Version Control Systems, +# as it contains information specific to your local configuration. + +# location of the SDK. This is only used by Ant +# For customization when using a Version Control System, please read the +# header note. +sdk.dir=/home/indrora/opt/adt-x86_64/sdk diff --git a/application/pom_old.xml b/application/pom_old.xml deleted file mode 100644 index 0d22ac2..0000000 --- a/application/pom_old.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - 4.0.0 - - indrora.atomic - yaaic - 1.1-SNAPSHOT - apk - - yaaic - - Yaaic is as the full name (Yet another Android IRC - client) already says an Internet Relay Chat (IRC) client for - Android devices. - - http://www.yaaic.org - 2009 - - - https://github.com/pocmo/Yaaic - scm:git:git://github.com/pocmo/Yaaic.git - - scm:git:git@github.com:pocmo/Yaaic.git - - - - - - Sebastian Kaspari - sebastian@yaaic.org - pocmo - http://www.androidzeitgeist.com - - developer - - - - - - GitHub Issues - https://github.com/pocmo/Yaaic/issues - - - - - com.google.android - android - 4.1.1.4 - provided - - - - com.actionbarsherlock - library - 4.2.0 - apklib - - - - com.viewpagerindicator - library - 2.3.1 - apklib - - - - - - UTF-8 - - - - ${project.artifactId} - src - - - - com.jayway.maven.plugins.android.generation2 - 3.5.0 - android-maven-plugin - true - - - 17 - - - - - - - diff --git a/application/proguard-project.txt b/application/proguard-project.txt new file mode 100644 index 0000000..f2fe155 --- /dev/null +++ b/application/proguard-project.txt @@ -0,0 +1,20 @@ +# To enable ProGuard in your project, edit project.properties +# to define the proguard.config property as described in that file. +# +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in ${sdk.dir}/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the ProGuard +# include property in project.properties. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/application/project.properties b/application/project.properties index 1dda423..0d2c956 100644 --- a/application/project.properties +++ b/application/project.properties @@ -8,6 +8,6 @@ # project structure. # Project target. -target=android-15 +target=android-14 android.library.reference.1=../libs/ViewPagerIndicator android.library.reference.2=../libs/ActionBarSherlock diff --git a/libs/ActionBarSherlock/build.xml b/libs/ActionBarSherlock/build.xml new file mode 100644 index 0000000..56bc652 --- /dev/null +++ b/libs/ActionBarSherlock/build.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/ActionBarSherlock/local.properties b/libs/ActionBarSherlock/local.properties new file mode 100644 index 0000000..2be10c0 --- /dev/null +++ b/libs/ActionBarSherlock/local.properties @@ -0,0 +1,10 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must *NOT* be checked into Version Control Systems, +# as it contains information specific to your local configuration. + +# location of the SDK. This is only used by Ant +# For customization when using a Version Control System, please read the +# header note. +sdk.dir=/home/indrora/opt/adt-x86_64/sdk diff --git a/libs/ActionBarSherlock/pom.xml b/libs/ActionBarSherlock/pom.xml deleted file mode 100644 index 3b6ce40..0000000 --- a/libs/ActionBarSherlock/pom.xml +++ /dev/null @@ -1,148 +0,0 @@ - - - - 4.0.0 - - actionbarsherlock - ActionBarSherlock - apklib - - - com.actionbarsherlock - parent - 4.2.0 - ../pom.xml - - - - - com.google.android - android - provided - - - com.google.android - support-v4 - - - - junit - junit - test - - - - - src - test - - - - com.jayway.maven.plugins.android.generation2 - android-maven-plugin - true - - ignored - - - - - org.apache.maven.plugins - maven-javadoc-plugin - - true - - - - - com.google.code.maven-replacer-plugin - maven-replacer-plugin - 1.4.0 - - - process-sources - - replace - - - - - false - target/generated-sources/r/com/actionbarsherlock/R.java - target/generated-sources/r/com/actionbarsherlock/R.java - false - static final int - static int - - - - - org.apache.maven.plugins - maven-checkstyle-plugin - - ../checkstyle.xml - - - - verify - - checkstyle - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - 1.7 - - - package - - attach-artifact - - - - - jar - ${project.build.directory}/${project.build.finalName}.jar - - - - - - - - - - - - - org.eclipse.m2e - lifecycle-mapping - 1.0.0 - - - - - - com.google.code.maven-replacer-plugin - maven-replacer-plugin - [1.4.0,) - - replace - - - - - - - - - - - - - - diff --git a/libs/ActionBarSherlock/proguard-project.txt b/libs/ActionBarSherlock/proguard-project.txt new file mode 100644 index 0000000..f2fe155 --- /dev/null +++ b/libs/ActionBarSherlock/proguard-project.txt @@ -0,0 +1,20 @@ +# To enable ProGuard in your project, edit project.properties +# to define the proguard.config property as described in that file. +# +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in ${sdk.dir}/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the ProGuard +# include property in project.properties. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/libs/ViewPagerIndicator/build.xml b/libs/ViewPagerIndicator/build.xml new file mode 100644 index 0000000..c185ece --- /dev/null +++ b/libs/ViewPagerIndicator/build.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/ViewPagerIndicator/local.properties b/libs/ViewPagerIndicator/local.properties new file mode 100644 index 0000000..2be10c0 --- /dev/null +++ b/libs/ViewPagerIndicator/local.properties @@ -0,0 +1,10 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must *NOT* be checked into Version Control Systems, +# as it contains information specific to your local configuration. + +# location of the SDK. This is only used by Ant +# For customization when using a Version Control System, please read the +# header note. +sdk.dir=/home/indrora/opt/adt-x86_64/sdk diff --git a/libs/ViewPagerIndicator/pom.xml b/libs/ViewPagerIndicator/pom.xml deleted file mode 100644 index a6e0cc1..0000000 --- a/libs/ViewPagerIndicator/pom.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - 4.0.0 - - com.viewpagerindicator - library - Android-ViewPagerIndicator - apklib - - - com.viewpagerindicator - parent - 2.3.1 - ../pom.xml - - - - - com.google.android - android - provided - - - - com.google.android - support-v4 - provided - - - - - src - - - - com.jayway.maven.plugins.android.generation2 - android-maven-plugin - true - - - - org.apache.maven.plugins - maven-checkstyle-plugin - - ../checkstyle.xml - - - - verify - - checkstyle - - - - - - - diff --git a/libs/ViewPagerIndicator/proguard-project.txt b/libs/ViewPagerIndicator/proguard-project.txt new file mode 100644 index 0000000..f2fe155 --- /dev/null +++ b/libs/ViewPagerIndicator/proguard-project.txt @@ -0,0 +1,20 @@ +# To enable ProGuard in your project, edit project.properties +# to define the proguard.config property as described in that file. +# +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in ${sdk.dir}/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the ProGuard +# include property in project.properties. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/libs/ViewPagerIndicator/project.properties b/libs/ViewPagerIndicator/project.properties index 96db742..5ca7d62 100644 --- a/libs/ViewPagerIndicator/project.properties +++ b/libs/ViewPagerIndicator/project.properties @@ -9,4 +9,4 @@ android.library=true # Project target. -target=android-4 +target=android-14 diff --git a/test/.classpath b/test/.classpath deleted file mode 100644 index 3308b2e..0000000 --- a/test/.classpath +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/test/.project b/test/.project deleted file mode 100644 index 9b7d0f6..0000000 --- a/test/.project +++ /dev/null @@ -1,34 +0,0 @@ - - - Yaaic-Test - - - Yaaic - - - - com.android.ide.eclipse.adt.ResourceManagerBuilder - - - - - com.android.ide.eclipse.adt.PreCompilerBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.android.ide.eclipse.adt.ApkBuilder - - - - - - com.android.ide.eclipse.adt.AndroidNature - org.eclipse.jdt.core.javanature - - diff --git a/test/AndroidManifest.xml b/test/AndroidManifest.xml deleted file mode 100644 index 64211ad..0000000 --- a/test/AndroidManifest.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/test/build.xml b/test/build.xml new file mode 100644 index 0000000..faf2688 --- /dev/null +++ b/test/build.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/libs/robotium-solo-3.5.1.jar b/test/libs/robotium-solo-3.5.1.jar deleted file mode 100644 index 972b259badc0c7f487375566589c7fb1f22e0104..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58332 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 jE_JM_wSKMCk~HdaR`( - - 4.0.0 - - org.yaaic - yaaic-test - 1.1-SNAPSHOT - apk - - yaaic test - - Test automation project for Yaaic. - - http://www.yaaic.org - 2009 - - - https://github.com/pocmo/Yaaic - scm:git:git://github.com/pocmo/Yaaic.git - - scm:git:git@github.com:pocmo/Yaaic.git - - - - - Sebastian Kaspari - sebastian@yaaic.org - pocmo - http://www.androidzeitgeist.com - - developer - - - - - - GitHub Issues - https://github.com/pocmo/Yaaic/issues - - - - - com.google.android - android - 4.1.1.4 - provided - - - - com.google.android - android-test - 4.1.1.4 - provided - - - - org.yaaic - yaaic - apk - 1.1-SNAPSHOT - - - - org.yaaic - yaaic - jar - provided - 1.1-SNAPSHOT - - - - com.actionbarsherlock - library - 4.1.0 - apklib - provided - - - - com.viewpagerindicator - library - 2.3.1 - apklib - provided - - - - com.jayway.android.robotium - robotium-solo - 3.5.1 - - - - - - UTF-8 - - - - ${project.artifactId} - src - - - - com.jayway.maven.plugins.android.generation2 - 3.3.0 - android-maven-plugin - true - - - 14 - - - - - - - diff --git a/test/proguard-project.txt b/test/proguard-project.txt new file mode 100644 index 0000000..f2fe155 --- /dev/null +++ b/test/proguard-project.txt @@ -0,0 +1,20 @@ +# To enable ProGuard in your project, edit project.properties +# to define the proguard.config property as described in that file. +# +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in ${sdk.dir}/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the ProGuard +# include property in project.properties. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/test/project.properties b/test/project.properties deleted file mode 100644 index 8da376a..0000000 --- a/test/project.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "ant.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=android-15 diff --git a/test/res/drawable/icon.png b/test/res/drawable/icon.png deleted file mode 100644 index a07c69fa5a0f4da5d5efe96eea12a543154dbab6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2574 zcmV+p3i0)cP)Q`Og{P|8RRXpj5bgrSmEzSMfBn+{{vpNxw?;5UX;iv9sYxy_`IQHs$i<61a_iv^L>h8s-`D(`e@|IgS*Fj zNGM876Gf;3D8*1UX9a%v>yJKD*QkCwW2AirU(L{qNA)JghmGItc;(H<$!ABY&gBy1vJIEUj-b8%el*o|VkG)LqNx#TG>Jvj^jIte!!+RY z)T4j$7+PoF1AkRBf}R#^T=-q|PaK1$c<4UH)Hpq3$4WA|xtr!ZQLC=*vNE>O6E9kp+5X0eKB$6>C(lPwI@3#oY zhS_%x7e|j!$yG?ECXmh~EH~^OeuK}+sWoJse3Z3?ha3n`MM9KvA?uqpEnBg4Q46)7 zM$p%a$@l;+O}vfvx%XjH`}a{(-HHth9!JaUwV0*VqGR48^gWNYN<&~7x)y$e!X>e` zZ5!6KZoxbKuV9XUDI%#M1~IVh?pNSdeb~6@$y`v|yk=XK+fHxnDqnUK4&=QRNyIVf zYbDM*cI>~qIy*a7=z7uqkw@agd(<=y-Q7L!ty_23SGdXmahO<;N=wB+j;lNm%=OHC zy zU|>La6h%92y4IPufI$9>Xu!@y`TaNgtg&41@PwMwBdmSm7)xAWDLoqjZ==P2#*k7! z3o1)cVSI3KP_!?d8G^Lg0FtLXC~JYdxi|c%h~lXEixY=%VSFF@!*3&&9>(Rb|iK54Cx5;s~PY5iaV1het%w`dgQFBAJ;aFK zImQC}(|QaCFYUm1JVfzSc)ebv=)ObI)0jwJb``}Zj9J0n0Xgn*Zc(rFM9$xh_makZbm-at_v5^SW zM1y1SW@%+FuIy*WR)i3A2N_q;(YO`O!A|Ts^%z}9ZepCj3ytlw#x%N_fNrKKtPh`< z|1{UqF`4LxHaCQ79+E=uUXCOZ35jAMRz%R%0(P!0FMv=sk>Nr8%+OzY^c-M9@+fz=G`qa@v4sF5u-2289-#$**LWnyNNDwDf1( zkUiMnw|y$tn>pQP=Vn!#|17L^5AGrjtBkN$D@v)Z7LXc5EFhLB4<;7Wehh)CMqX|W zqsiZaO^benJ_hwa&V0ub$-_HUk**?g6fm9|!@kguU6*zhK)$qn-<3*kFrYPIaqR=V zUaUvk>@F_89b@tHs8R!*QKY;INJ<2_U+K6Ca3e9Gsl2{qY0%a7J?uICWgHuLfj+MB z=GkAN1&ifT#2u}B+2S#~$5jA(Qn^;H%CCmIae4AE-Dsng|Hl*Ov!z72k3ZnJs{pp| z+pW`DDueC#mEWOf=ucJ!dTL}hzOeiS-i?m2E;`EKz4<&Lu~NnW?peqVU^@<+T3KKu z{yrI%Qy-Z%HEvLUz}n^~m?7x`xuCtNR#L2En!T>dQtIKdS#V-Hzt3RtwTeYtmQ&dR z6qXZvac*oc@BUYEH%@Ylv_1&tSjkbzzU6*h1(3^C`;1z;g_SmOtclS?KWk2VYE zM*oS<=C483XckW?GN|1jfh3Ro(h - - - diff --git a/test/res/values/strings.xml b/test/res/values/strings.xml deleted file mode 100644 index f4ff21a..0000000 --- a/test/res/values/strings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - Hello World! - YaaicTest - diff --git a/test/src/org/yaaic/test/AllTests.java b/test/src/org/yaaic/test/AllTests.java deleted file mode 100644 index 70a7cb3..0000000 --- a/test/src/org/yaaic/test/AllTests.java +++ /dev/null @@ -1,43 +0,0 @@ -/* -Yaaic - Yet Another Android IRC Client - -Copyright 2009-2010 Sebastian Kaspari - -This file is part of Yaaic. - -Yaaic 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. - -Yaaic 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 Yaaic. If not, see . -*/ -package org.yaaic.test; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * All tests for Yaaic (org.yaaic.test.*) - * - * @author Sebastian Kaspari - */ -public class AllTests { - - public static Test suite() { - TestSuite suite = new TestSuite("Test for org.yaaic.test"); - //$JUnit-BEGIN$ - suite.addTest(org.yaaic.test.model.AllTests.suite()); - suite.addTest(org.yaaic.test.receiver.AllTests.suite()); - suite.addTest(org.yaaic.test.scenario.AllTests.suite()); - //$JUnit-END$ - return suite; - } - -} diff --git a/test/src/org/yaaic/test/model/AllTests.java b/test/src/org/yaaic/test/model/AllTests.java deleted file mode 100644 index b60e84f..0000000 --- a/test/src/org/yaaic/test/model/AllTests.java +++ /dev/null @@ -1,48 +0,0 @@ -/* -Yaaic - Yet Another Android IRC Client - -Copyright 2009-2010 Sebastian Kaspari - -This file is part of Yaaic. - -Yaaic 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. - -Yaaic 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 Yaaic. If not, see . -*/ -package org.yaaic.test.model; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * All tests in org.yaaic.test.model - * - * @author Sebastian Kaspari - */ -public class AllTests -{ - public static Test suite() { - TestSuite suite = new TestSuite("Test for org.yaaic.test.model"); - //$JUnit-BEGIN$ - suite.addTestSuite(BroadcastTest.class); - suite.addTestSuite(ChannelTest.class); - suite.addTestSuite(IdentityTest.class); - suite.addTestSuite(MessageTest.class); - suite.addTestSuite(QueryTest.class); - suite.addTestSuite(ServerInfoTest.class); - suite.addTestSuite(ServerTest.class); - suite.addTestSuite(ScrollbackTest.class); - //$JUnit-END$ - return suite; - } - -} diff --git a/test/src/org/yaaic/test/model/BroadcastTest.java b/test/src/org/yaaic/test/model/BroadcastTest.java deleted file mode 100644 index 688b310..0000000 --- a/test/src/org/yaaic/test/model/BroadcastTest.java +++ /dev/null @@ -1,65 +0,0 @@ -/* -Yaaic - Yet Another Android IRC Client - -Copyright 2009-2010 Sebastian Kaspari - -This file is part of Yaaic. - -Yaaic 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. - -Yaaic 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 Yaaic. If not, see . -*/ -package org.yaaic.test.model; - -import org.yaaic.model.Broadcast; -import org.yaaic.model.Extra; - -import android.content.Intent; -import junit.framework.TestCase; - -/** - * Test case for org.yaaic.model.Broadcast - * - * @author Sebastian Kaspari - */ -public class BroadcastTest extends TestCase -{ - public void testConversationIntentHelper() - { - String broadcastType = Broadcast.CONVERSATION_MESSAGE; - int serverId = 99; - String conversationName = "#foobar"; - - Intent intent = Broadcast.createConversationIntent(broadcastType, serverId, conversationName); - - assertEquals(broadcastType, intent.getAction()); - - assertTrue(intent.hasExtra(Extra.SERVER)); - assertEquals(serverId, intent.getExtras().getInt(Extra.SERVER)); - - assertTrue(intent.hasExtra(Extra.CONVERSATION)); - assertEquals(conversationName, intent.getExtras().getString(Extra.CONVERSATION)); - } - - public void testServerIntentHelper() - { - String broadcastType = Broadcast.SERVER_UPDATE; - int serverId = 42; - - Intent intent = Broadcast.createServerIntent(broadcastType, serverId); - - assertEquals(broadcastType, intent.getAction()); - - assertTrue(intent.hasExtra(Extra.SERVER)); - assertEquals(serverId, intent.getExtras().getInt(Extra.SERVER)); - } -} diff --git a/test/src/org/yaaic/test/model/ChannelTest.java b/test/src/org/yaaic/test/model/ChannelTest.java deleted file mode 100644 index 66c0be5..0000000 --- a/test/src/org/yaaic/test/model/ChannelTest.java +++ /dev/null @@ -1,68 +0,0 @@ -/* -Yaaic - Yet Another Android IRC Client - -Copyright 2009-2010 Sebastian Kaspari - -This file is part of Yaaic. - -Yaaic 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. - -Yaaic 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 Yaaic. If not, see . -*/ -package org.yaaic.test.model; - -import org.yaaic.model.Channel; -import org.yaaic.model.Conversation; - -import junit.framework.TestCase; - -/** - * Test case for org.yaaic.model.Channel - * - * @author Sebastian Kaspari - */ -public class ChannelTest extends TestCase -{ - private Channel channel; - - @Override - protected void setUp() - { - this.channel = new Channel("#yaaic"); - } - - public void testGetType() - { - assertEquals(Conversation.TYPE_CHANNEL, channel.getType()); - } - - public void testGetName() - { - assertEquals("#yaaic", channel.getName()); - } - - public void testSetAndGetTopic() - { - assertEquals("", channel.getTopic()); - - String topic = "This is a topic"; - channel.setTopic(topic); - - assertEquals(topic, channel.getTopic()); - } - - - public void testInheritance() - { - assertTrue(channel instanceof Conversation); - } -} diff --git a/test/src/org/yaaic/test/model/IdentityTest.java b/test/src/org/yaaic/test/model/IdentityTest.java deleted file mode 100644 index 3378c40..0000000 --- a/test/src/org/yaaic/test/model/IdentityTest.java +++ /dev/null @@ -1,68 +0,0 @@ -/* -Yaaic - Yet Another Android IRC Client - -Copyright 2009-2010 Sebastian Kaspari - -This file is part of Yaaic. - -Yaaic 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. - -Yaaic 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 Yaaic. If not, see . -*/ -package org.yaaic.test.model; - -import org.yaaic.model.Identity; - -import junit.framework.TestCase; - -/** - * Test case for org.yaaic.model.Identity - * - * @author Sebastian Kaspari - */ -public class IdentityTest extends TestCase -{ - private Identity identity; - - @Override - protected void setUp() - { - this.identity = new Identity(); - } - - public void testSetAndGetNickname() - { - assertNull(identity.getNickname()); - - String nickname = "InvaderZim"; - identity.setNickname(nickname); - assertEquals(nickname, identity.getNickname()); - } - - public void testSetAndGetIdent() - { - assertNull(identity.getIdent()); - - String ident = "invader"; - identity.setIdent(ident); - assertEquals(ident, identity.getIdent()); - } - - public void testSetAndGetRealName() - { - assertNull(identity.getRealName()); - - String realname = "Invader Zim"; - identity.setRealName(realname); - assertEquals(realname, identity.getRealName()); - } -} diff --git a/test/src/org/yaaic/test/model/MessageTest.java b/test/src/org/yaaic/test/model/MessageTest.java deleted file mode 100644 index bb8036e..0000000 --- a/test/src/org/yaaic/test/model/MessageTest.java +++ /dev/null @@ -1,73 +0,0 @@ -/* -Yaaic - Yet Another Android IRC Client - -Copyright 2009-2010 Sebastian Kaspari - -This file is part of Yaaic. - -Yaaic 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. - -Yaaic 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 Yaaic. If not, see . -*/ -package org.yaaic.test.model; - -import org.yaaic.model.Message; - -import junit.framework.TestCase; - -/** - * Test case for org.yaaic.model.Message - * - * @author Sebastian Kaspari - */ -public class MessageTest extends TestCase -{ - private Message message; - private String text = " Hello World!"; - - @Override - protected void setUp() - { - this.message = new Message(text); - } - - public void testSetAndGetIcon() - { - assertEquals(-1, message.getIcon()); - - message.setIcon(25); // Normally we use an ressource id - assertEquals(25, message.getIcon()); - - message.setIcon(-1); // The message class uses -1 as "no icon" - assertEquals(-1, message.getIcon()); - } - - public void testGetText() - { - assertEquals(text, message.getText()); - } - - public void testTimestamp() - { - Message message = new Message(""); - - message.setTimestamp(1270505773862l); - - assertEquals("[00:16] ", message.renderTimeStamp(false)); - assertEquals("[00:16] ", message.renderTimeStamp(true)); - - message.setTimestamp(1270908275000l); - - assertEquals("[04:04] ", message.renderTimeStamp(false)); - assertEquals("[16:04] ", message.renderTimeStamp(true)); - } -} diff --git a/test/src/org/yaaic/test/model/QueryTest.java b/test/src/org/yaaic/test/model/QueryTest.java deleted file mode 100644 index c927dcb..0000000 --- a/test/src/org/yaaic/test/model/QueryTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* -Yaaic - Yet Another Android IRC Client - -Copyright 2009-2010 Sebastian Kaspari - -This file is part of Yaaic. - -Yaaic 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. - -Yaaic 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 Yaaic. If not, see . -*/ -package org.yaaic.test.model; - -import org.yaaic.model.Query; -import org.yaaic.model.Conversation; - -import junit.framework.TestCase; - -/** - * Test case for org.yaaic.model.Query - * - * @author Sebastian Kaspari - */ -public class QueryTest extends TestCase -{ - private Query query; - - @Override - protected void setUp() - { - this.query = new Query("pocmo"); - } - - public void testGetType() - { - assertEquals(Conversation.TYPE_QUERY, query.getType()); - } - - public void testInheritance() - { - assertTrue(query instanceof Conversation); - } -} diff --git a/test/src/org/yaaic/test/model/ScrollbackTest.java b/test/src/org/yaaic/test/model/ScrollbackTest.java deleted file mode 100644 index 303b2ba..0000000 --- a/test/src/org/yaaic/test/model/ScrollbackTest.java +++ /dev/null @@ -1,84 +0,0 @@ -/* -Yaaic - Yet Another Android IRC Client - -Copyright 2009-2010 Sebastian Kaspari - -This file is part of Yaaic. - -Yaaic 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. - -Yaaic 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 Yaaic. If not, see . -*/ -package org.yaaic.test.model; - -import org.yaaic.model.Scrollback; - -import junit.framework.TestCase; - -/** - * Test case for org.yaaic.model.Scrollback - * - * @author Sebastian Kaspari - */ -public class ScrollbackTest extends TestCase -{ - private Scrollback scrollback; - - @Override - public void setUp() - { - scrollback = new Scrollback(); - } - - public void testEmptyHistoryBack() - { - assertNull(scrollback.goBack()); - assertNull(scrollback.goBack()); - } - - public void testEmptyHistoryForward() - { - assertEquals("", scrollback.goForward()); - assertEquals("", scrollback.goForward()); - } - - public void testHistory() - { - scrollback.addMessage("Message One"); - - assertEquals("Message One", scrollback.goBack()); - assertEquals("Message One", scrollback.goBack()); - - assertEquals("", scrollback.goForward()); - - scrollback.addMessage("Message Two"); - assertEquals("Message Two", scrollback.goBack()); - assertEquals("Message One", scrollback.goBack()); - - assertEquals("Message Two", scrollback.goForward()); - assertEquals("", scrollback.goForward()); - - scrollback.addMessage("Message Three"); - scrollback.addMessage("Message Four"); - - assertEquals("Message Four", scrollback.goBack()); - assertEquals("Message Three", scrollback.goBack()); - assertEquals("Message Two", scrollback.goBack()); - assertEquals("Message One", scrollback.goBack()); - assertEquals("Message One", scrollback.goBack()); - - assertEquals("Message Two", scrollback.goForward()); - assertEquals("Message Three", scrollback.goForward()); - assertEquals("Message Four", scrollback.goForward()); - assertEquals("", scrollback.goForward()); - } -} diff --git a/test/src/org/yaaic/test/model/ServerInfoTest.java b/test/src/org/yaaic/test/model/ServerInfoTest.java deleted file mode 100644 index 2af8ad1..0000000 --- a/test/src/org/yaaic/test/model/ServerInfoTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* -Yaaic - Yet Another Android IRC Client - -Copyright 2009-2010 Sebastian Kaspari - -This file is part of Yaaic. - -Yaaic 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. - -Yaaic 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 Yaaic. If not, see . -*/ -package org.yaaic.test.model; - -import org.yaaic.model.ServerInfo; -import org.yaaic.model.Conversation; - -import junit.framework.TestCase; - -/** - * Test case for org.yaaic.model.ServerInfo - * - * @author Sebastian Kaspari - */ -public class ServerInfoTest extends TestCase -{ - private ServerInfo serverInfo; - - @Override - protected void setUp() - { - this.serverInfo = new ServerInfo(); - } - - public void testGetType() - { - assertEquals(Conversation.TYPE_SERVER, serverInfo.getType()); - } - - public void testInheritance() - { - assertTrue(serverInfo instanceof Conversation); - } -} diff --git a/test/src/org/yaaic/test/model/ServerTest.java b/test/src/org/yaaic/test/model/ServerTest.java deleted file mode 100644 index 22c4543..0000000 --- a/test/src/org/yaaic/test/model/ServerTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* -Yaaic - Yet Another Android IRC Client - -Copyright 2009-2010 Sebastian Kaspari - -This file is part of Yaaic. - -Yaaic 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. - -Yaaic 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 Yaaic. If not, see . -*/ -package org.yaaic.test.model; - -import org.yaaic.model.Channel; -import org.yaaic.model.Conversation; -import org.yaaic.model.Identity; -import org.yaaic.model.Query; -import org.yaaic.model.Server; -import org.yaaic.model.ServerInfo; -import org.yaaic.model.Status; - -import junit.framework.TestCase; - -/** - * Test case for org.yaaic.model.Server - * - * @author Sebastian Kaspari - */ -public class ServerTest extends TestCase -{ - private Server server; - - @Override - public void setUp() - { - this.server = new Server(); - } - - public void testInstance() - { - assertEquals(1, server.getConversations().size()); - - assertNotNull(server.getConversation(ServerInfo.DEFAULT_NAME)); - assertEquals(Conversation.TYPE_SERVER, server.getConversation(ServerInfo.DEFAULT_NAME).getType()); - } - - public void testSetAndGetHost() - { - assertNull(server.getHost()); - - server.setHost("irc.epd-me.net"); - assertEquals("irc.epd-me.net", server.getHost()); - } - - public void testSetAndGetIdentity() - { - assertNull(server.getIdentity()); - - Identity identity = new Identity(); - identity.setNickname("ServerTest"); - server.setIdentity(identity); - - assertEquals("ServerTest", server.getIdentity().getNickname()); - } - - public void testSetAndGetId() - { - assertEquals(0, server.getId()); - - server.setId(42); - assertEquals(42, server.getId()); - - server.setId(23); - assertEquals(23, server.getId()); - } - - public void testSetAndGetPassword() - { - assertEquals(null, server.getPassword()); - - server.setPassword("secret"); - assertEquals("secret", server.getPassword()); - } - - public void testSetAndGetTitle() - { - assertEquals(null, server.getTitle()); - - server.setTitle("MyServer"); - assertEquals("MyServer", server.getTitle()); - } - - public void testSetAndGetPort() - { - assertEquals(0, server.getPort()); - - server.setPort(12345); - assertEquals(12345, server.getPort()); - } - - public void testSetAndGetCharset() - { - assertNull(server.getCharset()); - - server.setCharset("UTF-16"); - assertEquals("UTF-16", server.getCharset()); - } - - public void testSetAndGetStatus() - { - assertEquals(Status.DISCONNECTED, server.getStatus()); - assertTrue(server.isDisconnected()); - assertFalse(server.isConnected()); - - server.setStatus(Status.PRE_CONNECTING); - assertEquals(Status.PRE_CONNECTING, server.getStatus()); - assertFalse(server.isDisconnected()); - assertFalse(server.isConnected()); - - server.setStatus(Status.CONNECTING); - assertEquals(Status.CONNECTING, server.getStatus()); - assertFalse(server.isDisconnected()); - assertFalse(server.isConnected()); - - server.setStatus(Status.CONNECTED); - assertEquals(Status.CONNECTED, server.getStatus()); - assertFalse(server.isDisconnected()); - assertTrue(server.isConnected()); - } - - public void testConversationHandling() - { - Channel channel = new Channel("#yaaic"); - - server.addConversation(channel); - assertEquals(2, server.getConversations().size()); - assertNotNull(server.getConversation("#yaaic")); - - // ignore case - assertNotNull(server.getConversation("#yAAic")); - - server.addConversation(new Query("pocmo")); - assertEquals(3, server.getConversations().size()); - - // test order - String[] names = { ServerInfo.DEFAULT_NAME, "#yaaic", "pocmo" }; - int i = 0; - for (Conversation conversation : server.getConversations()) { - assertEquals(names[i], conversation.getName()); - i++; - } - - server.removeConversation("#yaaic"); - assertEquals(2, server.getConversations().size()); - - String[] names2 = { ServerInfo.DEFAULT_NAME, "pocmo" }; - int j = 0; - for (Conversation conversation : server.getConversations()) { - assertEquals(names2[j], conversation.getName()); - j++; - } - - // There's a new ServerInfo object after clear - server.clearConversations(); - assertEquals(1, server.getConversations().size()); - assertNotNull(server.getConversation(ServerInfo.DEFAULT_NAME)); - } -} \ No newline at end of file diff --git a/test/src/org/yaaic/test/receiver/AllTests.java b/test/src/org/yaaic/test/receiver/AllTests.java deleted file mode 100644 index e1b27b4..0000000 --- a/test/src/org/yaaic/test/receiver/AllTests.java +++ /dev/null @@ -1,41 +0,0 @@ -/* -Yaaic - Yet Another Android IRC Client - -Copyright 2009-2010 Sebastian Kaspari - -This file is part of Yaaic. - -Yaaic 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. - -Yaaic 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 Yaaic. If not, see . -*/ -package org.yaaic.test.receiver; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * All tests in org.yaaic.test.receiver - * - * @author Sebastian Kaspari - */ -public class AllTests -{ - public static Test suite() { - TestSuite suite = new TestSuite("Test for org.yaaic.test.receiver"); - //$JUnit-BEGIN$ - suite.addTestSuite(ConversationReceiverTest.class); - //$JUnit-END$ - return suite; - } - -} \ No newline at end of file diff --git a/test/src/org/yaaic/test/receiver/ConversationReceiverTest.java b/test/src/org/yaaic/test/receiver/ConversationReceiverTest.java deleted file mode 100644 index 9d8c68a..0000000 --- a/test/src/org/yaaic/test/receiver/ConversationReceiverTest.java +++ /dev/null @@ -1,113 +0,0 @@ -/* -Yaaic - Yet Another Android IRC Client - -Copyright 2009-2010 Sebastian Kaspari - -This file is part of Yaaic. - -Yaaic 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. - -Yaaic 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 Yaaic. If not, see . -*/ -package org.yaaic.test.receiver; - -import org.yaaic.listener.ConversationListener; -import org.yaaic.model.Broadcast; -import org.yaaic.receiver.ConversationReceiver; - -import android.content.Intent; -import android.test.AndroidTestCase; - -/** - * Test case for org.yaaic.receiver.ConversationReceiver - * - * @author Sebastian Kaspari - */ -public class ConversationReceiverTest extends AndroidTestCase implements ConversationListener -{ - private boolean onConversationMessageCalled; - private boolean onNewConversationCalled; - private boolean onRemoveConversationCalled; - - private ConversationReceiver receiver; - private String testTarget = "#unittest"; - private int serverId = 42; - - public void setUp() - { - onConversationMessageCalled = false; - onNewConversationCalled = false; - onRemoveConversationCalled = false; - - receiver = new ConversationReceiver(serverId, this); - } - - public void testMessageBroadcast() - { - Intent intent = Broadcast.createConversationIntent(Broadcast.CONVERSATION_MESSAGE, serverId, testTarget); - receiver.onReceive(getContext(), intent); - - assertTrue(onConversationMessageCalled); - assertFalse(onNewConversationCalled); - assertFalse(onRemoveConversationCalled); - } - - public void testNewBroadcast() - { - Intent intent = Broadcast.createConversationIntent(Broadcast.CONVERSATION_NEW, serverId, testTarget); - receiver.onReceive(getContext(), intent); - - assertFalse(onConversationMessageCalled); - assertTrue(onNewConversationCalled); - assertFalse(onRemoveConversationCalled); - } - - public void testRemoveBroadcast() - { - Intent intent = Broadcast.createConversationIntent(Broadcast.CONVERSATION_REMOVE, serverId, testTarget); - receiver.onReceive(getContext(), intent); - - assertFalse(onConversationMessageCalled); - assertFalse(onNewConversationCalled); - assertTrue(onRemoveConversationCalled); - } - - @Override - public void onConversationMessage(String target) - { - assertEquals(testTarget, target); - - onConversationMessageCalled = true; - } - - @Override - public void onNewConversation(String target) - { - assertEquals(testTarget, target); - - onNewConversationCalled = true; - } - - @Override - public void onRemoveConversation(String target) - { - assertEquals(testTarget, target); - - onRemoveConversationCalled = true; - } - - @Override - public void onTopicChanged(String topic) - { - // XXX: Implement me! - } -} diff --git a/test/src/org/yaaic/test/scenario/AllTests.java b/test/src/org/yaaic/test/scenario/AllTests.java deleted file mode 100644 index 9bc4e23..0000000 --- a/test/src/org/yaaic/test/scenario/AllTests.java +++ /dev/null @@ -1,41 +0,0 @@ -/* -Yaaic - Yet Another Android IRC Client - -Copyright 2009-2010 Sebastian Kaspari - -This file is part of Yaaic. - -Yaaic 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. - -Yaaic 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 Yaaic. If not, see . -*/ -package org.yaaic.test.scenario; - -import junit.framework.Test; -import junit.framework.TestSuite; - -/** - * All scenario tests - * - * @author Sebastian Kaspari - */ -public class AllTests { - public static Test suite() { - TestSuite suite = new TestSuite("Scenario-Tests"); - //$JUnit-BEGIN$ - suite.addTestSuite(ServerListScenarios.class); - suite.addTestSuite(ConnectionScenarios.class); - suite.addTestSuite(ChannelScenarios.class); - //$JUnit-END$ - return suite; - } -} diff --git a/test/src/org/yaaic/test/scenario/ChannelScenarios.java b/test/src/org/yaaic/test/scenario/ChannelScenarios.java deleted file mode 100644 index 2b814e0..0000000 --- a/test/src/org/yaaic/test/scenario/ChannelScenarios.java +++ /dev/null @@ -1,97 +0,0 @@ -/* -Yaaic - Yet Another Android IRC Client - -Copyright 2009-2010 Sebastian Kaspari - -This file is part of Yaaic. - -Yaaic 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. - -Yaaic 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 Yaaic. If not, see . -*/ -package org.yaaic.test.scenario; - - - -import android.test.ActivityInstrumentationTestCase2; -import android.util.Log; - -import com.jayway.android.robotium.solo.Solo; - -/** - * Scenarios regarding channels of a server - * - * @author Sebastian Kaspari - */ -@SuppressWarnings("rawtypes") -public class ChannelScenarios extends ActivityInstrumentationTestCase2 -{ - private Solo solo; - private ScenarioHelper helper; - - /** - * Create a new ChannelScenario instance - * - * @throws ClassNotFoundException - */ - @SuppressWarnings("unchecked") - public ChannelScenarios() throws ClassNotFoundException - { - super( - "org.yaaic", - Class.forName("org.yaaic.activity.ServersActivity") - ); - } - - /** - * Setup test case - */ - @Override - protected void setUp() - { - if (solo == null) { - solo = new Solo(getInstrumentation(), getActivity()); - helper = new ScenarioHelper(solo); - } - - helper.createTestServer(); - helper.connectToServer(); - } - - /** - * Cleanup after test - */ - @Override - protected void tearDown() - { - helper.disconnectFromServer(); - helper.deleteTestServer(); - - solo.finishOpenedActivities(); - } - - /** - * Scenario: Write a channel message - * - * - Connect to server - * - Join test channel - * - Write a message - * - The message is displayed in the view - */ - public void testSendingChannelMessage() - { - helper.joinTestChannel(); - - helper.send("Hello Test-World"); - assertTrue(solo.searchText(" Hello Test-World")); - } -} diff --git a/test/src/org/yaaic/test/scenario/ConnectionScenarios.java b/test/src/org/yaaic/test/scenario/ConnectionScenarios.java deleted file mode 100644 index 7729e9d..0000000 --- a/test/src/org/yaaic/test/scenario/ConnectionScenarios.java +++ /dev/null @@ -1,101 +0,0 @@ -/* -Yaaic - Yet Another Android IRC Client - -Copyright 2009-2010 Sebastian Kaspari - -This file is part of Yaaic. - -Yaaic 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. - -Yaaic 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 Yaaic. If not, see . -*/ -package org.yaaic.test.scenario; - - - -import android.test.ActivityInstrumentationTestCase2; -import android.util.Log; - -import com.jayway.android.robotium.solo.Solo; - -/** - * Test scenarios including connecting to a server - * - * @author Sebastian Kaspari - */ -@SuppressWarnings("rawtypes") -public class ConnectionScenarios extends ActivityInstrumentationTestCase2 -{ - private ScenarioHelper helper; - private Solo solo; - - /** - * Create a new ConnectionScenario instance - * - * @throws ClassNotFoundException - */ - @SuppressWarnings("unchecked") - public ConnectionScenarios() throws ClassNotFoundException - { - super( - "org.yaaic", - Class.forName("org.yaaic.activity.ServersActivity") - ); - } - - /** - * Setup test case - */ - @Override - protected void setUp() - { - if (solo == null) { - solo = new Solo(getInstrumentation(), getActivity()); - helper = new ScenarioHelper(solo); - } - - helper.createTestServer(); - helper.connectToServer(); - } - - /** - * Cleanup after test - */ - @Override - protected void tearDown() - { - helper.disconnectFromServer(); - helper.deleteTestServer(); - - solo.finishOpenedActivities(); - } - - /** - * Scenario: Join a channel - * - * - Connect to server - * - Enter command: /j #yaaic-test - * - A new conversation with text #yaaic-test appears - * - Disconnect - */ - public void testJoiningChannel() - { - // Join channel - solo.enterText(0, "/j #yaaic-test"); - solo.sendKey(Solo.ENTER); - - solo.sleep(1500); - - // Assert channel joined - assertTrue(solo.searchText("#yaaic-test")); - } -} diff --git a/test/src/org/yaaic/test/scenario/ScenarioHelper.java b/test/src/org/yaaic/test/scenario/ScenarioHelper.java deleted file mode 100644 index 9282757..0000000 --- a/test/src/org/yaaic/test/scenario/ScenarioHelper.java +++ /dev/null @@ -1,174 +0,0 @@ -/* -Yaaic - Yet Another Android IRC Client - -Copyright 2009-2010 Sebastian Kaspari - -This file is part of Yaaic. - -Yaaic 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. - -Yaaic 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 Yaaic. If not, see . -*/ -package org.yaaic.test.scenario; - -import org.yaaic.R; -import org.yaaic.activity.ConversationActivity; -import org.yaaic.activity.ServersActivity; - -import android.view.View; -import android.widget.EditText; - -import com.jayway.android.robotium.solo.Solo; - -/** - * Scenario helper for performing common actions - * - * @author Sebastian Kaspari - */ -public class ScenarioHelper -{ - private Solo solo; - - public ScenarioHelper(Solo solo) - { - this.solo = solo; - } - - /** - * Create a test server (RobotiumTest) - * - * Starting Point: ServersActivity - * Ending Point: ServersActivity - * - * @param solo - */ - public void createTestServer() - { - if (!solo.searchText("RobotiumTest")) { - solo.assertCurrentActivity("Starting at ServersActivity", "ServersActivity"); - - View view = solo.getView(R.id.add); - assert view != null; - - solo.clickOnView(view); - - solo.waitForActivity("AddServerActivity"); - solo.assertCurrentActivity("Switched to AddServerActivity", "AddServerActivity"); - - solo.enterText(0, "RobotiumTest"); - solo.enterText(1, "irc.epd-me.net"); - - solo.enterText(4, "YaaicBotium"); - - // Somehow robotium doesn't detect the field when using index 5 - EditText realname = (EditText) solo.getView(R.id.realname); - solo.enterText(realname, "Robotium and Yaaic"); - - solo.clickOnButton(solo.getString(R.string.server_save)); - - solo.waitForActivity("ServersActivity", 2000); - } - } - - /** - * Connect to the test server - * - * Starting Point: ServersActivity - * Ending Point: ConversationsActivity - * - * @param solo - */ - public void connectToServer() - { - solo.clickOnText("RobotiumTest"); - - solo.waitForActivity("ConversationActivity", 3000); - solo.assertCurrentActivity("Assert is ConversationActivity", ConversationActivity.class); - - solo.waitForText(solo.getString(R.string.message_login_done)); - } - - /** - * Disconnect from the test server - * - * Starting Point: ConversationsActivity - * Ending Point: ServersActivity - * - * @param solo - */ - public void disconnectFromServer() - { - // Go back - solo.goBack(); - solo.waitForActivity("ServersActivity", 2000); - solo.assertCurrentActivity("Assert is ServersActivity", ServersActivity.class); - - // Disconnect - solo.clickLongOnText("RobotiumTest"); - solo.clickOnText("Disconnect"); - - solo.waitForActivity("ServersActivity", 1000); - solo.assertCurrentActivity("Assert is ServersActivity", ServersActivity.class); - } - - /** - * Delete the test server (RobotiumTest) - * - * Starting Point: ServersActivity - * Ending Point: ServersActivity - * - * @param solo - */ - public void deleteTestServer() - { - if (solo.searchText("RobotiumTest")) { - // Delete server again - solo.clickLongOnText("RobotiumTest"); - solo.clickOnText("Delete"); - - solo.waitForActivity("ServersActivity", 1000); - solo.assertCurrentActivity("Assert is ServersActivity", ServersActivity.class); - } - } - - /** - * Join the test channel - * - * Starting Point: ConversationsActivity - * Ending Point: ConversationsActivity - * - * @param solo - */ - public void joinTestChannel() - { - // Send join command - send("/j #yaaic-test"); - - // Wait for channel joined - solo.waitForText("#yaaic-test"); - } - - /** - * Send a message via the command line - * - * Starting Point: ConversationsActivity - * Ending Point: ConversationsActivity - * - * @param solo - * @param message - */ - public void send(String message) - { - solo.enterText(0, message); - solo.sendKey(Solo.ENTER); - } -} diff --git a/test/src/org/yaaic/test/scenario/ServerListScenarios.java b/test/src/org/yaaic/test/scenario/ServerListScenarios.java deleted file mode 100644 index d0ba19b..0000000 --- a/test/src/org/yaaic/test/scenario/ServerListScenarios.java +++ /dev/null @@ -1,131 +0,0 @@ -/* -Yaaic - Yet Another Android IRC Client - -Copyright 2009-2010 Sebastian Kaspari - -This file is part of Yaaic. - -Yaaic 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. - -Yaaic 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 Yaaic. If not, see . -*/ -package org.yaaic.test.scenario; - -import org.yaaic.R; -import org.yaaic.activity.ServersActivity; - -import android.test.ActivityInstrumentationTestCase2; -import android.view.View; -import android.widget.EditText; - -import com.jayway.android.robotium.solo.Solo; - -/** - * Scenario Tests for the ServersActivity - * - * @author Sebastian Kaspari - */ -@SuppressWarnings("rawtypes") -public class ServerListScenarios extends ActivityInstrumentationTestCase2 -{ - private Solo solo; - private ScenarioHelper helper; - - /** - * Create a new ServerListScenarios instance - * - * @throws ClassNotFoundException - */ - @SuppressWarnings("unchecked") - public ServerListScenarios() throws ClassNotFoundException - { - super("org.yaaic", ServersActivity.class); - } - - /** - * Setup test case - */ - @Override - protected void setUp() - { - if (solo == null) { - solo = new Solo(getInstrumentation(), getActivity()); - helper = new ScenarioHelper(solo); - } - } - - /** - * Cleanup after run - */ - @Override - protected void tearDown() - { - solo.finishOpenedActivities(); - } - - /** - * Test-Scenario: - * - * Add server: - * - Select "Add server" from the menu - * - Add all necessary information - * - Click on Save - * - The new server appears in the list - * - * Remove server: - * - Long press on the server in the list - * - Select delete - * - The server is no longer in the list - */ - public void testAddingAndRemovingServer() - { - // Delete Testserver if already exists - helper.deleteTestServer(); - - // Assert server does not exist - assertFalse(solo.searchText("RobotiumTest")); - - // Add server - View view = solo.getView(R.id.add); - assert view != null; - solo.clickOnView(view); - - solo.waitForActivity("AddServerActivity", 2000); - - solo.assertCurrentActivity("Switched to AddServerActivity", "AddServerActivity"); - - solo.enterText(0, "RobotiumTest"); - solo.enterText(1, "irc.epd-me.net"); - - solo.enterText(4, "YaaicBotium"); - - // Somehow robotium doesn't detect the field when using index 5 - EditText realname = (EditText) solo.getView(R.id.realname); - solo.enterText(realname, "Robotium and Yaaic"); - - solo.clickOnButton(solo.getString(R.string.server_save)); - - solo.waitForActivity("ServersActivity", 1000); - solo.assertCurrentActivity("Switched back to ServersActivity", "ServersActivity"); - - // Assert new server exists - assertTrue(solo.searchText("RobotiumTest")); - - // Remove new server again - solo.clickLongOnText("RobotiumTest"); - - solo.clickOnText("Delete"); - - solo.waitForActivity("ServersActivity", 1000); - solo.assertCurrentActivity("Switched back to ServersActivity", "ServersActivity"); - } -} diff --git a/tools/check_languages.rb b/tools/check_languages.rb deleted file mode 100755 index 48dba45..0000000 --- a/tools/check_languages.rb +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/ruby -# Yaaic - Yet Another Android IRC Client -# -# Copyright 2009-2010 Sebastian Kaspari -# -# This file is part of Yaaic. -# -# Yaaic 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. -# -# Yaaic 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 Yaaic. If not, see . - -# TODO: Use a XML parser instead of reading lines - -base_path = "#{File.dirname(__FILE__)}/../application/res/" -original_file = "#{base_path}values/strings.xml" -languages = [] -items = {} -pattern = Regexp.new '([^<]+)' -lang_pattern = Regexp.new 'values-([a-zA-Z_-]+)' -show_keys = false - -show_keys = true if ARGV.length == 1 && ARGV[0] == '--show-keys' - -# Scan for languages -Dir.new(base_path).entries.each { |directory| - result = lang_pattern.match directory - if !result.nil? then - languages.push result[1] - end -} - -puts "Found #{languages.length} language(s): #{languages.inspect}" - -# Grab all keys from the original file -file = File.new(original_file, 'r') -while line = file.gets - result = pattern.match line - if !result.nil? then - items[result[1]] = result[2] - end -end -file.close - -puts "Found #{items.length} items in strings.xml" -puts - -# Check all langauges files for keys -languages.each { |language| - keys = 0 - check = items.clone - untranslated = {} - unused = {} - language_file = "#{base_path}values-#{language}/strings.xml" - - file = File.new(language_file, 'r') - while line = file.gets - result = pattern.match line - if !result.nil? then - key = result[1] - value = result[2] - - check.delete key - if items[key].nil? then - unused[key] = value - else - untranslated[key] = value if items[key] == value - end - keys += 1 - end - end - - translated = items.length - untranslated.length - check.length - translated_percent = sprintf('%.2f', 100.to_f / items.length.to_f * translated.to_f) - keys_percent = sprintf('%.2f', 100.to_f / items.length.to_f * keys.to_f) - - puts "Language #{language}" - puts " * Keys: #{keys.to_s.rjust 5}/#{items.length.to_s.ljust 5} #{keys_percent.to_s.rjust 6}%" - puts " * Translated: #{translated.to_s.rjust 5}/#{items.length.to_s.ljust 5} #{translated_percent.to_s.rjust 6}%" - - if show_keys then - if check.length > 0 then - puts " * Missing keys:" - check.each { |key,value| puts " * #{key}" } - end - - if untranslated.length > 0 then - puts " * Untranslated keys:" - untranslated.each { |key,value| puts " * #{key}" } - end - - if unused.length > 0 then - puts " * Unused keys:" - unused.each { |key,value| puts " * #{key}" } if unused.length > 0 - end - end - - puts -} -