diff options
Diffstat (limited to 'test/util/mapbox.cpp')
-rw-r--r-- | test/util/mapbox.cpp | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/test/util/mapbox.cpp b/test/util/mapbox.cpp new file mode 100644 index 0000000000..d6f9948e66 --- /dev/null +++ b/test/util/mapbox.cpp @@ -0,0 +1,145 @@ +#include "../fixtures/util.hpp" + +#include <mbgl/platform/log.hpp> +#include <mbgl/util/mapbox.hpp> +#include <regex> +#include <iostream> + +using namespace mbgl; + +TEST(Mapbox, SourceURL) { + EXPECT_EQ(mbgl::util::mapbox::normalizeSourceURL("mapbox://user.map", "key"), "https://api.mapbox.com/v4/user.map.json?access_token=key&secure"); + EXPECT_EQ(mbgl::util::mapbox::normalizeSourceURL("mapbox://user.map", "token"), "https://api.mapbox.com/v4/user.map.json?access_token=token&secure"); + EXPECT_THROW(mbgl::util::mapbox::normalizeSourceURL("mapbox://user.map", ""), std::runtime_error); +} + +TEST(Mapbox, GlyphsURL) { + EXPECT_EQ(mbgl::util::mapbox::normalizeGlyphsURL("mapbox://fonts/boxmap/Comic%20Sans/0-255.pbf", "key"), "https://api.mapbox.com/fonts/v1/boxmap/Comic%20Sans/0-255.pbf?access_token=key"); + EXPECT_EQ(mbgl::util::mapbox::normalizeGlyphsURL("mapbox://fonts/boxmap/{fontstack}/{range}.pbf", "key"), "https://api.mapbox.com/fonts/v1/boxmap/{fontstack}/{range}.pbf?access_token=key"); + EXPECT_EQ(mbgl::util::mapbox::normalizeGlyphsURL("http://path", "key"), "http://path"); + EXPECT_EQ(mbgl::util::mapbox::normalizeGlyphsURL("mapbox://path", "key"), "mapbox://path"); +} + +TEST(Mapbox, StyleURL) { + EXPECT_EQ(mbgl::util::mapbox::normalizeStyleURL("mapbox://foo", "key"), "mapbox://foo"); + EXPECT_EQ(mbgl::util::mapbox::normalizeStyleURL("mapbox://styles/user/style", "key"), "https://api.mapbox.com/styles/v1/user/style?access_token=key"); + EXPECT_EQ(mbgl::util::mapbox::normalizeStyleURL("mapbox://styles/user/style/draft", "key"), "https://api.mapbox.com/styles/v1/user/style/draft?access_token=key"); + EXPECT_EQ(mbgl::util::mapbox::normalizeStyleURL("http://path", "key"), "http://path"); +} + +TEST(Mapbox, SpriteURL) { + EXPECT_EQ(mbgl::util::mapbox::normalizeSpriteURL("map/box/sprites@2x.json", "key"), "map/box/sprites@2x.json"); + EXPECT_EQ(mbgl::util::mapbox::normalizeSpriteURL("mapbox://foo", "key"), "mapbox://foo"); + EXPECT_EQ(mbgl::util::mapbox::normalizeSpriteURL("mapbox://sprites/mapbox/streets-v8.json", "key"), "https://api.mapbox.com/styles/v1/mapbox/streets-v8/sprite.json?access_token=key"); + EXPECT_EQ(mbgl::util::mapbox::normalizeSpriteURL("mapbox://sprites/mapbox/streets-v8@2x.png", "key"), "https://api.mapbox.com/styles/v1/mapbox/streets-v8/sprite@2x.png?access_token=key"); + EXPECT_EQ(mbgl::util::mapbox::normalizeSpriteURL("mapbox://sprites/mapbox/streets-v8/draft@2x.png", "key"), "https://api.mapbox.com/styles/v1/mapbox/streets-v8/draft/sprite@2x.png?access_token=key"); +} + +TEST(Mapbox, TileURL) { + try { +#if defined(__ANDROID__) || defined(__APPLE__) + EXPECT_EQ("http://path.png/tile{ratio}.png", mbgl::util::mapbox::normalizeRasterTileURL("http://path.png/tile.png")); + EXPECT_EQ("http://path.png/tile{ratio}.png32", mbgl::util::mapbox::normalizeRasterTileURL("http://path.png/tile.png32")); + EXPECT_EQ("http://path.png/tile{ratio}.png70", mbgl::util::mapbox::normalizeRasterTileURL("http://path.png/tile.png70")); + EXPECT_EQ("http://path.png/tile{ratio}.png?access_token=foo", mbgl::util::mapbox::normalizeRasterTileURL("http://path.png/tile.png?access_token=foo")); +#else + EXPECT_EQ("http://path.png/tile{ratio}.webp", mbgl::util::mapbox::normalizeRasterTileURL("http://path.png/tile.png")); + EXPECT_EQ("http://path.png/tile{ratio}.webp32", mbgl::util::mapbox::normalizeRasterTileURL("http://path.png/tile.png32")); + EXPECT_EQ("http://path.png/tile{ratio}.webp70", mbgl::util::mapbox::normalizeRasterTileURL("http://path.png/tile.png70")); + EXPECT_EQ("http://path.png/tile{ratio}.webp?access_token=foo", mbgl::util::mapbox::normalizeRasterTileURL("http://path.png/tile.png?access_token=foo")); +#endif // defined(__ANDROID__) || defined(__APPLE__) + EXPECT_EQ("http://path.png/tile{ratio}.pbf", mbgl::util::mapbox::normalizeRasterTileURL("http://path.png/tile.pbf")); + EXPECT_EQ("http://path.png/tile{ratio}.pbf?access_token=foo", mbgl::util::mapbox::normalizeRasterTileURL("http://path.png/tile.pbf?access_token=foo")); + EXPECT_EQ("http://path.png/tile{ratio}.pbf?access_token=foo.png", mbgl::util::mapbox::normalizeRasterTileURL("http://path.png/tile.pbf?access_token=foo.png")); + EXPECT_EQ("http://path.png/tile{ratio}.pbf?access_token=foo.png/bar", mbgl::util::mapbox::normalizeRasterTileURL("http://path.png/tile.pbf?access_token=foo.png/bar")); + EXPECT_EQ("http://path.png/tile{ratio}.pbf?access_token=foo.png/bar.png", mbgl::util::mapbox::normalizeRasterTileURL("http://path.png/tile.pbf?access_token=foo.png/bar.png")); + } catch (const std::regex_error& e) { + const char *error = "unknown"; + switch (e.code()) { + case std::regex_constants::error_collate: + error = "error_collate"; break; + case std::regex_constants::error_ctype: + error = "error_ctype"; break; + case std::regex_constants::error_escape: + error = "error_escape"; break; + case std::regex_constants::error_backref: + error = "error_backref"; break; + case std::regex_constants::error_paren: + error = "error_paren"; break; + case std::regex_constants::error_brace: + error = "error_brace"; break; + case std::regex_constants::error_badbrace: + error = "error_badbrace"; break; + case std::regex_constants::error_range: + error = "error_range"; break; + case std::regex_constants::error_space: + error = "error_space"; break; + case std::regex_constants::error_badrepeat: + error = "error_badrepeat"; break; + case std::regex_constants::error_complexity: + error = "error_complexity"; break; + case std::regex_constants::error_stack: + error = "error_stack"; break; + default: + break; + } + mbgl::Log::Error(mbgl::Event::General, "regex_error caught: %s - %s (%d)", e.what(), error, e.code()); + throw e; + } +} + +TEST(Mapbox, CanonicalURL) { + using mbgl::util::mapbox::canonicalURL; + EXPECT_EQ( + canonicalURL("https://a.tiles.mapbox.com/v4/" + "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/15/17599/" + "10744.vector.pbf?access_token=pk.kAeslEm93Sjf3mXk." + "vbiF02XnvkPkzlFhGSn2iIm6De3Cxsk5tmips2tvkG8sF"), + "mapbox://v4/mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/15/17599/10744.vector.pbf"); + + EXPECT_EQ( + canonicalURL("http://a.tiles.mapbox.com/v4/" + "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/15/17599/" + "10744.vector.pbf?access_token=pk.kAeslEm93Sjf3mXk." + "vbiF02XnvkPkzlFhGSn2iIm6De3Cxsk5tmips2tvkG8sF"), + "mapbox://v4/mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/15/17599/10744.vector.pbf"); + + EXPECT_EQ( + canonicalURL("https://b.tiles.mapbox.com/v4/" + "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/15/17599/" + "10744.vector.pbf?access_token=pk.kAeslEm93Sjf3mXk." + "vbiF02XnvkPkzlFhGSn2iIm6De3Cxsk5tmips2tvkG8sF"), + "mapbox://v4/mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/15/17599/10744.vector.pbf"); + + EXPECT_EQ( + canonicalURL("http://c.tiles.mapbox.com/v4/" + "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/15/17599/" + "10744.vector.pbf?access_token=pk.kAeslEm93Sjf3mXk." + "vbiF02XnvkPkzlFhGSn2iIm6De3Cxsk5tmips2tvkG8sF"), + "mapbox://v4/mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/15/17599/10744.vector.pbf"); + + EXPECT_EQ( + canonicalURL("https://api.mapbox.com/v4/" + "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/15/17599/" + "10744.vector.pbf?access_token=pk.kAeslEm93Sjf3mXk." + "vbiF02XnvkPkzlFhGSn2iIm6De3Cxsk5tmips2tvkG8sF"), + "mapbox://v4/mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/15/17599/10744.vector.pbf"); + + EXPECT_EQ( + canonicalURL("http://api.mapbox.com/v4/" + "mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/15/17599/" + "10744.vector.pbf"), + "mapbox://v4/mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v6/15/17599/10744.vector.pbf"); + + EXPECT_EQ(canonicalURL("https://api.mapbox.com/fonts/v1/mapbox/" + "DIN%20Offc%20Pro%20Italic%2cArial%20Unicode%20MS%20Regular/" + "0-255.pbf?access_token=pk.kAeslEm93Sjf3mXk." + "vbiF02XnvkPkzlFhGSn2iIm6De3Cxsk5tmips2tvkG8sF"), + "mapbox://fonts/v1/mapbox/DIN%20Offc%20Pro%20Italic%2cArial%20Unicode%20MS%20Regular/" + "0-255.pbf"); + + EXPECT_EQ(canonicalURL("https://api.mapbox.com/styles/v1/mapbox/streets-v8/" + "sprite.json?access_token=pk.kAeslEm93Sjf3mXk." + "vbiF02XnvkPkzlFhGSn2iIm6De3Cxsk5tmips2tvkG8sF"), + "mapbox://styles/v1/mapbox/streets-v8/sprite.json"); +} |