diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b2332861165bb74aa86a619ebc52a1ef9959ab1b..7aa729903123e0cbc550b44890c5a8809922f4dc 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,8 +6,19 @@ cache: - .gradle/caches before_script: + - set -e - export GRADLE_USER_HOME=$PWD/.gradle - - echo y | /opt/android-sdk/tools/bin/sdkmanager "build-tools;23.0.3" + # Install the Android support repository + # TODO: Remove this when we upgrade the support library + - echo y | /opt/android-sdk/tools/bin/sdkmanager 'extras;android;m2repository' + # Download OpenJDK 6 so we can compile against its standard library + - JDK_FILE=openjdk-6-jre-headless_6b38-1.13.10-1~deb7u1_amd64.deb + - if [ ! -d openjdk ] + - then + - wget -q http://ftp.uk.debian.org/debian/pool/main/o/openjdk-6/$JDK_FILE + - dpkg-deb -x $JDK_FILE openjdk + - fi + - export JAVA_6_HOME=$PWD/openjdk/usr/lib/jvm/java-6-openjdk-amd64 test: script: diff --git a/bramble-android/build.gradle b/bramble-android/build.gradle index 95c19866b5714a55ce61381cd523b3ab67148b47..a36d5a2c3d006e935f04f553b58d86315a15608a 100644 --- a/bramble-android/build.gradle +++ b/bramble-android/build.gradle @@ -6,8 +6,8 @@ apply plugin: 'witness' apply plugin: 'de.undercouch.download' android { - compileSdkVersion 23 - buildToolsVersion '25.0.0' + compileSdkVersion 26 + buildToolsVersion '26.0.2' defaultConfig { minSdkVersion 14 @@ -18,14 +18,17 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { compile project(path: ':bramble-core', configuration: 'default') compile fileTree(dir: 'libs', include: '*.jar') + + annotationProcessor 'com.google.dagger:dagger-compiler:2.0.2' + provided 'javax.annotation:jsr250-api:1.0' } diff --git a/bramble-api/build.gradle b/bramble-api/build.gradle index f1d0018e602664d0727c51f89bec899f25c6d102..7b03f5c18869fbec6f3cb67dfecfefedc322bcec 100644 --- a/bramble-api/build.gradle +++ b/bramble-api/build.gradle @@ -1,12 +1,11 @@ apply plugin: 'java' -sourceCompatibility = 1.6 -targetCompatibility = 1.6 +sourceCompatibility = 1.8 +targetCompatibility = 1.8 apply plugin: 'witness' dependencies { compile "com.google.dagger:dagger:2.0.2" - compile 'com.google.dagger:dagger-compiler:2.0.2' compile 'com.google.code.findbugs:jsr305:3.0.2' testCompile 'junit:junit:4.12' @@ -20,11 +19,8 @@ dependencies { dependencyVerification { verify = [ 'com.google.dagger:dagger:84c0282ed8be73a29e0475d639da030b55dee72369e58dd35ae7d4fe6243dcf9', - 'com.google.dagger:dagger-compiler:b74bc9de063dd4c6400b232231f2ef5056145b8fbecbf5382012007dd1c071b3', 'com.google.code.findbugs:jsr305:766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7', 'javax.inject:javax.inject:91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff', - 'com.google.dagger:dagger-producers:99ec15e8a0507ba569e7655bc1165ee5e5ca5aa914b3c8f7e2c2458f724edd6b', - 'com.google.guava:guava:d664fbfc03d2e5ce9cab2a44fb01f1d0bf9dfebeccc1a473b1f9ea31f79f6f99', ] } @@ -39,3 +35,8 @@ task jarTest(type: Jar, dependsOn: testClasses) { artifacts { testOutput jarTest } + +// If a Java 6 JRE is available, check we're not using any Java 7 or 8 APIs +tasks.withType(JavaCompile) { + useJava6StandardLibrary(it) +} diff --git a/bramble-core/build.gradle b/bramble-core/build.gradle index dfe194a316e57651fe2f2717243a28609558927c..324947821de08c852c3e62026dca211f5da32ebb 100644 --- a/bramble-core/build.gradle +++ b/bramble-core/build.gradle @@ -1,12 +1,9 @@ -plugins { - id 'java' - id 'net.ltgt.apt' version '0.9' - id 'idea' -} - -sourceCompatibility = 1.6 -targetCompatibility = 1.6 +apply plugin: 'java' +sourceCompatibility = 1.8 +targetCompatibility = 1.8 +apply plugin: 'net.ltgt.apt' +apply plugin: 'idea' apply plugin: 'witness' dependencies { @@ -15,7 +12,11 @@ dependencies { compile 'com.h2database:h2:1.4.192' // This is the last version that supports Java 1.6 compile 'org.bitlet:weupnp:0.1.4' + apt 'com.google.dagger:dagger-compiler:2.0.2' + testCompile project(path: ':bramble-api', configuration: 'testOutput') + + testApt 'com.google.dagger:dagger-compiler:2.0.2' } dependencyVerification { @@ -37,3 +38,8 @@ task jarTest(type: Jar, dependsOn: testClasses) { artifacts { testOutput jarTest } + +// If a Java 6 JRE is available, check we're not using any Java 7 or 8 APIs +tasks.withType(JavaCompile) { + useJava6StandardLibrary(it) +} diff --git a/bramble-j2se/build.gradle b/bramble-j2se/build.gradle index 5b3cf67866c1cee49fdd14b8045e92a23642a119..f920589eb2ba378bb737fdd892540523e85efec1 100644 --- a/bramble-j2se/build.gradle +++ b/bramble-j2se/build.gradle @@ -1,7 +1,9 @@ apply plugin: 'java' -sourceCompatibility = 1.7 -targetCompatibility = 1.7 +sourceCompatibility = 1.8 +targetCompatibility = 1.8 +apply plugin: 'net.ltgt.apt' +apply plugin: 'idea' apply plugin: 'witness' dependencies { @@ -10,6 +12,8 @@ dependencies { compile 'net.java.dev.jna:jna:4.4.0' compile 'net.java.dev.jna:jna-platform:4.4.0' + apt 'com.google.dagger:dagger-compiler:2.0.2' + testCompile project(path: ':bramble-core', configuration: 'testOutput') } diff --git a/briar-android/build.gradle b/briar-android/build.gradle index 409de97f17e76d64d50720a1bde572e8d00ccced..274598674bb676ce1c4be4e4ed3499bd3f11983d 100644 --- a/briar-android/build.gradle +++ b/briar-android/build.gradle @@ -2,9 +2,11 @@ apply plugin: 'com.android.application' apply plugin: 'witness' dependencies { - def supportVersion = '23.2.1' compile project(path: ':briar-core', configuration: 'default') + compile project(path: ':bramble-core', configuration: 'default') compile project(path: ':bramble-android', configuration: 'default') + + def supportVersion = '23.2.1' compile "com.android.support:support-v4:$supportVersion" compile("com.android.support:appcompat-v7:$supportVersion") { exclude module: 'support-v4' @@ -23,6 +25,7 @@ dependencies { exclude module: 'support-v4' exclude module: 'support-annotations' } + compile 'info.guardianproject.panic:panic:0.5' compile 'info.guardianproject.trustedintents:trustedintents:0.2' compile 'de.hdodenhof:circleimageview:2.1.0' @@ -31,10 +34,12 @@ dependencies { compile 'com.github.bumptech.glide:glide:3.8.0' compile 'uk.co.samuelwall:material-tap-target-prompt:1.9.2' + annotationProcessor 'com.google.dagger:dagger-compiler:2.0.2' + provided 'javax.annotation:jsr250-api:1.0' testCompile project(path: ':bramble-core', configuration: 'testOutput') - testCompile 'org.robolectric:robolectric:3.0' + testCompile 'org.robolectric:robolectric:3.5.1' testCompile 'org.robolectric:shadows-support-v4:3.0' testCompile 'org.mockito:mockito-core:2.8.9' } @@ -76,8 +81,8 @@ def getGitHash = { -> } android { - compileSdkVersion 23 - buildToolsVersion '25.0.0' + compileSdkVersion 26 + buildToolsVersion '26.0.2' defaultConfig { minSdkVersion 14 @@ -107,8 +112,14 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + testOptions { + unitTests { + includeAndroidResources = true + } } aaptOptions { diff --git a/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java b/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java index 68c362b6f952f71602dec392257707370f9a1500..cee3b710f0c283f74cc146f10f5539c6e5404bc0 100644 --- a/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java +++ b/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java @@ -9,7 +9,6 @@ import org.briarproject.bramble.api.identity.Author; import org.briarproject.bramble.api.identity.AuthorId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.bramble.test.TestUtils; -import org.briarproject.briar.BuildConfig; import org.briarproject.briar.android.TestBriarApplication; import org.briarproject.briar.android.controller.handler.UiResultExceptionHandler; import org.briarproject.briar.android.threaded.ThreadItemAdapter; @@ -22,7 +21,7 @@ import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; -import org.robolectric.RobolectricGradleTestRunner; +import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import java.util.Arrays; @@ -34,9 +33,8 @@ import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_PUBLIC_K import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -@RunWith(RobolectricGradleTestRunner.class) -@Config(constants = BuildConfig.class, sdk = 21, - application = TestBriarApplication.class, +@RunWith(RobolectricTestRunner.class) +@Config(sdk = 21, application = TestBriarApplication.class, packageName = "org.briarproject.briar") public class ForumActivityTest { @@ -89,8 +87,8 @@ public class ForumActivityTest { MockitoAnnotations.initMocks(this); Intent intent = new Intent(); intent.putExtra("briar.GROUP_ID", TestUtils.getRandomId()); - forumActivity = Robolectric.buildActivity(TestForumActivity.class) - .withIntent(intent).create().start().resume().get(); + forumActivity = Robolectric.buildActivity(TestForumActivity.class, + intent).create().start().resume().get(); } private ThreadItemList<ForumItem> getDummyData() { diff --git a/briar-android/src/test/java/org/briarproject/briar/android/login/ChangePasswordActivityTest.java b/briar-android/src/test/java/org/briarproject/briar/android/login/ChangePasswordActivityTest.java index a3eca5c2383a4db0a57228792bb372f3368e6e36..852624f79ebd64af2b70642877624db4d352bf86 100644 --- a/briar-android/src/test/java/org/briarproject/briar/android/login/ChangePasswordActivityTest.java +++ b/briar-android/src/test/java/org/briarproject/briar/android/login/ChangePasswordActivityTest.java @@ -4,7 +4,6 @@ import android.support.design.widget.TextInputLayout; import android.widget.Button; import android.widget.EditText; -import org.briarproject.briar.BuildConfig; import org.briarproject.briar.R; import org.briarproject.briar.android.TestBriarApplication; import org.briarproject.briar.android.controller.handler.ResultHandler; @@ -18,7 +17,7 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; -import org.robolectric.RobolectricGradleTestRunner; +import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import static junit.framework.Assert.assertEquals; @@ -33,9 +32,8 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -@RunWith(RobolectricGradleTestRunner.class) -@Config(constants = BuildConfig.class, sdk = 21, - application = TestBriarApplication.class, +@RunWith(RobolectricTestRunner.class) +@Config(sdk = 21, application = TestBriarApplication.class, packageName = "org.briarproject.briar") public class ChangePasswordActivityTest { diff --git a/briar-android/src/test/java/org/briarproject/briar/android/login/PasswordFragmentTest.java b/briar-android/src/test/java/org/briarproject/briar/android/login/PasswordFragmentTest.java index 21355f07f1787c80df751e7191f7bb7f2fbad5de..7e13211a42ea09f4fe0ebd704e293745d1d33ee3 100644 --- a/briar-android/src/test/java/org/briarproject/briar/android/login/PasswordFragmentTest.java +++ b/briar-android/src/test/java/org/briarproject/briar/android/login/PasswordFragmentTest.java @@ -5,7 +5,6 @@ import android.view.View; import android.widget.Button; import android.widget.EditText; -import org.briarproject.briar.BuildConfig; import org.briarproject.briar.R; import org.briarproject.briar.android.TestBriarApplication; import org.junit.Before; @@ -13,7 +12,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricGradleTestRunner; +import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import static junit.framework.Assert.assertEquals; @@ -28,9 +27,8 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.robolectric.shadows.support.v4.SupportFragmentTestUtil.startFragment; -@RunWith(RobolectricGradleTestRunner.class) -@Config(constants = BuildConfig.class, sdk = 21, - application = TestBriarApplication.class, +@RunWith(RobolectricTestRunner.class) +@Config(sdk = 21, application = TestBriarApplication.class, packageName = "org.briarproject.briar") public class PasswordFragmentTest { diff --git a/briar-android/src/test/java/org/briarproject/briar/android/login/SetupActivityTest.java b/briar-android/src/test/java/org/briarproject/briar/android/login/SetupActivityTest.java index bf911b3fee662715170c064d7d09a9be225447fa..3f25509033d6c28b2d54624490c69001dd8e6ae8 100644 --- a/briar-android/src/test/java/org/briarproject/briar/android/login/SetupActivityTest.java +++ b/briar-android/src/test/java/org/briarproject/briar/android/login/SetupActivityTest.java @@ -3,10 +3,6 @@ package org.briarproject.briar.android.login; import android.support.design.widget.TextInputLayout; import android.widget.EditText; -import com.google.common.base.Strings; - -import org.briarproject.bramble.api.identity.AuthorConstants; -import org.briarproject.briar.BuildConfig; import org.briarproject.briar.R; import org.briarproject.briar.android.TestBriarApplication; import org.junit.Assert; @@ -15,14 +11,29 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; -import org.robolectric.RobolectricGradleTestRunner; +import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import static junit.framework.Assert.assertEquals; - -@RunWith(RobolectricGradleTestRunner.class) -@Config(constants = BuildConfig.class, sdk = 21, - application = TestBriarApplication.class, +import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.NONE; +import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.QUITE_STRONG; +import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.QUITE_WEAK; +import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.STRONG; +import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.WEAK; +import static org.briarproject.bramble.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH; +import static org.briarproject.bramble.util.StringUtils.getRandomString; +import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.timeout; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.robolectric.Shadows.shadowOf; + +@RunWith(RobolectricTestRunner.class) +@Config(sdk = 21, application = TestBriarApplication.class, packageName = "org.briarproject.briar") public class SetupActivityTest { @@ -43,9 +54,7 @@ public class SetupActivityTest { @Test public void testNicknameUI() { Assert.assertNotNull(setupActivity); - String longNick = - Strings.padEnd("*", AuthorConstants.MAX_AUTHOR_NAME_LENGTH + 1, - '*'); + String longNick = getRandomString(MAX_AUTHOR_NAME_LENGTH + 1); nicknameEntry.setText(longNick); // Nickname should be too long assertEquals(nicknameEntryWrapper.getError(), diff --git a/briar-api/build.gradle b/briar-api/build.gradle index 2c957a64520e5707072beb2326d6d4e6239a2624..0c6e6e1d76eb9f2fb09e49380b7f13ce8f83945b 100644 --- a/briar-api/build.gradle +++ b/briar-api/build.gradle @@ -1,9 +1,12 @@ apply plugin: 'java' -sourceCompatibility = 1.6 -targetCompatibility = 1.6 - -apply plugin: 'witness' +sourceCompatibility = 1.8 +targetCompatibility = 1.8 dependencies { compile project(path: ':bramble-api', configuration: 'default') } + +// If a Java 6 JRE is available, check we're not using any Java 7 or 8 APIs +tasks.withType(JavaCompile) { + useJava6StandardLibrary(it) +} diff --git a/briar-core/build.gradle b/briar-core/build.gradle index 8976d7e3a5694c7a0b0ae693baea003cb94522db..a4dddb5a2a42283349038d3849544f0a21fefb4d 100644 --- a/briar-core/build.gradle +++ b/briar-core/build.gradle @@ -1,12 +1,9 @@ -plugins { - id 'java' - id 'net.ltgt.apt' version '0.9' - id 'idea' -} - -sourceCompatibility = 1.6 -targetCompatibility = 1.6 +apply plugin: 'java' +sourceCompatibility = 1.8 +targetCompatibility = 1.8 +apply plugin: 'net.ltgt.apt' +apply plugin: 'idea' apply plugin: 'witness' dependencies { @@ -16,10 +13,14 @@ dependencies { compile 'com.squareup.okhttp3:okhttp:3.8.0' compile 'org.jsoup:jsoup:1.10.3' + apt 'com.google.dagger:dagger-compiler:2.0.2' + testCompile project(path: ':bramble-core', configuration: 'default') testCompile project(path: ':bramble-core', configuration: 'testOutput') testCompile project(path: ':bramble-api', configuration: 'testOutput') testCompile 'net.jodah:concurrentunit:0.4.2' + + testApt 'com.google.dagger:dagger-compiler:2.0.2' } dependencyVerification { @@ -32,3 +33,8 @@ dependencyVerification { 'com.squareup.okio:okio:734269c3ebc5090e3b23566db558f421f0b4027277c79ad5d176b8ec168bb850', ] } + +// If a Java 6 JRE is available, check we're not using any Java 7 or 8 APIs +tasks.withType(JavaCompile) { + useJava6StandardLibrary(it) +} diff --git a/briar.iml b/briar.iml index f2d23be9ad067708f8f34ce21f694a1d84d25d4a..8ebfdb126c2c2c91606f43061a0f3ff738fc99e1 100644 --- a/briar.iml +++ b/briar.iml @@ -8,7 +8,7 @@ </configuration> </facet> </component> - <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true"> + <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8" inherit-compiler-output="true"> <exclude-output /> <content url="file://$MODULE_DIR$"> <excludeFolder url="file://$MODULE_DIR$/.gradle" /> diff --git a/build.gradle b/build.gradle index 80632d5ebffb55db43f052f6cdf8fe0c4ea3fbe9..24e8f774ed479072e5058159963963db74d690bc 100644 --- a/build.gradle +++ b/build.gradle @@ -14,12 +14,40 @@ buildscript { repositories { jcenter() mavenLocal() + maven { + url "https://plugins.gradle.org/m2/" + } + google() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' - classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' + classpath 'com.android.tools.build:gradle:3.0.0' + classpath 'net.ltgt.gradle:gradle-apt-plugin:0.9' classpath 'de.undercouch:gradle-download-task:3.2.0' classpath files('libs/gradle-witness.jar') } } + +// If a Java 6 JRE is available, check we're not using any Java 7 or 8 APIs +ext.useJava6StandardLibrary = { task -> + def home = System.env.JAVA_6_HOME; + if (home != null && !home.isEmpty()) { + println "Setting Java 6 bootstrap classpath for ${task.name}" + task.dependsOn createJavaLangInvokeJar + task.options.bootstrapClasspath = files( + "${project.rootDir}/build/invoke.jar", + "${home}/jre/lib/rt.jar", + "${home}/jre/lib/jsse.jar" + ) + } +} + +// Create a jar containing the java.lang.invoke classes for the Java 6 bootstrap classpath +task createJavaLangInvokeJar(type: Zip) { + archiveName 'invoke.jar' + destinationDir file("${project.rootDir}/build") + from zipTree("${System.getProperty('java.home')}/lib/rt.jar").matching { + include 'java/lang/invoke/*' + } + include '**/*' +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d7d07763bb3b4e48ee40f5ec75c02af3a66a1d97..0070afbd16ef14014584fbbddcc829c396d21efb 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,6 @@ -#Wed Aug 24 10:55:42 BST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-all.zip -distributionSha256Sum=d84bf6b6113da081d0082bcb63bd8547824c6967fe68704d1e3a6fde822b7212 +distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-all.zip +distributionSha256Sum=c5b67330a8a211539d713852c56a6a80fdea365d8902df92d1759d913d18fa2d diff --git a/settings.gradle b/settings.gradle index de661574c253874536c6bd89b1366fc568f62bd0..3f3670622d0acfba7ef41fb6a026608542f8379e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,5 +1,6 @@ -include ':bramble-api', ':bramble-android' +include ':bramble-api' include ':bramble-core' +include ':bramble-android' include ':bramble-j2se' include ':briar-api' include ':briar-core'