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 extends Fleet> 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