Skip to content
This repository was archived by the owner on Aug 8, 2023. It is now read-only.

Commit c810d16

Browse files
committed
[android][build] core tests - initial setup for rendering tests
1 parent 5ae92de commit c810d16

File tree

15 files changed

+306
-79
lines changed

15 files changed

+306
-79
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,5 @@ xcuserdata
3030
/platform/macos/macos.xcworkspace/xcshareddata/macos.xcscmblueprint
3131
/platform/ios/ios.xcworkspace/xcshareddata/ios.xcscmblueprint
3232
/documentation
33+
test/fixtures/api/assets.zip
34+
test/fixtures/storage/assets.zip

.mason

Submodule .mason updated 330 files

Makefile

+40-4
Original file line numberDiff line numberDiff line change
@@ -467,8 +467,9 @@ test-node: node
467467

468468
#### Android targets ###########################################################
469469

470-
ANDROID_ENV = platform/android/scripts/toolchain.sh
471-
ANDROID_ABIS = arm-v5 arm-v7 arm-v8 x86 x86-64 mips
470+
MBGL_ANDROID_ENV = platform/android/scripts/toolchain.sh
471+
MBGL_ANDROID_ABIS = arm-v5 arm-v7 arm-v8 x86 x86-64 mips
472+
MBGL_ANDROID_LOCAL_WORK_DIR = /data/local/tmp/core-tests
472473

473474
.PHONY: android-style-code
474475
android-style-code:
@@ -481,7 +482,7 @@ build/android-$1/$(BUILDTYPE): $(BUILD_DEPS)
481482
mkdir -p build/android-$1/$(BUILDTYPE)
482483

483484
build/android-$1/$(BUILDTYPE)/toolchain.cmake: platform/android/scripts/toolchain.sh build/android-$1/$(BUILDTYPE)
484-
$(ANDROID_ENV) $1 > build/android-$1/$(BUILDTYPE)/toolchain.cmake
485+
$(MBGL_ANDROID_ENV) $1 > build/android-$1/$(BUILDTYPE)/toolchain.cmake
485486

486487
build/android-$1/$(BUILDTYPE)/Makefile: build/android-$1/$(BUILDTYPE)/toolchain.cmake platform/android/config.cmake
487488
cd build/android-$1/$(BUILDTYPE) && cmake ../../.. -G Ninja \
@@ -490,6 +491,10 @@ build/android-$1/$(BUILDTYPE)/Makefile: build/android-$1/$(BUILDTYPE)/toolchain.
490491
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
491492
-DMBGL_PLATFORM=android
492493

494+
.PHONY: android-test-lib-$1
495+
android-test-lib-$1: build/android-$1/$(BUILDTYPE)/Makefile
496+
$(NINJA) $(NINJA_ARGS) -j$(JOBS) -C build/android-$1/$(BUILDTYPE) mbgl-test-stripped
497+
493498
.PHONY: android-lib-$1
494499
android-lib-$1: build/android-$1/$(BUILDTYPE)/Makefile
495500
$(NINJA) $(NINJA_ARGS) -j$(JOBS) -C build/android-$1/$(BUILDTYPE) all
@@ -498,14 +503,45 @@ android-lib-$1: build/android-$1/$(BUILDTYPE)/Makefile
498503
android-$1: android-lib-$1
499504
cd platform/android && ./gradlew --parallel --max-workers=$(JOBS) assemble$(BUILDTYPE)
500505

