Add native tests for Android binding code.
Bug: None
Change-Id: I83c589205dfbe91686a8cc6512dd03d00936598d
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/207555
Reviewed-by: Alex Benton <bentonian@google.com>
Commit-Queue: Alex Benton <bentonian@google.com>
diff --git a/tools/android/webgpu/build.gradle b/tools/android/webgpu/build.gradle
index 8d6ea0a..4c11d52 100644
--- a/tools/android/webgpu/build.gradle
+++ b/tools/android/webgpu/build.gradle
@@ -29,6 +29,7 @@
id 'com.android.library'
id 'maven-publish'
id 'org.jetbrains.kotlin.android'
+ id 'com.android.application' apply false
}
android {
@@ -41,25 +42,26 @@
cmake {
arguments '-DANDROID_STL=c++_shared'
version '3.22.1'
- targets 'webgpu_c_bundled'
+ targets 'webgpu_c_bundled', 'webgpu_wrapper_tests'
}
}
}
-
externalNativeBuild {
cmake {
path file('src/main/cpp/CMakeLists.txt')
}
}
-
buildFeatures {
+ prefab true
prefabPublishing true
}
-
prefab {
webgpu_c_bundled {
headers "src/main/cpp/gen/include"
}
+ webgpu_wrapper_tests {
+ name "webgpu_wrapper_tests"
+ }
}
kotlinOptions {
jvmTarget = '17'
@@ -75,11 +77,19 @@
java.srcDirs += "$project.projectDir/../../../out/Debug/gen/java"
}
}
+ packagingOptions {
+ pickFirst 'lib/x86/libc++_shared.so'
+ pickFirst 'lib/x86_64/libc++_shared.so'
+ pickFirst 'lib/armeabi-v7a/libc++_shared.so'
+ pickFirst 'lib/arm64-v8a/libc++_shared.so'
+ }
ndkVersion '27.0.12077973'
}
dependencies {
implementation 'androidx.core:core-ktx:1.13.1'
+ implementation 'androidx.test.ext:junit-gtest:1.0.0-alpha01'
+ implementation 'com.android.ndk.thirdparty:googletest:1.11.0-beta-1'
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.reflections:reflections:0.10.2'
diff --git a/tools/android/webgpu/src/androidTest/cpp/webgpu_wrapper_tests.cpp b/tools/android/webgpu/src/androidTest/cpp/webgpu_wrapper_tests.cpp
new file mode 100644
index 0000000..fb70c69
--- /dev/null
+++ b/tools/android/webgpu/src/androidTest/cpp/webgpu_wrapper_tests.cpp
@@ -0,0 +1,45 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include <functional>
+#include <optional>
+#include <ostream>
+#include <queue>
+#include <thread>
+#include <vector>
+
+#include "gtest/gtest.h"
+
+/**
+ * The test suite class for the WebGPU wrapper native code.
+ *
+ * The unit tests are implemented using the GTest framework
+ * and called via Android Instrumented Test mechanism from gradle.
+ */
+class WebGPUWrapperTestSuite : public ::testing::Test {
+ protected:
+};
diff --git a/tools/android/webgpu/src/androidTest/java/android/dawn/NativeTests.kt b/tools/android/webgpu/src/androidTest/java/android/dawn/NativeTests.kt
new file mode 100644
index 0000000..0468d0b
--- /dev/null
+++ b/tools/android/webgpu/src/androidTest/java/android/dawn/NativeTests.kt
@@ -0,0 +1,13 @@
+package android.dawn
+
+import androidx.test.ext.junitgtest.GtestRunner;
+import androidx.test.ext.junitgtest.TargetLibrary;
+import org.junit.runner.RunWith;
+
+/**
+ * Runs the native tests. No implmentation is needed in Kotlin.
+ * The tests are defined in the 'webgpu_wrapper_tests' native library.
+ */
+@RunWith(GtestRunner.class)
+@TargetLibrary(libraryName = "webgpu_wrapper_tests")
+public class NativeTests
\ No newline at end of file
diff --git a/tools/android/webgpu/src/main/cpp/CMakeLists.txt b/tools/android/webgpu/src/main/cpp/CMakeLists.txt
index 8c875e4..56a239c 100644
--- a/tools/android/webgpu/src/main/cpp/CMakeLists.txt
+++ b/tools/android/webgpu/src/main/cpp/CMakeLists.txt
@@ -66,3 +66,21 @@
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/dawn/gen/include/dawn/webgpu.h
${CMAKE_SOURCE_DIR}/gen/include/dawn/webgpu.h)
+
+# Add unit test build configuration
+# To run use the following command:
+# ./gradlew -i connectedAndroidTest
+find_package(googletest REQUIRED CONFIG)
+find_package(junit-gtest REQUIRED CONFIG)
+add_library(webgpu_wrapper_tests SHARED ./../../androidTest/cpp/webgpu_wrapper_tests.cpp)
+target_include_directories(webgpu_wrapper_tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
+target_link_libraries(webgpu_wrapper_tests
+ PRIVATE
+ webgpu_c_bundled
+ android
+ atomic
+ log
+ googletest::gtest
+ googletest::gmock
+ junit-gtest::junit-gtest
+)