summaryrefslogtreecommitdiff
path: root/test/util/mapbox.cpp
blob: d6f9948e663db53483695b5fbf6b52cb0667d7f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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");
}