506+
run-android-core-test-$1: android-lib-$1 android-test-lib-$1
507+
# Compile main sources and extract the classes (using the test app to get all transitive dependencies in one place)
508+
cd platform/android && ./gradlew assembleDebug
509+
unzip -o platform/android/MapboxGLAndroidSDKTestApp/build/outputs/apk/MapboxGLAndroidSDKTestApp-debug.apk classes.dex -d build/android-$1/$(BUILDTYPE)
510+
511+
#Compile Test runner
512+
find platform/android/src/test -name "*.java" > build/android-$1/$(BUILDTYPE)/java-sources.txt
513+
javac -sourcepath platform/android/src/test -d build/android-$1/$(BUILDTYPE) -source 1.7 -target 1.7 @build/android-$1/$(BUILDTYPE)/java-sources.txt
514+
#Combine and dex
515+
cd build/android-$1/$(BUILDTYPE) && $(ANDROID_HOME)/build-tools/25.0.0/dx --dex --output=test.jar *.class classes.dex
516+
517+
#Ensure clean state on the device
518+
adb shell "rm -Rf $(MBGL_ANDROID_LOCAL_WORK_DIR) && mkdir -p $(MBGL_ANDROID_LOCAL_WORK_DIR)/test"
519+
520+
# Generate zipped asset files
521+
cd test/fixtures/api && zip -r assets.zip assets && cd -
522+
cd test/fixtures/storage && zip -r assets.zip assets && cd -
523+
524+
#Push all needed files to the device
525+
adb push build/android-$1/$(BUILDTYPE)/test.jar $(MBGL_ANDROID_LOCAL_WORK_DIR) > /dev/null 2>&1
526+
adb push test/fixtures $(MBGL_ANDROID_LOCAL_WORK_DIR)/test > /dev/null 2>&1
527+
adb push build/android-$1/$(BUILDTYPE)/stripped/libmapbox-gl.so $(MBGL_ANDROID_LOCAL_WORK_DIR) > /dev/null 2>&1
528+
adb push build/android-$1/$(BUILDTYPE)/stripped/libmbgl-test.so $(MBGL_ANDROID_LOCAL_WORK_DIR) > /dev/null 2>&1
529+
530+
#Kick off the tests
531+
adb shell "export LD_LIBRARY_PATH=/system/lib:$(MBGL_ANDROID_LOCAL_WORK_DIR) && cd $(MBGL_ANDROID_LOCAL_WORK_DIR) && dalvikvm32 -cp $(MBGL_ANDROID_LOCAL_WORK_DIR)/test.jar Main"
532+
533+
#Gather the results
534+
adb shell "cd $(MBGL_ANDROID_LOCAL_WORK_DIR) && tar -cvzf results.tgz test/fixtures/* > /dev/null 2>&1"
535+
adb pull $(MBGL_ANDROID_LOCAL_WORK_DIR)/results.tgz build/android-$1/$(BUILDTYPE)/ > /dev/null 2>&1
536+
501537
.PHONY: run-android-$1
502538
run-android-$1: android-$1
503539
cd platform/android && ./gradlew :MapboxGLAndroidSDKTestApp:installDebug && adb shell am start -n com.mapbox.mapboxsdk.testapp/.activity.FeatureOverviewActivity
504540

505541
apackage: android-lib-$1
506542
endef
507543

508-
$(foreach abi,$(ANDROID_ABIS),$(eval $(call ANDROID_RULES,$(abi))))
544+
$(foreach abi,$(MBGL_ANDROID_ABIS),$(eval $(call ANDROID_RULES,$(abi))))
509545

510546
.PHONY: android
511547
android: android-arm-v7

platform/android/config.cmake

+140-66
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
add_definitions(-DMBGL_USE_GLES2=1)
22

3+
include(cmake/test-files.cmake)
4+
35
#Include to use build specific variables
46
include(${CMAKE_CURRENT_BINARY_DIR}/toolchain.cmake)
57

@@ -15,6 +17,9 @@ mason_use(libpng VERSION 1.6.25)
1517
mason_use(libzip VERSION 1.1.3)
1618
mason_use(nunicode VERSION 1.7.1)
1719
mason_use(sqlite VERSION 3.14.2)
20+
mason_use(gtest VERSION 1.7.0)
21+
22+
## mbgl core ##
1823

1924
macro(mbgl_platform_core)
2025

@@ -52,12 +57,72 @@ macro(mbgl_platform_core)
5257
PRIVATE platform/default/png_reader.cpp
5358
PRIVATE platform/default/jpeg_reader.cpp
5459

