From e9e1e084da79ba653020a5153fc18a8cbc34a436 Mon Sep 17 00:00:00 2001 From: Pascal Hartig Date: Mon, 22 May 2017 10:04:34 -0700 Subject: [PATCH] Enable unit tests with Gradle Summary: This adds the same logic that we have in place with Litho for Yoga, allowing unit tests to run with Gradle for Yoga. It'll still shell out to Buck to build the native library, but that's hopefully only until we have found a way to reuse the NDK build. For CI this shouldn't matter as we want to run `buck build` anyway and the build step should be a no-op. FB-Only: This should unlock D5020044. Reviewed By: emilsjolander Differential Revision: D5104154 fbshipit-source-id: 48732fff6c1d100a155452f675de343aaf06427b --- build.gradle | 27 +++++++++++++++++++++++++++ java/build.gradle | 6 +++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index bc4f8ad5..424f590d 100644 --- a/build.gradle +++ b/build.gradle @@ -30,6 +30,33 @@ ext { targetCompatibilityVersion = JavaVersion.VERSION_1_7 } +// If you have an idea on how to avoid this, please get in touch or +// answer https://stackoverflow.com/questions/43867014/how-to-use-the-gradle-ndk-build-to-compile-for-the-host-machine. +task copyNativeLibs(type: Copy, dependsOn: ':buckBuildNative') { + from "${rootDir}/buck-out/gen/java/tests#default,shared-library-symlink-tree/" + include '*.so' + include '*.dylib' + into "$buildDir/jniLibs" +} + +task buckBuildNative(type: Exec) { + workingDir rootDir + environment BUCKVERSION: 'last' + commandLine 'buck', 'build', '//java/...' +} + +allprojects { + afterEvaluate { + tasks.withType(Test) { + dependsOn copyNativeLibs + def libDir = "${rootDir}/build/jniLibs" + systemProperty 'java.library.path', libDir + environment 'LD_LIBRARY_PATH', libDir + environment 'DYLD_LIBRARY_PATH', libDir + } + } +} + task clean(type: Delete) { delete rootProject.buildDir } diff --git a/java/build.gradle b/java/build.gradle index 998f57c8..2222e8c3 100644 --- a/java/build.gradle +++ b/java/build.gradle @@ -41,7 +41,10 @@ android { java.srcDir 'com' manifest.srcFile 'AndroidManifest.xml' res.srcDirs = ['res'] - jniLibs.srcDirs = ['build/buck-out/jniLibs'] + } + + test { + java.srcDirs 'tests' } } } @@ -50,6 +53,7 @@ dependencies { compile 'com.google.code.findbugs:jsr305:3.0.1' compile 'com.facebook.soloader:soloader:0.2.0' provided project(':yoga:proguard-annotations') + testCompile 'junit:junit:4.12' } task sourcesJar(type: Jar) {