diff --git a/build.gradle b/build.gradle index 6a7d068b950..a485afff7b7 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:1.0.0' + classpath 'com.android.tools.build:gradle:1.1.1' } } diff --git a/configuration/buildAndUpdateProduct.sh b/configuration/buildAndUpdateProduct.sh index ba468eeeae8..3c405d73557 100755 --- a/configuration/buildAndUpdateProduct.sh +++ b/configuration/buildAndUpdateProduct.sh @@ -619,10 +619,10 @@ if [[ "$@" == "build" ]] || [[ "$@" == "all" ]]; then echo "ANDROID_HOME=$ANDROID_HOME" PATH=$PATH:$ANDROID_HOME/tools PATH=$PATH:$ANDROID_HOME/platform-tools - ANDROID="$ANDROID_HOME/tools/android" - if [ \! -x "$ANDROID" ]; then - ANDROID="$ANDROID_HOME/tools/android.bat" - fi + ANDROID="$ANDROID_HOME/tools/android" + if [ \! -x "$ANDROID" ]; then + ANDROID="$ANDROID_HOME/tools/android.bat" + fi RC_APP_VERSION=`grep "android:versionCode=" mobile/com.sap.$PROJECT_TYPE.racecommittee.app/AndroidManifest.xml | cut -d "\"" -f 2` echo "RC_APP_VERSION=$RC_APP_VERSION" @@ -654,8 +654,12 @@ if [[ "$@" == "build" ]] || [[ "$@" == "all" ]]; then if [[ ${PIPESTATUS[0]} != 0 ]]; then exit 100 fi - # testing deactivated due to errors in hudson if [ $testing -eq 1 ]; then + echo "Starting JUnit tests..." + ./gradlew test | tee -a $START_DIR/build.log + if [[ ${PIPESTATUS[0]} != 0 ]]; then + exit 103 + fi adb emu kill echo "Downloading image (sys-img-${ANDROID_ABI}-android-${TEST_API})..." | tee -a $START_DIR/build.log echo yes | "$ANDROID" update sdk $ANDROID_OPTIONS --filter sys-img-${ANDROID_ABI}-android-${TEST_API} --no-ui --force --all > /dev/null diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/SimpleRaceIdentifierEscapingTest.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/SimpleRaceIdentifierEscapingTest.java deleted file mode 100755 index 5f149359391..00000000000 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/test/SimpleRaceIdentifierEscapingTest.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.sap.sailing.domain.test; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -import com.sap.sse.common.Util.Triple; - -/** - * This test verifies the algorithm used to escape and unescape SimpleRaceIdentifier components as used in - * FleetIfentifierImpl. - * - * @author Axel Uhl (D043530) - * - */ -public class SimpleRaceIdentifierEscapingTest { - @Test - public void testUnescapingSimpleRaceIdentifier() { - test("Leaderboard with trailing backslash and dot\\.", "raceColumn", "fleet"); - test("Leaderboard\\.with\\.two dots", "raceColumn", "fleet"); - test("Leaderboard with double backslash\\\\", "raceColumn", "fleet"); - test("Leaderboard with double backslash and dot\\\\.", "raceColumn", "fleet"); - test("\\Leaderboard with leading backslash", "raceColumn", "fleet"); - test("\\.Leaderboard with leading backslash and dot", "raceColumn", "fleet"); - test("\\\\.Leaderboard with leading double backslash and dot", "raceColumn", "fleet"); - test("\\\\.Leaderboard with leading double backslash and two dots", "raceColumn", "fleet"); - } - - private void test(String leaderboardName, String raceColumnName, String fleetName) { - final String marshalled = build(leaderboardName, raceColumnName, fleetName); - final Triple parsed = parse(marshalled); - assertEquals(leaderboardName, parsed.getA()); - assertEquals(raceColumnName, parsed.getB()); - assertEquals(fleetName, parsed.getC()); - } - - private Triple parse(String s) { - int arrayIndex = 0; - StringBuilder[] split = new StringBuilder[3]; - for (int i=0; i(leaderboardName, raceColumnName, fleetName); - } - - private String build(String leaderboardName, String raceColumnName, String fleetName) { - return String.format("%s.%s.%s", - escape(leaderboardName), - escape(raceColumnName), - escape(fleetName)); - } - - private String escape(String s) { - return s.replace("\\", "\\\\").replace(".", "\\."); - } -} diff --git a/java/com.sap.sailing.gwt.ui/SailingGWT sdm.launch b/java/com.sap.sailing.gwt.ui/SailingGWT sdm.launch index 328b5babf96..a00d6c0ff91 100755 --- a/java/com.sap.sailing.gwt.ui/SailingGWT sdm.launch +++ b/java/com.sap.sailing.gwt.ui/SailingGWT sdm.launch @@ -5,12 +5,9 @@ - - - @@ -18,8 +15,12 @@ + + + + @@ -72,7 +73,7 @@ - + diff --git a/mobile/com.sap.sailing.racecommittee.app/.classpath b/mobile/com.sap.sailing.racecommittee.app/.classpath index 361be950b40..b32ef90cb7e 100644 --- a/mobile/com.sap.sailing.racecommittee.app/.classpath +++ b/mobile/com.sap.sailing.racecommittee.app/.classpath @@ -1,11 +1,13 @@ - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/mobile/com.sap.sailing.racecommittee.app/SimpleRaceIdentifierEscapingTest.launch b/mobile/com.sap.sailing.racecommittee.app/SimpleRaceIdentifierEscapingTest.launch new file mode 100644 index 00000000000..5dcdc3de012 --- /dev/null +++ b/mobile/com.sap.sailing.racecommittee.app/SimpleRaceIdentifierEscapingTest.launch @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mobile/com.sap.sailing.racecommittee.app/build.gradle b/mobile/com.sap.sailing.racecommittee.app/build.gradle index 644b342601b..84e5765a0bf 100644 --- a/mobile/com.sap.sailing.racecommittee.app/build.gradle +++ b/mobile/com.sap.sailing.racecommittee.app/build.gradle @@ -29,9 +29,13 @@ android { } androidTest { - java.srcDirs = ["tests/src"] - res.srcDirs = ["tests/res"] - assets.srcDirs = ["tests/assets"] + java.srcDirs = ["tests-ui/src"] + res.srcDirs = ["tests-ui/res"] + assets.srcDirs = ["tests-ui/assets"] + } + + test { + java.srcDirs = ["tests-jvm/src"] } } @@ -83,14 +87,19 @@ dependencies { /* all local jar-libs */ compile fileTree(dir: "libs", include: ["*.jar"]) + /* JVM tests */ + testCompile 'junit:junit:4.12' + testCompile "org.mockito:mockito-core:1.9.5" + /* UI testing with espresso */ + androidTestCompile "com.android.support:support-annotations:22.1.1" androidTestCompile "com.android.support.test:runner:0.2" androidTestCompile "com.android.support.test:rules:0.2" androidTestCompile "com.android.support.test.espresso:espresso-core:2.1" - androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.1') { - exclude group: 'com.android.support', module: 'appcompat' - exclude group: 'com.android.support', module: 'support-v4' - exclude module: 'recyclerview-v7' + androidTestCompile ("com.android.support.test.espresso:espresso-contrib:2.1") { + exclude group: "com.android.support", module: "appcompat" + exclude group: "com.android.support", module: "support-v4" + exclude module: "recyclerview-v7" } } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/autoupdate/AutoUpdater.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/autoupdate/AutoUpdater.java index 128ade4f94e..55940938aee 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/autoupdate/AutoUpdater.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/utils/autoupdate/AutoUpdater.java @@ -1,10 +1,5 @@ package com.sap.sailing.racecommittee.app.utils.autoupdate; -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; - import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; @@ -12,14 +7,18 @@ import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.support.v7.app.AlertDialog; - import com.sap.sailing.android.shared.logging.ExLog; import com.sap.sailing.android.shared.util.FileHandlerUtils; import com.sap.sailing.racecommittee.app.AppPreferences; import com.sap.sailing.racecommittee.app.R; -import com.sap.sailing.racecommittee.app.ui.activities.SettingsActivity; +import com.sap.sailing.racecommittee.app.ui.activities.PreferenceActivity; import com.sap.sailing.racecommittee.app.ui.fragments.preference.GeneralPreferenceFragment; +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + public class AutoUpdater { private static final String TAG = AutoUpdater.class.getName(); @@ -70,8 +69,8 @@ public class AutoUpdater { OnClickListener okListener = new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - Intent intent = new Intent(context, SettingsActivity.class); - intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, GeneralPreferenceFragment.class.getName()); + Intent intent = new Intent(context, PreferenceActivity.class); + intent.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT, GeneralPreferenceFragment.class.getName()); context.startActivity(intent); dialog.dismiss(); } diff --git a/mobile/com.sap.sailing.racecommittee.app/tests-jvm/src/com/sap/sailing/racecommittee/app/domain/impl/SimpleRaceIdentifierEscapingTest.java b/mobile/com.sap.sailing.racecommittee.app/tests-jvm/src/com/sap/sailing/racecommittee/app/domain/impl/SimpleRaceIdentifierEscapingTest.java new file mode 100755 index 00000000000..fbb81c2f423 --- /dev/null +++ b/mobile/com.sap.sailing.racecommittee.app/tests-jvm/src/com/sap/sailing/racecommittee/app/domain/impl/SimpleRaceIdentifierEscapingTest.java @@ -0,0 +1,71 @@ +package com.sap.sailing.racecommittee.app.domain.impl; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import com.sap.sailing.domain.base.Fleet; +import com.sap.sailing.domain.base.SeriesBase; +import com.sap.sailing.domain.base.impl.FleetImpl; +import com.sap.sailing.domain.base.racegroup.RaceGroup; +import com.sap.sailing.domain.base.racegroup.impl.RaceGroupImpl; +import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier; +import com.sap.sse.common.Util.Triple; + +/** + * This test verifies the algorithm used to escape and unescape SimpleRaceIdentifier components as used in + * FleetIfentifierImpl. + * + * @author Axel Uhl (D043530) + * + */ +public class SimpleRaceIdentifierEscapingTest { + @Test + public void testUnescapingSimpleRaceIdentifier() { + test("Leaderboard with trailing backslash and dot\\.", "empty", "fleet", "raceColumn"); + test("Leaderboard\\.with\\.two dots", "empty", "fleet", "raceColumn"); + test("Leaderboard with double backslash\\\\", "empty", "fleet", "raceColumn"); + test("Leaderboard with double backslash and dot\\\\.", "empty", "fleet", "raceColumn"); + test("\\Leaderboard with leading backslash", "empty", "fleet", "raceColumn"); + test("\\.Leaderboard with leading backslash and dot", "empty", "fleet", "raceColumn"); + test("\\\\.Leaderboard with leading double backslash and dot", "empty", "fleet", "raceColumn"); + test("\\\\.Leaderboard with leading double backslash and two dots", "empty", "fleet", "raceColumn"); + } + + private void test(String leaderboardName, String empty, String fleetName, String raceColumnName) { + final String marshalled = build(leaderboardName, empty, fleetName, raceColumnName); + final Triple parsed = FleetIdentifierImpl.unescape(marshalled); + assertEquals(leaderboardName, parsed.getA()); + assertEquals(raceColumnName, parsed.getB()); + assertEquals(fleetName, parsed.getC()); + } + + private String build(final String leaderboardName, final String seriesName, final String fleetName, final String raceColumnName) { + final Fleet fleet = new FleetImpl(fleetName); + final SeriesBase series = new SeriesBase() { + private static final long serialVersionUID = 1139740910228343375L; + + @Override + public String getName() { + return seriesName; + } + + @Override + public void setName(String newName) { + } + + @Override + public boolean isMedal() { + return false; + } + + @Override + public Iterable getFleets() { + return null; + } + }; + RaceGroup raceGroup = new RaceGroupImpl(leaderboardName, /* displayName */ null, /* boatClass */ null, /* courseArea */ null, /* series */ null, /* regattaConfiguration */ null); + ManagedRaceIdentifier identifier = new ManagedRaceIdentifierImpl(raceColumnName, fleet, series, raceGroup); + return identifier.getId(); + } +} diff --git a/mobile/com.sap.sailing.racecommittee.app/tests/src/com/sap/sailing/racecommittee/app/ApplicationTest.java b/mobile/com.sap.sailing.racecommittee.app/tests-ui/src/com/sap/sailing/racecommittee/app/ApplicationTest.java similarity index 100% rename from mobile/com.sap.sailing.racecommittee.app/tests/src/com/sap/sailing/racecommittee/app/ApplicationTest.java rename to mobile/com.sap.sailing.racecommittee.app/tests-ui/src/com/sap/sailing/racecommittee/app/ApplicationTest.java diff --git a/mobile/com.sap.sailing.racecommittee.app/tests/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivityTest.java b/mobile/com.sap.sailing.racecommittee.app/tests-ui/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivityTest.java similarity index 100% rename from mobile/com.sap.sailing.racecommittee.app/tests/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivityTest.java rename to mobile/com.sap.sailing.racecommittee.app/tests-ui/src/com/sap/sailing/racecommittee/app/ui/activities/LoginActivityTest.java