55-
# Headless view
56-
# TODO
57-
5860
# Thread pool
5961
PRIVATE platform/default/mbgl/util/default_thread_pool.cpp
60-
PRIVATE platform/default/mbgl/util/default_thread_pool.cpp
62+
PRIVATE platform/default/mbgl/util/default_thread_pool.hpp
63+
64+
# Conversion C++ -> Java
65+
platform/android/src/conversion/constant.hpp
66+
platform/android/src/conversion/conversion.hpp
67+
platform/android/src/style/conversion/function.hpp
68+
platform/android/src/style/conversion/property_value.hpp
69+
platform/android/src/style/conversion/types.hpp
70+
platform/android/src/style/conversion/types_string_values.hpp
71+
72+
# Style conversion Java -> C++
73+
platform/android/src/style/android_conversion.hpp
74+
platform/android/src/style/conversion/geojson.hpp
75+
platform/android/src/style/value.cpp
76+
platform/android/src/style/value.hpp
77+
platform/android/src/style/conversion/url_or_tileset.hpp
78+
79+
# Style
80+
platform/android/src/style/layers/background_layer.cpp
81+
platform/android/src/style/layers/background_layer.hpp
82+
platform/android/src/style/layers/circle_layer.cpp
83+
platform/android/src/style/layers/circle_layer.hpp
84+
platform/android/src/style/layers/custom_layer.cpp
85+
platform/android/src/style/layers/custom_layer.hpp
86+
platform/android/src/style/layers/fill_layer.cpp
87+
platform/android/src/style/layers/fill_layer.hpp
88+
platform/android/src/style/layers/layer.cpp
89+
platform/android/src/style/layers/layer.hpp
90+
platform/android/src/style/layers/layers.cpp
91+
platform/android/src/style/layers/layers.hpp
92+
platform/android/src/style/layers/line_layer.cpp
93+
platform/android/src/style/layers/line_layer.hpp
94+
platform/android/src/style/layers/raster_layer.cpp
95+
platform/android/src/style/layers/raster_layer.hpp
96+
platform/android/src/style/layers/symbol_layer.cpp
97+
platform/android/src/style/layers/symbol_layer.hpp
98+
platform/android/src/style/sources/geojson_source.cpp
99+
platform/android/src/style/sources/geojson_source.hpp
100+
platform/android/src/style/sources/source.cpp
101+
platform/android/src/style/sources/source.hpp
102+
platform/android/src/style/sources/sources.cpp
103+
platform/android/src/style/sources/sources.hpp
104+
platform/android/src/style/sources/raster_source.cpp
105+
platform/android/src/style/sources/raster_source.hpp
106+
platform/android/src/style/sources/vector_source.cpp
107+
platform/android/src/style/sources/vector_source.hpp
108+
109+
# Connectivity
110+
platform/android/src/connectivity_listener.cpp
111+
platform/android/src/connectivity_listener.hpp
112+
113+
# Native map
114+
platform/android/src/native_map_view.cpp
115+
platform/android/src/native_map_view.hpp
116+
117+
# Main jni bindings
118+
platform/android/src/attach_env.cpp
119+
platform/android/src/attach_env.hpp
120+
platform/android/src/java_types.cpp
121+
platform/android/src/java_types.hpp
122+
123+
# Main entry point
124+
platform/android/src/jni.hpp
125+
platform/android/src/jni.cpp
61126
)
62127

