Merge branch 'ubilabs--rcapp--new-testing'

This commit is contained in:
Peter Siegmund committed 2015-06-19 13:18:34 +02:00
commit 8ff5aea866
11 files changed
+146 -111

No files matched your search

+1 -1
View File
@@ -6,7 +6,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
classpath 'com.android.tools.build:gradle:1.1.1'
}
}
+9 -5
View File
@@ -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
@@ -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
* <code>FleetIfentifierImpl</code>.
*
* @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<String, String, String> parsed = parse(marshalled);
assertEquals(leaderboardName, parsed.getA());
assertEquals(raceColumnName, parsed.getB());
assertEquals(fleetName, parsed.getC());
}
private Triple<String, String, String> parse(String s) {
int arrayIndex = 0;
StringBuilder[] split = new StringBuilder[3];
for (int i=0; i<split.length; i++) {
split[i] = new StringBuilder();
}
boolean escaped = false;
for (int i=0; i<s.length(); i++) {
if (escaped) {
split[arrayIndex].append(s.charAt(i));
escaped = false;
} else if (s.charAt(i) == '\\') {
escaped = true; // next character is escaped
} else if (s.charAt(i) == '.') {
// an unescaped dot
arrayIndex++;
} else {
// unescaped non-escape, non-dot character
split[arrayIndex].append(s.charAt(i));
}
}
String leaderboardName = split[0].toString();
String raceColumnName = split[1].toString();
String fleetName = split[2].toString();
return new Triple<>(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(".", "\\.");
}
}
@@ -5,12 +5,9 @@
<booleanAttribute key="com.google.gdt.eclipse.suiteWarArgumentProcessor.IS_WAR_FROM_PROJECT_PROPERTIES" value="true"/>
<booleanAttribute key="com.google.gwt.eclipse.core.CODE_SERVER_PORT_AUTO" value="true"/>
<listAttribute key="com.google.gwt.eclipse.core.ENTRY_POINT_MODULES">
<listEntry value="com.sap.sailing.gwt.regattaoverview.RegattaOverview"/>
<listEntry value="com.sap.sailing.gwt.ui.RaceBoard"/>
<listEntry value="com.sap.sailing.gwt.Home"/>
<listEntry value="com.sap.sailing.gwt.ui.DataMining"/>
<listEntry value="com.sap.sailing.gwt.ui.LeaderboardEditing"/>
<listEntry value="com.sap.sailing.gwt.ui.AdminConsole"/>
<listEntry value="com.sap.sailing.gwt.ui.Spectator"/>
<listEntry value="com.sap.sailing.gwt.regattaoverview.RegattaOverview"/>
<listEntry value="com.sap.sailing.gwt.ui.PolarSheets"/>
@@ -18,8 +15,12 @@
<listEntry value="com.sap.sailing.gwt.ui.Simulator"/>
<listEntry value="com.sap.sailing.gwt.ui.YoutubePopup"/>
<listEntry value="com.sap.sailing.gwt.AutoPlay"/>
<listEntry value="com.sap.sailing.gwt.ui.AdminConsole"/>
<listEntry value="com.sap.sailing.gwt.home.Mobile"/>
<listEntry value="com.sap.sailing.gwt.home.Desktop"/>
<listEntry value="com.sap.sailing.gwt.ui.VideoPopup"/>
</listAttribute>
<stringAttribute key="com.google.gwt.eclipse.core.LOG_LEVEL" value="INFO"/>
<booleanAttribute key="com.google.gwt.eclipse.core.SUPERDEVMODE_ENABLED" value="true"/>
<stringAttribute key="com.google.gwt.eclipse.core.URL" value="/gwt/Home.html"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
@@ -72,7 +73,7 @@
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.DevMode"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-superDevMode -incremental -war &quot;${project_loc:com.sap.sailing.gwt.ui}&quot; -noserver -remoteUI &quot;${gwt_remote_ui_server_port}:${unique_id}&quot; -logLevel INFO -codeServerPort auto -startupUrl /gwt/Home.html com.sap.sailing.gwt.Home -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/PolarSheets.html com.sap.sailing.gwt.ui.PolarSheets -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.regattaoverview.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/VideoPopup.html com.sap.sailing.gwt.ui.VideoPopup com.sap.sailing.gwt.AutoPlay com.sap.sailing.gwt.ui.YoutubePopup com.sap.sailing.gwt.ui.Simulator com.sap.sailing.gwt.ui.Leaderboard com.sap.sailing.gwt.ui.PolarSheets com.sap.sailing.gwt.regattaoverview.RegattaOverview com.sap.sailing.gwt.ui.Spectator com.sap.sailing.gwt.ui.AdminConsole com.sap.sailing.gwt.ui.LeaderboardEditing com.sap.sailing.gwt.ui.DataMining com.sap.sailing.gwt.Home com.sap.sailing.gwt.ui.RaceBoard com.sap.sailing.gwt.regattaoverview.RegattaOverview"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-superDevMode -incremental -war &quot;${project_loc:com.sap.sailing.gwt.ui}&quot; -noserver -remoteUI &quot;${gwt_remote_ui_server_port}:${unique_id}&quot; -logLevel INFO -codeServerPort auto -startupUrl /gwt/Home.html com.sap.sailing.gwt.home.Mobile -startupUrl /gwt/HomeDesktop.html com.sap.sailing.gwt.home.Desktop -startupUrl /gwt/AdminConsole.html com.sap.sailing.gwt.ui.AdminConsole -startupUrl /gwt/LeaderboardEditing.html com.sap.sailing.gwt.ui.LeaderboardEditing -startupUrl /gwt/Leaderboard.html com.sap.sailing.gwt.ui.Leaderboard -startupUrl /gwt/Spectator.html com.sap.sailing.gwt.ui.Spectator -startupUrl /gwt/RaceBoard.html com.sap.sailing.gwt.ui.RaceBoard -startupUrl /gwt/PolarSheets.html com.sap.sailing.gwt.ui.PolarSheets -startupUrl /gwt/RegattaOverview.html com.sap.sailing.gwt.regattaoverview.RegattaOverview -startupUrl /gwt/DataMining.html com.sap.sailing.gwt.ui.DataMining -startupUrl /gwt/Simulator.html com.sap.sailing.gwt.ui.Simulator -startupUrl /gwt/VideoPopup.html com.sap.sailing.gwt.ui.VideoPopup com.sap.sailing.gwt.home.Desktop com.sap.sailing.gwt.home.Mobile com.sap.sailing.gwt.ui.AdminConsole com.sap.sailing.gwt.AutoPlay com.sap.sailing.gwt.ui.YoutubePopup com.sap.sailing.gwt.ui.Simulator com.sap.sailing.gwt.ui.Leaderboard com.sap.sailing.gwt.ui.PolarSheets com.sap.sailing.gwt.regattaoverview.RegattaOverview com.sap.sailing.gwt.ui.Spectator com.sap.sailing.gwt.ui.LeaderboardEditing com.sap.sailing.gwt.ui.DataMining com.sap.sailing.gwt.ui.RaceBoard"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.gwt.ui"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms1024m -Xmx3072m"/>
</launchConfiguration>
@@ -1,11 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
<classpathentry exported="true" kind="lib" path="libs/drag-sort-listview-0.6.1-SNAPSHOT.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.json.simple"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="tests-jvm/src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
<classpathentry exported="true" kind="lib" path="libs/drag-sort-listview-0.6.1-SNAPSHOT.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.json.simple"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/com.sap.sailing.racecommittee.app/tests-jvm/src/com/sap/sailing/racecommittee/app/domain/impl/SimpleRaceIdentifierEscapingTest.java"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="1"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry containerPath=&quot;org.eclipse.jdt.launching.JRE_CONTAINER&quot; path=&quot;1&quot; type=&quot;4&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry containerPath=&quot;com.android.ide.eclipse.adt.ANDROID_FRAMEWORK&quot; javaProject=&quot;com.sap.sailing.racecommittee.app&quot; path=&quot;1&quot; type=&quot;4&quot;/&gt;&#13;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.defaultClasspath&quot;&gt;&#13;&#10;&lt;memento exportedEntriesOnly=&quot;false&quot; project=&quot;com.sap.sailing.racecommittee.app&quot;/&gt;&#13;&#10;&lt;/runtimeClasspathEntry&gt;&#13;&#10;"/>
</listAttribute>
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.sap.sailing.racecommittee.app.domain.impl.SimpleRaceIdentifierEscapingTest"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.racecommittee.app"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea"/>
</launchConfiguration>
@@ -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"
}
}
@@ -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();
}
@@ -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
* <code>FleetIfentifierImpl</code>.
*
* @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<String, String, String> 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();
}
}