diff --git a/tests/common.TestCase b/tests/common.TestCase index 35bc01e1..3b4cc5e9 100755 --- a/tests/common.TestCase +++ b/tests/common.TestCase @@ -655,6 +655,45 @@ class CommonTest(unittest.TestCase): self.assertEqual(('1.23.1', '245', 'eu.siacs.conversations'), fdroidserver.common.parse_androidmanifests(paths, app)) + app = fdroidserver.metadata.App() + build = fdroidserver.metadata.Build() + build.gradle = ['generic'] + app.builds = [build] + app.id = 'com.nextcloud.client' + paths = [ + os.path.join(source_files_dir, 'com.nextcloud.client', 'build.gradle'), + ] + for path in paths: + self.assertTrue(os.path.isfile(path)) + self.assertEqual(('2.0.0', '20000099', 'com.nextcloud.client'), + fdroidserver.common.parse_androidmanifests(paths, app)) + + app = fdroidserver.metadata.App() + build = fdroidserver.metadata.Build() + build.gradle = ['versionDev'] + app.builds = [build] + app.id = 'com.nextcloud.android.beta' + paths = [ + os.path.join(source_files_dir, 'com.nextcloud.client', 'build.gradle'), + ] + for path in paths: + self.assertTrue(os.path.isfile(path)) + self.assertEqual(('20171223', '20171223', 'com.nextcloud.android.beta'), + fdroidserver.common.parse_androidmanifests(paths, app)) + + app = fdroidserver.metadata.App() + build = fdroidserver.metadata.Build() + build.gradle = ['standard'] + app.builds = [build] + app.id = 'at.bitfire.davdroid' + paths = [ + os.path.join(source_files_dir, 'at.bitfire.davdroid', 'build.gradle'), + ] + for path in paths: + self.assertTrue(os.path.isfile(path)) + self.assertEqual(('1.9.8.1-ose', '197', 'at.bitfire.davdroid'), + fdroidserver.common.parse_androidmanifests(paths, app)) + if __name__ == "__main__": parser = optparse.OptionParser() diff --git a/tests/source-files/at.bitfire.davdroid/build.gradle b/tests/source-files/at.bitfire.davdroid/build.gradle new file mode 100644 index 00000000..5bac8b01 --- /dev/null +++ b/tests/source-files/at.bitfire.davdroid/build.gradle @@ -0,0 +1,108 @@ +/* + * Copyright (c) Ricki Hirner (bitfire web engineering). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + */ + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' +apply plugin: 'org.jetbrains.dokka-android' + +android { + compileSdkVersion 27 + buildToolsVersion '27.0.1' + + defaultConfig { + applicationId "at.bitfire.davdroid" + + versionCode 197 + buildConfigField "long", "buildTime", System.currentTimeMillis() + "L" + buildConfigField "boolean", "customCerts", "true" + + minSdkVersion 19 // Android 4.4 + targetSdkVersion 27 // Android 8.1 + + // when using this, make sure that notification icons are real bitmaps + vectorDrawables.useSupportLibrary = true + } + + flavorDimensions "type" + + productFlavors { + standard { + versionName "1.9.8.1-ose" + + buildConfigField "boolean", "customCerts", "true" + buildConfigField "boolean", "customCertsUI", "true" + } + } + + buildTypes { + debug { + minifyEnabled false + } + release { + minifyEnabled true + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' + } + } + + lintOptions { + disable 'GoogleAppIndexingWarning' // we don't need Google indexing, thanks + disable 'ImpliedQuantity', 'MissingQuantity' // quantities from Transifex may vary + disable 'MissingTranslation', 'ExtraTranslation' // translations from Transifex are not always up to date + disable "OnClick" // doesn't recognize Kotlin onClick methods + disable 'Recycle' // doesn't understand Lombok's @Cleanup + disable 'RtlEnabled' + disable 'RtlHardcoded' + disable 'Typos' + } + packagingOptions { + exclude 'META-INF/DEPENDENCIES' + exclude 'META-INF/LICENSE' + } + + defaultConfig { + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } +} + +dependencies { + compile project(':cert4android') + compile project(':dav4android') + compile project(':ical4android') + compile project(':vcard4android') + + compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" + + compile 'com.android.support:appcompat-v7:27.0.2' + compile 'com.android.support:cardview-v7:27.0.2' + compile 'com.android.support:design:27.0.2' + compile 'com.android.support:preference-v14:27.0.2' + + compile 'com.github.yukuku:ambilwarna:2.0.1' + + compile 'com.squareup.okhttp3:logging-interceptor:3.9.1' + compile 'commons-io:commons-io:2.6' + compile 'dnsjava:dnsjava:2.1.8' + compile 'org.apache.commons:commons-lang3:3.6' + compile 'org.apache.commons:commons-collections4:4.1' + + // for tests + //noinspection GradleDynamicVersion + androidTestCompile('com.android.support.test:runner:+') { + exclude group: 'com.android.support', module: 'support-annotations' + } + //noinspection GradleDynamicVersion + androidTestCompile('com.android.support.test:rules:+') { + exclude group: 'com.android.support', module: 'support-annotations' + } + androidTestCompile 'junit:junit:4.12' + androidTestCompile 'com.squareup.okhttp3:mockwebserver:3.9.1' + + testCompile 'junit:junit:4.12' + testCompile 'com.squareup.okhttp3:mockwebserver:3.9.1' +} diff --git a/tests/source-files/com.nextcloud.client/build.gradle b/tests/source-files/com.nextcloud.client/build.gradle new file mode 100644 index 00000000..528f6123 --- /dev/null +++ b/tests/source-files/com.nextcloud.client/build.gradle @@ -0,0 +1,253 @@ +// Gradle build file +// +// This project was started in Eclipse and later moved to Android Studio. In the transition, both IDEs were supported. +// Due to this, the files layout is not the usual in new projects created with Android Studio / gradle. This file +// merges declarations usually split in two separates build.gradle file, one for global settings of the project in +// its root folder, another one for the app module in subfolder of root. + +buildscript { + repositories { + jcenter() + maven { + url 'https://oss.sonatype.org/content/repositories/snapshots/' + } + google() + } + dependencies { + classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.google.gms:google-services:3.0.0' + } +} + +apply plugin: 'com.android.application' +apply plugin: 'checkstyle' +apply plugin: 'pmd' +apply plugin: 'findbugs' + +configurations.all { + // check for updates every build + resolutionStrategy.cacheChangingModulesFor 0, 'seconds' +} + +ext { + supportLibraryVersion = '26.1.0' + googleLibraryVersion = '11.2.2' + + travisBuild = System.getenv("TRAVIS") == "true" + + // allows for -Dpre-dex=false to be set + preDexEnabled = "true".equals(System.getProperty("pre-dex", "true")) +} + +repositories { + jcenter() + maven { url "https://jitpack.io" } + maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' } + google() + + flatDir { + dirs 'libs' + } +} + +android { + lintOptions { + abortOnError false + htmlReport true + htmlOutput file("$project.buildDir/reports/lint/lint.html") + disable 'MissingTranslation' + } + + dexOptions { + javaMaxHeapSize "4g" + } + + compileSdkVersion 26 + buildToolsVersion '26.0.2' + + defaultConfig { + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + // arguments to be passed to functional tests + testInstrumentationRunnerArgument "TEST_USER", "\"$System.env.OCTEST_APP_USERNAME\"" + testInstrumentationRunnerArgument "TEST_PASSWORD", "\"$System.env.OCTEST_APP_PASSWORD\"" + testInstrumentationRunnerArgument "TEST_SERVER_URL", "\"$System.env.OCTEST_SERVER_BASE_URL\"" + + multiDexEnabled true + + versionCode = 20000099 + versionName = "2.0.0" + + // adapt structure from Eclipse to Gradle/Android Studio expectations; + // see http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure + + flavorDimensions "default" + + productFlavors { + // used for f-droid + generic { + applicationId 'com.nextcloud.client' + dimension "default" + } + + gplay { + applicationId 'com.nextcloud.client' + dimension "default" + } + + modified { + // structure is: + // domain tld + // domain name + // .client + applicationId 'com.custom.client' + dimension "default" + } + + versionDev { + applicationId "com.nextcloud.android.beta" + dimension "default" + versionCode 20171223 + versionName "20171223" + } + } + + configurations { + modifiedCompile + } + } + + + // adapt structure from Eclipse to Gradle/Android Studio expectations; + // see http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure + + dexOptions { + // Skip pre-dexing when running on Travis CI or when disabled via -Dpre-dex=false. + preDexLibraries = preDexEnabled && !travisBuild + } + + packagingOptions { + exclude 'META-INF/LICENSE.txt' + exclude 'META-INF/LICENSE' + } + + task checkstyle(type: Checkstyle) { + configFile = file("${rootProject.projectDir}/checkstyle.xml") + configProperties.checkstyleSuppressionsPath = file("${project.rootDir}/config/quality/checkstyle/suppressions.xml").absolutePath + source 'src' + include '**/*.java' + exclude '**/gen/**' + classpath = files() + } + + task pmd(type: Pmd) { + ruleSetFiles = files("${project.rootDir}/pmd-ruleset.xml") + ignoreFailures = false + ruleSets = [] + + source 'src' + include '**/*.java' + exclude '**/gen/**' + + reports { + xml.enabled = false + html.enabled = true + xml { + destination = file("$project.buildDir/reports/pmd/pmd.xml") + } + html { + destination = file("$project.buildDir/reports/pmd/pmd.html") + } + } + } + + task findbugs(type: FindBugs) { + ignoreFailures = false + effort = "max" + reportLevel = "high" + classes = files("$project.buildDir/intermediates/classes") + excludeFilter = new File("${project.rootDir}/findbugs-filter.xml") + source 'src' + include '**/*.java' + exclude '**/gen/**' + + reports { + xml.enabled = false + html.enabled = true + html { + destination = file("$project.buildDir/reports/findbugs/findbugs.html") + } + } + classpath = files() + } + check.dependsOn 'checkstyle', 'findbugs', 'pmd', 'lint' + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + /// dependencies for app building + implementation 'com.android.support:multidex:1.0.2' + implementation 'com.github.nextcloud:android-library:1.0.33' + versionDevImplementation 'com.github.nextcloud:android-library:master-SNAPSHOT' // use always latest master + implementation "com.android.support:support-v4:${supportLibraryVersion}" + implementation "com.android.support:design:${supportLibraryVersion}" + implementation 'com.jakewharton:disklrucache:2.0.2' + implementation "com.android.support:appcompat-v7:${supportLibraryVersion}" + implementation "com.android.support:cardview-v7:${supportLibraryVersion}" + implementation "com.android.support:exifinterface:${supportLibraryVersion}" + implementation 'com.github.tobiasKaminsky:android-floating-action-button:1.10.2' + implementation 'com.github.albfernandez:juniversalchardet:v2.0.0' + implementation 'com.google.code.findbugs:annotations:2.0.1' + implementation 'commons-io:commons-io:2.5' + implementation 'com.github.evernote:android-job:v1.2.0' + implementation 'com.jakewharton:butterknife:8.5.1' + annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' + implementation 'org.greenrobot:eventbus:3.0.0' + implementation 'com.googlecode.ez-vcard:ez-vcard:0.10.2' + implementation 'org.lukhnos:nnio:0.2' + // uncomment for gplay, modified + // implementation "com.google.firebase:firebase-messaging:${googleLibraryVersion}" + // implementation "com.google.android.gms:play-services-base:${googleLibraryVersion}" + // implementation "com.google.android.gms:play-services-gcm:${googleLibraryVersion}" + // implementation "com.google.firebase:firebase-core:${googleLibraryVersion}" + implementation 'org.parceler:parceler-api:1.1.6' + annotationProcessor 'org.parceler:parceler:1.1.6' + implementation 'com.github.bumptech.glide:glide:3.7.0' + implementation 'com.caverock:androidsvg:1.2.1' + implementation "com.android.support:support-annotations:${supportLibraryVersion}" + + /// dependencies for local unit tests + testImplementation 'junit:junit:4.12' + testImplementation 'org.mockito:mockito-core:1.10.19' + /// dependencies for instrumented tests + // JUnit4 Rules + androidTestImplementation 'com.android.support.test:rules:1.0.1' + // Android JUnit Runner + androidTestImplementation 'com.android.support.test:runner:1.0.1' + + // Espresso core + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' + // UIAutomator - for cross-app UI tests, and to grant screen is turned on in Espresso tests + //androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2' + // fix conflict in dependencies; see http://g.co/androidstudio/app-test-app-conflict for details + //androidTestImplementation "com.android.support:support-annotations:${supportLibraryVersion}" + implementation 'org.jetbrains:annotations:15.0' +} + +configurations.all { + resolutionStrategy.cacheChangingModulesFor 0, 'seconds' +} + +tasks.withType(Test) { + /// increased logging for tests + testLogging { + events "passed", "skipped", "failed" + } +} + +// uncomment for gplay, modified (must be at the bottom) +//apply plugin: 'com.google.gms.google-services'