63128
target_include_directories(mbgl-core
@@ -71,6 +136,7 @@ macro(mbgl_platform_core)
71136
target_add_mason_package(mbgl-core PUBLIC libzip)
72137
target_add_mason_package(mbgl-core PUBLIC geojson)
73138
target_add_mason_package(mbgl-core PUBLIC jni.hpp)
139+
target_add_mason_package(mbgl-core PUBLIC rapidjson)
74140

75141
target_compile_options(mbgl-core
76142
PRIVATE -fvisibility=hidden
@@ -91,71 +157,12 @@ macro(mbgl_platform_core)
91157
)
92158
endmacro()
93159

160+
## Main library ##
161+
94162
add_library(mapbox-gl SHARED
95-
# Conversion C++ -> Java
96-
platform/android/src/conversion/constant.hpp
97-
platform/android/src/conversion/conversion.hpp
98-
platform/android/src/style/conversion/function.hpp
99-
platform/android/src/style/conversion/property_value.hpp
100-
platform/android/src/style/conversion/types.hpp
101-
platform/android/src/style/conversion/types_string_values.hpp
102-
103-
# Style conversion Java -> C++
104-
platform/android/src/style/android_conversion.hpp
105-
platform/android/src/style/conversion/geojson.hpp
106-
platform/android/src/style/value.cpp
107-
platform/android/src/style/value.hpp
108-
platform/android/src/style/conversion/url_or_tileset.hpp
109-
110-
# Style
111-
platform/android/src/style/layers/background_layer.cpp
112-
platform/android/src/style/layers/background_layer.hpp
113-
platform/android/src/style/layers/circle_layer.cpp
114-
platform/android/src/style/layers/circle_layer.hpp
115-
platform/android/src/style/layers/custom_layer.cpp
116-
platform/android/src/style/layers/custom_layer.hpp
117-
platform/android/src/style/layers/fill_layer.cpp
118-
platform/android/src/style/layers/fill_layer.hpp
119-
platform/android/src/style/layers/layer.cpp
120-
platform/android/src/style/layers/layer.hpp
121-
platform/android/src/style/layers/layers.cpp
122-
platform/android/src/style/layers/layers.hpp
123-
platform/android/src/style/layers/line_layer.cpp
124-
platform/android/src/style/layers/line_layer.hpp
125-
platform/android/src/style/layers/raster_layer.cpp
126-
platform/android/src/style/layers/raster_layer.hpp
127-
platform/android/src/style/layers/symbol_layer.cpp
128-
platform/android/src/style/layers/symbol_layer.hpp
129-
platform/android/src/style/sources/geojson_source.cpp
130-
platform/android/src/style/sources/geojson_source.hpp
131-
platform/android/src/style/sources/source.cpp
132-
platform/android/src/style/sources/source.hpp
133-
platform/android/src/style/sources/sources.cpp
134-
platform/android/src/style/sources/sources.hpp
135-
platform/android/src/style/sources/raster_source.cpp
136-
platform/android/src/style/sources/raster_source.hpp
137-
platform/android/src/style/sources/vector_source.cpp
138-
platform/android/src/style/sources/vector_source.hpp
139-
140-
# Native map
141-
platform/android/src/native_map_view.cpp
142-
platform/android/src/native_map_view.hpp
143-
144-
# Connectivity
145-
platform/android/src/connectivity_listener.cpp
146-
platform/android/src/connectivity_listener.hpp
147-
148-
# Main jni bindings
149-
platform/android/src/jni.cpp
150-
platform/android/src/jni.hpp
151-
platform/android/src/attach_env.cpp
152-
platform/android/src/attach_env.hpp
153-
platform/android/src/java_types.cpp
154-
platform/android/src/java_types.hpp
163+
platform/android/src/main.cpp
155164
)
156165

157-
target_add_mason_package(mapbox-gl PUBLIC rapidjson)
158-
159166
target_compile_options(mapbox-gl
160167
PRIVATE -fvisibility=hidden
161168
PRIVATE -ffunction-sections
@@ -168,6 +175,62 @@ target_link_libraries(mapbox-gl
168175
PUBLIC -Wl,--gc-sections
169176
)
170177

178+
## Test library ##
179+
180+
add_library(mbgl-test SHARED
181+
# Actual tests
182+
${MBGL_TEST_FILES}
183+
184+
# Main test entry point
185+
platform/android/src/test/main.jni.cpp
186+
187+
)
188+
189+
target_sources(mbgl-test
190+
# Headless view
191+
PRIVATE platform/default/mbgl/gl/headless_backend.cpp
192+
PRIVATE platform/default/mbgl/gl/headless_backend.hpp
193+
PRIVATE platform/default/mbgl/gl/offscreen_view.cpp
194+
PRIVATE platform/default/mbgl/gl/offscreen_view.hpp
195+
196+
PRIVATE platform/linux/src/headless_backend_egl.cpp
197+
PRIVATE platform/linux/src/headless_display_egl.cpp
198+
)
199+
200+
target_compile_options(mbgl-test
201+
PRIVATE -fvisibility=hidden
202+
PRIVATE -Os
203+
)
204+
205+
target_compile_definitions(mbgl-test
206+
PRIVATE MBGL_ASSET_ZIP=1
207+
)
208+
209+
target_include_directories(mbgl-test
210+
PRIVATE include
211+
PRIVATE src # TODO: eliminate
212+
PRIVATE test/include
213+
PRIVATE test/src
214+
PRIVATE platform/default
215+
PRIVATE ${MBGL_GENERATED}/include
216+
)
217+
218+
target_link_libraries(mbgl-test
219+
PRIVATE mbgl-core
220+
)
221+
222+
target_add_mason_package(mbgl-test PRIVATE geometry)
223+
target_add_mason_package(mbgl-test PRIVATE variant)
224+
target_add_mason_package(mbgl-test PRIVATE unique_resource)
225+
target_add_mason_package(mbgl-test PRIVATE rapidjson)
226+
target_add_mason_package(mbgl-test PRIVATE gtest)
227+
target_add_mason_package(mbgl-test PRIVATE pixelmatch)
228+
target_add_mason_package(mbgl-test PRIVATE boost)
229+
target_add_mason_package(mbgl-test PRIVATE geojson)
230+
target_add_mason_package(mbgl-test PRIVATE geojsonvt)
231+
232+
## Custom layer example ##
233+
171234
add_library(example-custom-layer SHARED
172235
platform/android/src/example_custom_layer.cpp
173236
)
@@ -184,6 +247,8 @@ target_link_libraries(example-custom-layer
184247
PUBLIC -Wl,--gc-sections
185248
)
186249

250+
## Strip and copy ##
251+
187252
set(ANDROID_SDK_PROJECT_DIR ${CMAKE_SOURCE_DIR}/platform/android/MapboxGLAndroidSDK)
188253
set(ANDROID_JNI_TARGET_DIR ${ANDROID_SDK_PROJECT_DIR}/src/main/jniLibs/${ANDROID_JNIDIR}/)
189254
set(ANDROID_ASSETS_TARGET_DIR ${ANDROID_SDK_PROJECT_DIR}/src/main/assets/)
@@ -203,8 +268,17 @@ add_custom_target(copy-files
203268
COMMAND ${STRIP_COMMAND} $<TARGET_FILE:example-custom-layer> -o ${ANDROID_TEST_APP_JNI_TARGET_DIR}$<TARGET_FILE_NAME:example-custom-layer>
204269
)
205270

271+
add_custom_target(mbgl-test-stripped
272+
DEPENDS mapbox-gl
273+
DEPENDS mbgl-test
274+
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/stripped
275+
COMMAND ${STRIP_COMMAND} $<TARGET_FILE:mapbox-gl> -o ${CMAKE_CURRENT_BINARY_DIR}/stripped/$<TARGET_FILE_NAME:mapbox-gl>
276+
COMMAND ${STRIP_COMMAND} $<TARGET_FILE:mbgl-test> -o ${CMAKE_CURRENT_BINARY_DIR}/stripped/$<TARGET_FILE_NAME:mbgl-test>
277+
)
278+
206279
add_custom_target(_all ALL
207280
DEPENDS mapbox-gl
281+
DEPENDS mbgl-test
208282
DEPENDS example-custom-layer
209283
DEPENDS copy-files
210284
)

platform/android/src/jni.cpp

+8-4
Original file line numberDiff line numberDiff line change
@@ -1703,9 +1703,12 @@ void updateOfflineRegionMetadata(JNIEnv *env, jni::jobject* offlineRegion_, jni:
17031703

17041704
// Offline calls end
17051705

1706-
}
1706+
} // anonymous
17071707

1708-
extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) {
1708+
namespace mbgl {
1709+
namespace android {
1710+
1711+
void registerNatives(JavaVM *vm) {
17091712
theJVM = vm;
17101713

17111714
jni::JNIEnv& env = jni::GetEnv(*vm, jni::jni_version_1_6);
@@ -1988,6 +1991,7 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) {
19881991
char release[PROP_VALUE_MAX] = "";
19891992
__system_property_get("ro.build.version.release", release);
19901993
androidRelease = std::string(release);
1991-
1992-
return JNI_VERSION_1_6;
19931994
}
1995+
1996+
} // android
1997+
} // mbgl

platform/android/src/jni.hpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ extern jmethodID onSnapshotReadyId;
2323

2424
extern bool attach_jni_thread(JavaVM* vm, JNIEnv** env, std::string threadName);
2525
extern void detach_jni_thread(JavaVM* vm, JNIEnv** env, bool detach);
26+
27+
extern void registerNatives(JavaVM* vm);
2628

27-
}
28-
}
29+
} //android
30+
} //mbgl

0 commit comments

Comments
 (0)