summaryrefslogtreecommitdiff
path: root/platform/node/test/suite_implementation.js
blob: a5c70ab802051881b123f9ba3658ecb2291c1dcc (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
'use strict';

var mbgl = require('../../../lib/mapbox-gl-native');
var request = require('request');

mbgl.on('message', function(msg) {
    console.log('%s (%s): %s', msg.severity, msg.class, msg.text);
});

module.exports = function (style, options, callback) {
    var map = new mbgl.Map({
        ratio: options.pixelRatio,
        request: function(req, callback) {
            request(req.url, {encoding: null}, function (err, response, body) {
                if (err) {
                    callback(err);
                } else if (response.statusCode != 200) {
                    callback(new Error(response.statusMessage));
                } else {
                    callback(null, {data: body});
                }
            });
        }
    });

    var timedOut = false;
    var watchdog = setTimeout(function () {
        timedOut = true;
        map.dumpDebugLogs();
        callback(new Error('timed out after 20 seconds'));
    }, 20000);

    options.center = style.center;
    options.zoom = style.zoom;
    options.bearing = style.bearing;
    options.pitch = style.pitch;
    options.debug = {
        tileBorders: options.debug,
        collision: options.collisionDebug
    };

    map.load(style);

    map.render(options, function (err, pixels) {
        var results = options.queryGeometry ?
            map.queryRenderedFeatures(options.queryGeometry) :
            [];
        map.release();
        if (timedOut) return;
        clearTimeout(watchdog);
        callback(err, pixels, results.map(prepareFeatures));
    });

    function prepareFeatures(json) {
        var r = JSON.parse(json);
        delete r.layer;
        r.geometry = null;
        return r;
    }
};