From 5a7d2fd60ec4bd1639a1223ec5d2c54c534d0392 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 11 Jan 2016 15:00:56 -0800 Subject: [core] Eliminate platform::assetRoot() I regenerated assets.zip so that all file paths have an `assets/` prefix, as the Android AssetFileSource implementation asserts, and removed `TEST_DATA` from the paths. --- bin/render.cpp | 4 ++- gyp/platform-android.gypi | 1 - gyp/platform-ios.gypi | 1 - gyp/platform-linux.gypi | 1 - gyp/platform-osx.gypi | 1 - include/mbgl/platform/platform.hpp | 3 --- include/mbgl/storage/default_file_source.hpp | 2 +- platform/android/src/asset_file_source.cpp | 2 +- platform/android/src/asset_root.cpp | 15 ----------- platform/android/src/native_map_view.cpp | 5 +++- platform/darwin/asset_root.mm | 16 ------------ platform/default/asset_file_source.cpp | 2 +- platform/default/asset_root.cpp | 28 --------------------- platform/default/default_file_source.cpp | 4 +-- platform/ios/src/MGLMapView.mm | 2 +- platform/linux/main.cpp | 2 +- platform/osx/src/MGLMapView.mm | 5 ++-- test/api/repeated_render.cpp | 7 +++--- test/fixtures/api/assets.zip | Bin 328264 -> 167696 bytes test/fixtures/api/assets/streets.json | 14 +++++++++++ test/fixtures/api/assets/streets/0-0-0.vector.pbf | Bin 0 -> 482553 bytes test/fixtures/api/water.json | 2 +- test/fixtures/storage/assets.zip | Bin 1136 -> 1243 bytes test/fixtures/storage/assets/directory/file | 0 test/fixtures/storage/assets/empty | 0 test/fixtures/storage/assets/nonempty | 1 + test/fixtures/storage/empty | 0 test/fixtures/storage/nonempty | 1 - test/fixtures/tiles/streets.json | 14 ----------- test/fixtures/tiles/streets/0-0-0.vector.pbf | Bin 482553 -> 0 bytes .../tiles/streets/15-17605-10749.vector.pbf | Bin 143637 -> 0 bytes .../tiles/streets/15-17605-10750.vector.pbf | Bin 123586 -> 0 bytes test/storage/asset_file_source.cpp | 13 +++++----- 33 files changed, 43 insertions(+), 103 deletions(-) delete mode 100644 platform/android/src/asset_root.cpp delete mode 100644 platform/darwin/asset_root.mm delete mode 100644 platform/default/asset_root.cpp create mode 100644 test/fixtures/api/assets/streets.json create mode 100644 test/fixtures/api/assets/streets/0-0-0.vector.pbf create mode 100644 test/fixtures/storage/assets/directory/file create mode 100644 test/fixtures/storage/assets/empty create mode 100644 test/fixtures/storage/assets/nonempty delete mode 100644 test/fixtures/storage/empty delete mode 100644 test/fixtures/storage/nonempty delete mode 100644 test/fixtures/tiles/streets.json delete mode 100644 test/fixtures/tiles/streets/0-0-0.vector.pbf delete mode 100644 test/fixtures/tiles/streets/15-17605-10749.vector.pbf delete mode 100644 test/fixtures/tiles/streets/15-17605-10750.vector.pbf diff --git a/bin/render.cpp b/bin/render.cpp index 26fd06d507..0bcb5dff73 100644 --- a/bin/render.cpp +++ b/bin/render.cpp @@ -30,6 +30,7 @@ int main(int argc, char *argv[]) { double pixelRatio = 1.0; static std::string output = "out.png"; std::string cache_file = "cache.sqlite"; + std::string asset_root = "."; std::vector classes; std::string token; bool debug = false; @@ -48,6 +49,7 @@ int main(int argc, char *argv[]) { ("debug", po::bool_switch(&debug)->default_value(debug), "Debug mode") ("output,o", po::value(&output)->value_name("file")->default_value(output), "Output file name") ("cache,d", po::value(&cache_file)->value_name("file")->default_value(cache_file), "Cache database file name") + ("assets,d", po::value(&asset_root)->value_name("file")->default_value(asset_root), "Directory to which asset:// URLs will resolve") ; try { @@ -64,7 +66,7 @@ int main(int argc, char *argv[]) { using namespace mbgl; util::RunLoop loop; - DefaultFileSource fileSource(cache_file); + DefaultFileSource fileSource(cache_file, asset_root); // Try to load the token from the environment. if (!token.size()) { diff --git a/gyp/platform-android.gypi b/gyp/platform-android.gypi index 22558a237a..189fe933ee 100644 --- a/gyp/platform-android.gypi +++ b/gyp/platform-android.gypi @@ -11,7 +11,6 @@ 'sources': [ '../platform/android/src/log_android.cpp', - '../platform/android/src/asset_root.cpp', '../platform/default/async_task.cpp', '../platform/default/run_loop.cpp', '../platform/default/thread.cpp', diff --git a/gyp/platform-ios.gypi b/gyp/platform-ios.gypi index 1a36cf046d..0c24663749 100644 --- a/gyp/platform-ios.gypi +++ b/gyp/platform-ios.gypi @@ -21,7 +21,6 @@ '../platform/darwin/log_nslog.mm', '../platform/darwin/string_nsstring.mm', '../platform/darwin/application_root.mm', - '../platform/darwin/asset_root.mm', '../platform/darwin/image.mm', '../platform/darwin/nsthread.mm', '../platform/darwin/reachability.m', diff --git a/gyp/platform-linux.gypi b/gyp/platform-linux.gypi index 00595aa720..22dc452f33 100644 --- a/gyp/platform-linux.gypi +++ b/gyp/platform-linux.gypi @@ -15,7 +15,6 @@ '../platform/default/string_stdlib.cpp', '../platform/default/run_loop.cpp', '../platform/default/application_root.cpp', - '../platform/default/asset_root.cpp', '../platform/default/thread.cpp', '../platform/default/image.cpp', '../platform/default/png_reader.cpp', diff --git a/gyp/platform-osx.gypi b/gyp/platform-osx.gypi index ed4abea68f..0c2d824ad6 100644 --- a/gyp/platform-osx.gypi +++ b/gyp/platform-osx.gypi @@ -21,7 +21,6 @@ '../platform/darwin/log_nslog.mm', '../platform/darwin/string_nsstring.mm', '../platform/darwin/application_root.mm', - '../platform/darwin/asset_root.mm', '../platform/darwin/image.mm', '../platform/darwin/nsthread.mm', '../platform/darwin/reachability.m', diff --git a/include/mbgl/platform/platform.hpp b/include/mbgl/platform/platform.hpp index f2550a3e13..087ce56f95 100644 --- a/include/mbgl/platform/platform.hpp +++ b/include/mbgl/platform/platform.hpp @@ -18,9 +18,6 @@ std::string lowercase(const std::string &string); // Returns the path to the root folder of the application. const std::string &applicationRoot(); -// Returns the path to the asset location. -const std::string &assetRoot(); - // Makes the current thread low priority. void makeThreadLowPriority(); diff --git a/include/mbgl/storage/default_file_source.hpp b/include/mbgl/storage/default_file_source.hpp index 83ea4adf5d..bedea25bef 100644 --- a/include/mbgl/storage/default_file_source.hpp +++ b/include/mbgl/storage/default_file_source.hpp @@ -7,7 +7,7 @@ namespace mbgl { class DefaultFileSource : public FileSource { public: - DefaultFileSource(const std::string& cachePath = ":memory:", const std::string& root = ""); + DefaultFileSource(const std::string& cachePath, const std::string& assetRoot); ~DefaultFileSource() override; void setAccessToken(const std::string&); diff --git a/platform/android/src/asset_file_source.cpp b/platform/android/src/asset_file_source.cpp index 1f02f9cf4a..7eb2007778 100644 --- a/platform/android/src/asset_file_source.cpp +++ b/platform/android/src/asset_file_source.cpp @@ -99,7 +99,7 @@ private: AssetFileSource::AssetFileSource(const std::string& root) : thread(std::make_unique>( util::ThreadContext{"AssetFileSource", util::ThreadType::Worker, util::ThreadPriority::Regular}, - root.empty() ? platform::assetRoot() : root)) { + root)) { } AssetFileSource::~AssetFileSource() = default; diff --git a/platform/android/src/asset_root.cpp b/platform/android/src/asset_root.cpp deleted file mode 100644 index 5720f5731c..0000000000 --- a/platform/android/src/asset_root.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "jni.hpp" - -#include - -namespace mbgl { -namespace platform { - -// Returns the path to the root folder of the application. -const std::string &assetRoot() { - return mbgl::android::apkPath; -} - -} -} diff --git a/platform/android/src/native_map_view.cpp b/platform/android/src/native_map_view.cpp index 96b48e12c6..5d6e240797 100644 --- a/platform/android/src/native_map_view.cpp +++ b/platform/android/src/native_map_view.cpp @@ -75,7 +75,10 @@ NativeMapView::NativeMapView(JNIEnv *env, jobject obj_, float pixelRatio_, int a return; } - fileSource = std::make_unique(mbgl::android::cachePath + "/mbgl-cache.db"); + fileSource = std::make_unique( + mbgl::android::cachePath + "/mbgl-cache.db", + mbgl::android::apkPath); + map = std::make_unique(*this, *fileSource, MapMode::Continuous); float zoomFactor = map->getMaxZoom() - map->getMinZoom() + 1; diff --git a/platform/darwin/asset_root.mm b/platform/darwin/asset_root.mm deleted file mode 100644 index a4a3d13c88..0000000000 --- a/platform/darwin/asset_root.mm +++ /dev/null @@ -1,16 +0,0 @@ -#import - -#include - -namespace mbgl { -namespace platform { - -// Returns the path to the root folder of the application. -const std::string &assetRoot() { - static const std::string root = []() -> std::string { - return [[[[NSBundle mainBundle] resourceURL] path] UTF8String]; - }(); - return root; -} -} -} diff --git a/platform/default/asset_file_source.cpp b/platform/default/asset_file_source.cpp index 5aa5730c94..2573966c72 100644 --- a/platform/default/asset_file_source.cpp +++ b/platform/default/asset_file_source.cpp @@ -67,7 +67,7 @@ private: AssetFileSource::AssetFileSource(const std::string& root) : thread(std::make_unique>( util::ThreadContext{"AssetFileSource", util::ThreadType::Worker, util::ThreadPriority::Regular}, - root.empty() ? platform::assetRoot() : root)) { + root)) { } AssetFileSource::~AssetFileSource() = default; diff --git a/platform/default/asset_root.cpp b/platform/default/asset_root.cpp deleted file mode 100644 index 2b20018c40..0000000000 --- a/platform/default/asset_root.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include - -#include -#include - -namespace mbgl { -namespace platform { - -// Returns the path to the root folder of the application. -const std::string &assetRoot() { - static const std::string root = []() -> std::string { - size_t max = 0; - std::string dir; - do { - // Gradually increase the length of the string in case the path was truncated. - max += 256; - dir.resize(max); - uv_exepath(const_cast(dir.data()), &max); - } while (max == dir.size()); - dir.resize(max - 1); - dir = dirname(const_cast(dir.c_str())); - return dir; - }(); - return root; -} - -} -} diff --git a/platform/default/default_file_source.cpp b/platform/default/default_file_source.cpp index 8f2f024a11..fcb45ee29a 100644 --- a/platform/default/default_file_source.cpp +++ b/platform/default/default_file_source.cpp @@ -31,8 +31,8 @@ public: OnlineFileSource onlineFileSource; }; -DefaultFileSource::DefaultFileSource(const std::string& cachePath, const std::string& root) - : impl(std::make_unique(cachePath, root)) { +DefaultFileSource::DefaultFileSource(const std::string& cachePath, const std::string& assetRoot) + : impl(std::make_unique(cachePath, assetRoot)) { } DefaultFileSource::~DefaultFileSource() = default; diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm index 0fdf2ea66a..25474997e0 100644 --- a/platform/ios/src/MGLMapView.mm +++ b/platform/ios/src/MGLMapView.mm @@ -280,7 +280,7 @@ std::chrono::steady_clock::duration MGLDurationInSeconds(float duration) NSString *libraryDirectory = [paths objectAtIndex:0]; fileCachePath = [libraryDirectory stringByAppendingPathComponent:@"cache.db"]; } - _mbglFileSource = new mbgl::DefaultFileSource([fileCachePath UTF8String]); + _mbglFileSource = new mbgl::DefaultFileSource([fileCachePath UTF8String], [[[[NSBundle mainBundle] resourceURL] path] UTF8String]); // setup mbgl map _mbglMap = new mbgl::Map(*_mbglView, *_mbglFileSource, mbgl::MapMode::Continuous); diff --git a/platform/linux/main.cpp b/platform/linux/main.cpp index d6cf10fe70..f90b5de849 100644 --- a/platform/linux/main.cpp +++ b/platform/linux/main.cpp @@ -105,7 +105,7 @@ int main(int argc, char *argv[]) { view = std::make_unique(fullscreen, benchmark); - mbgl::DefaultFileSource fileSource("/tmp/mbgl-cache.db"); + mbgl::DefaultFileSource fileSource("/tmp/mbgl-cache.db", "."); fileSource.setMaximumCacheEntrySize(1 * 1024 * 1024); // 1 MB fileSource.setMaximumCacheSize(50 * 1024 * 1024); // 50 MB diff --git a/platform/osx/src/MGLMapView.mm b/platform/osx/src/MGLMapView.mm index 64aa592f7c..947dd41b17 100644 --- a/platform/osx/src/MGLMapView.mm +++ b/platform/osx/src/MGLMapView.mm @@ -246,7 +246,7 @@ public: error:nil]; NSURL *cacheURL = [cacheDirectoryURL URLByAppendingPathComponent:@"cache.db"]; NSString *cachePath = cacheURL ? cacheURL.path : @""; - _mbglFileSource = new mbgl::DefaultFileSource(cachePath.UTF8String); + _mbglFileSource = new mbgl::DefaultFileSource(cachePath.UTF8String, [[[[NSBundle mainBundle] resourceURL] path] UTF8String]); _mbglMap = new mbgl::Map(*_mbglView, *_mbglFileSource, mbgl::MapMode::Continuous); @@ -524,8 +524,7 @@ public: } if (![styleURL scheme]) { - // Assume a relative path into the application’s resource folder, - // defined in mbgl::platform::assetRoot(). + // Assume a relative path into the application’s resource folder. styleURL = [NSURL URLWithString:[@"asset://" stringByAppendingString:styleURL.absoluteString]]; } diff --git a/test/api/repeated_render.cpp b/test/api/repeated_render.cpp index 3eab03de5b..788363f0d1 100644 --- a/test/api/repeated_render.cpp +++ b/test/api/repeated_render.cpp @@ -18,9 +18,10 @@ TEST(API, RepeatedRender) { auto display = std::make_shared(); HeadlessView view(display, 1, 256, 512); #ifdef MBGL_ASSET_ZIP - DefaultFileSource fileSource(":memory", "test/fixtures/api/assets.zip"); + // Regenerate with `cd test/fixtures/api/ && zip -r assets.zip assets/` + DefaultFileSource fileSource(":memory:", "test/fixtures/api/assets.zip"); #else - DefaultFileSource fileSource; + DefaultFileSource fileSource(":memory:", "test/fixtures/api/assets"); #endif Log::setObserver(std::make_unique()); @@ -40,7 +41,7 @@ TEST(API, RepeatedRender) { } { - map.setStyleJSON(style, "TEST_DATA/suite"); + map.setStyleJSON(style, ""); std::promise promise; map.renderStill([&promise](std::exception_ptr, PremultipliedImage&& image) { promise.set_value(std::move(image)); diff --git a/test/fixtures/api/assets.zip b/test/fixtures/api/assets.zip index 42a30f1c2a..fe00443f61 100644 Binary files a/test/fixtures/api/assets.zip and b/test/fixtures/api/assets.zip differ diff --git a/test/fixtures/api/assets/streets.json b/test/fixtures/api/assets/streets.json new file mode 100644 index 0000000000..f7b259f0a6 --- /dev/null +++ b/test/fixtures/api/assets/streets.json @@ -0,0 +1,14 @@ +{ + "bounds": [ -180, -85.0511, 180, 85.0511 ], + "center": [ 0, 0, 0 ], + "description": "", + "format": "pbf", + "id": "streets", + "maskLevel": 8, + "maxzoom": 15, + "minzoom": 0, + "name": "Streets", + "scheme": "xyz", + "tilejson": "2.0.0", + "tiles": [ "asset://streets/{z}-{x}-{y}.vector.pbf" ] +} diff --git a/test/fixtures/api/assets/streets/0-0-0.vector.pbf b/test/fixtures/api/assets/streets/0-0-0.vector.pbf new file mode 100644 index 0000000000..a0f049ad43 Binary files /dev/null and b/test/fixtures/api/assets/streets/0-0-0.vector.pbf differ diff --git a/test/fixtures/api/water.json b/test/fixtures/api/water.json index c969b345ae..387471b842 100644 --- a/test/fixtures/api/water.json +++ b/test/fixtures/api/water.json @@ -4,7 +4,7 @@ "sources": { "mapbox": { "type": "vector", - "url": "asset://TEST_DATA/fixtures/tiles/streets.json" + "url": "asset://streets.json" } }, "layers": [{ diff --git a/test/fixtures/storage/assets.zip b/test/fixtures/storage/assets.zip index 3127798145..4006ee10f2 100644 Binary files a/test/fixtures/storage/assets.zip and b/test/fixtures/storage/assets.zip differ diff --git a/test/fixtures/storage/assets/directory/file b/test/fixtures/storage/assets/directory/file new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/fixtures/storage/assets/empty b/test/fixtures/storage/assets/empty new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/fixtures/storage/assets/nonempty b/test/fixtures/storage/assets/nonempty new file mode 100644 index 0000000000..929bb23131 --- /dev/null +++ b/test/fixtures/storage/assets/nonempty @@ -0,0 +1 @@ +content is here diff --git a/test/fixtures/storage/empty b/test/fixtures/storage/empty deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/test/fixtures/storage/nonempty b/test/fixtures/storage/nonempty deleted file mode 100644 index 929bb23131..0000000000 --- a/test/fixtures/storage/nonempty +++ /dev/null @@ -1 +0,0 @@ -content is here diff --git a/test/fixtures/tiles/streets.json b/test/fixtures/tiles/streets.json deleted file mode 100644 index a848a1bf72..0000000000 --- a/test/fixtures/tiles/streets.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "bounds": [ -180, -85.0511, 180, 85.0511 ], - "center": [ 0, 0, 0 ], - "description": "", - "format": "pbf", - "id": "streets", - "maskLevel": 8, - "maxzoom": 15, - "minzoom": 0, - "name": "Streets", - "scheme": "xyz", - "tilejson": "2.0.0", - "tiles": [ "asset://TEST_DATA/fixtures/tiles/streets/{z}-{x}-{y}.vector.pbf" ] -} diff --git a/test/fixtures/tiles/streets/0-0-0.vector.pbf b/test/fixtures/tiles/streets/0-0-0.vector.pbf deleted file mode 100644 index a0f049ad43..0000000000 Binary files a/test/fixtures/tiles/streets/0-0-0.vector.pbf and /dev/null differ diff --git a/test/fixtures/tiles/streets/15-17605-10749.vector.pbf b/test/fixtures/tiles/streets/15-17605-10749.vector.pbf deleted file mode 100644 index 1f43a6c487..0000000000 Binary files a/test/fixtures/tiles/streets/15-17605-10749.vector.pbf and /dev/null differ diff --git a/test/fixtures/tiles/streets/15-17605-10750.vector.pbf b/test/fixtures/tiles/streets/15-17605-10750.vector.pbf deleted file mode 100644 index 1ad616a56c..0000000000 Binary files a/test/fixtures/tiles/streets/15-17605-10750.vector.pbf and /dev/null differ diff --git a/test/storage/asset_file_source.cpp b/test/storage/asset_file_source.cpp index 8c597027dc..d7910373f6 100644 --- a/test/storage/asset_file_source.cpp +++ b/test/storage/asset_file_source.cpp @@ -11,9 +11,10 @@ namespace { std::string getFileSourceRoot() { #ifdef MBGL_ASSET_ZIP + // Regenerate with `cd test/fixtures/storage/ && zip -r assets.zip assets/` return "test/fixtures/storage/assets.zip"; #else - return ""; + return "test/fixtures/storage/assets"; #endif } @@ -22,7 +23,7 @@ public: TestWorker(mbgl::AssetFileSource* fs_) : fs(fs_) {} void run(std::function endCallback) { - const std::string asset("asset://TEST_DATA/fixtures/storage/nonempty"); + const std::string asset("asset://nonempty"); requestCallback = [this, asset, endCallback](mbgl::Response res) { EXPECT_EQ(nullptr, res.error); @@ -100,7 +101,7 @@ TEST_F(Storage, AssetEmptyFile) { AssetFileSource fs(getFileSourceRoot()); - std::unique_ptr req = fs.request({ Resource::Unknown, "asset://TEST_DATA/fixtures/storage/empty" }, [&](Response res) { + std::unique_ptr req = fs.request({ Resource::Unknown, "asset://empty" }, [&](Response res) { req.reset(); EXPECT_EQ(nullptr, res.error); EXPECT_EQ(false, res.stale); @@ -122,7 +123,7 @@ TEST_F(Storage, AssetNonEmptyFile) { AssetFileSource fs(getFileSourceRoot()); - std::unique_ptr req = fs.request({ Resource::Unknown, "asset://TEST_DATA/fixtures/storage/nonempty" }, [&](Response res) { + std::unique_ptr req = fs.request({ Resource::Unknown, "asset://nonempty" }, [&](Response res) { req.reset(); EXPECT_EQ(nullptr, res.error); EXPECT_EQ(false, res.stale); @@ -144,7 +145,7 @@ TEST_F(Storage, AssetNonExistentFile) { AssetFileSource fs(getFileSourceRoot()); - std::unique_ptr req = fs.request({ Resource::Unknown, "asset://TEST_DATA/fixtures/storage/does_not_exist" }, [&](Response res) { + std::unique_ptr req = fs.request({ Resource::Unknown, "asset://does_not_exist" }, [&](Response res) { req.reset(); ASSERT_NE(nullptr, res.error); EXPECT_EQ(Response::Error::Reason::NotFound, res.error->reason); @@ -167,7 +168,7 @@ TEST_F(Storage, AssetReadDirectory) { AssetFileSource fs(getFileSourceRoot()); - std::unique_ptr req = fs.request({ Resource::Unknown, "asset://TEST_DATA/fixtures/storage" }, [&](Response res) { + std::unique_ptr req = fs.request({ Resource::Unknown, "asset://directory" }, [&](Response res) { req.reset(); ASSERT_NE(nullptr, res.error); EXPECT_EQ(Response::Error::Reason::NotFound, res.error->reason); -- cgit v1.2.1