d3/test/geo/graticule-test.js

189 строки
9.4 KiB
JavaScript

var vows = require("vows"),
_ = require("../../"),
load = require("../load"),
assert = require("../assert");
var suite = vows.describe("d3.geo.graticule");
var ε = 1e-6;
suite.addBatch({
"graticule": {
topic: load("geo/graticule").expression("d3.geo.graticule"),
"extent": {
"sets minorExtent and majorExtent": function(graticule) {
var g = graticule().extent([[-90, -45], [90, 45]]);
assert.deepEqual(g.minorExtent(), [[-90, -45], [90, 45]]);
assert.deepEqual(g.majorExtent(), [[-90, -45], [90, 45]]);
},
"gets minorExtent": function(graticule) {
var g = graticule().minorExtent([[-90, -45], [90, 45]]);
assert.deepEqual(g.extent(), [[-90, -45], [90, 45]]);
}
},
"majorExtent": {
"default longitude ranges from 180°W (inclusive) to 180°E (exclusive)": function(graticule) {
var extent = graticule().majorExtent();
assert.equal(extent[0][0], -180);
assert.equal(extent[1][0], +180);
},
"default latitude ranges from 90°S (exclusive) to 90°N (exclusive)": function(graticule) {
var extent = graticule().majorExtent();
assert.equal(extent[0][1], -90 + ε);
assert.equal(extent[1][1], +90 - ε);
},
"coerces input values to numbers": function(graticule) {
var g = graticule().majorExtent([["-90", "-45"], ["+90", "+45"]]),
extent = g.majorExtent();
assert.strictEqual(extent[0][0], -90);
assert.strictEqual(extent[0][1], -45);
assert.strictEqual(extent[1][0], +90);
assert.strictEqual(extent[1][1], +45);
}
},
"minorExtent": {
"default longitude ranges from 180°W (inclusive) to 180°E (exclusive)": function(graticule) {
var extent = graticule().minorExtent();
assert.equal(extent[0][0], -180);
assert.equal(extent[1][0], +180);
},
"default latitude ranges from 80°S (inclusive) to 80°N (inclusive)": function(graticule) {
var extent = graticule().minorExtent();
assert.equal(extent[0][1], -80 - ε);
assert.equal(extent[1][1], +80 + ε);
},
"coerces input values to numbers": function(graticule) {
var g = graticule().minorExtent([["-90", "-45"], ["+90", "+45"]]),
extent = g.minorExtent();
assert.strictEqual(extent[0][0], -90);
assert.strictEqual(extent[0][1], -45);
assert.strictEqual(extent[1][0], +90);
assert.strictEqual(extent[1][1], +45);
}
},
"step": {
"sets minorStep and majorStep": function(graticule) {
var g = graticule().step([22.5, 22.5]);
assert.deepEqual(g.minorStep(), [22.5, 22.5]);
assert.deepEqual(g.majorStep(), [22.5, 22.5]);
},
"gets minorStep": function(graticule) {
var g = graticule().minorStep([22.5, 22.5]);
assert.deepEqual(g.step(), [22.5, 22.5]);
}
},
"minorStep": {
"defaults to 10°, 10°": function(graticule) {
assert.deepEqual(graticule().minorStep(), [10, 10]);
},
"coerces input values to numbers": function(graticule) {
var g = graticule().minorStep(["45", "11.25"]),
step = g.minorStep();
assert.strictEqual(step[0], 45);
assert.strictEqual(step[1], 11.25);
}
},
"majorStep": {
"defaults to 90°, 360°": function(graticule) {
assert.deepEqual(graticule().majorStep(), [90, 360]);
},
"coerces input values to numbers": function(graticule) {
var g = graticule().majorStep(["45", "11.25"]),
step = g.majorStep();
assert.strictEqual(step[0], 45);
assert.strictEqual(step[1], 11.25);
}
},
"lines": {
"default longitude ranges from 180°W (inclusive) to 180°E (exclusive)": function(graticule) {
var lines = graticule().lines()
.filter(function(line) { return line.coordinates[0][0] === line.coordinates[1][0]; })
.sort(function(a, b) { return a.coordinates[0][0] - b.coordinates[0][0]; });
assert.equal(lines[0].coordinates[0][0], -180);
assert.equal(lines[lines.length - 1].coordinates[0][0], +170);
},
"default latitude ranges from 90°S (exclusive) to 90°N (exclusive)": function(graticule) {
var lines = graticule().lines()
.filter(function(line) { return line.coordinates[0][1] === line.coordinates[1][1]; })
.sort(function(a, b) { return a.coordinates[0][1] - b.coordinates[0][1]; });
assert.equal(lines[0].coordinates[0][1], -80);
assert.equal(lines[lines.length - 1].coordinates[0][1], +80);
},
"default minor longitude lines extend from 80°S to 80°N": function(graticule) {
var lines = graticule().lines()
.filter(function(line) { return line.coordinates[0][0] === line.coordinates[1][0]; })
.filter(function(line) { return Math.abs(line.coordinates[0][0] % 90) > ε; });
lines.forEach(function(line) {
assert.deepEqual(_.extent(line.coordinates, function(p) { return p[1]; }), [-80 - ε, +80 + ε]);
});
},
"default major longitude lines extend from 90°S to 90°N": function(graticule) {
var lines = graticule().lines()
.filter(function(line) { return line.coordinates[0][0] === line.coordinates[1][0]; })
.filter(function(line) { return Math.abs(line.coordinates[0][0] % 90) < ε; });
lines.forEach(function(line) {
assert.deepEqual(_.extent(line.coordinates, function(p) { return p[1]; }), [-90 + ε, +90 - ε]);
});
},
"default latitude lines extend from 180°W to 180°E": function(graticule) {
var lines = graticule().lines()
.filter(function(line) { return line.coordinates[0][1] === line.coordinates[1][1]; });
lines.forEach(function(line) {
assert.deepEqual(_.extent(line.coordinates, function(p) { return p[0]; }), [-180, +180]);
});
},
"returns an array of LineStrings": function(graticule) {
assert.deepEqual(graticule()
.extent([[-90, -45], [90, 45]])
.step([45, 45])
.precision(3)
.lines(), [
{type: "LineString", coordinates: [[-90,-45],[-90,45]]}, // meridian
{type: "LineString", coordinates: [[-45,-45],[-45,45]]}, // meridian
{type: "LineString", coordinates: [[0,-45],[0,45]]}, // meridian
{type: "LineString", coordinates: [[45,-45],[45,45]]}, // meridian
{type: "LineString", coordinates: [[-90,-45],[-87,-45],[-84,-45],[-81,-45],[-78,-45],[-75,-45],[-72,-45],[-69,-45],[-66,-45],[-63,-45],[-60,-45],[-57,-45],[-54,-45],[-51,-45],[-48,-45],[-45,-45],[-42,-45],[-39,-45],[-36,-45],[-33,-45],[-30,-45],[-27,-45],[-24,-45],[-21,-45],[-18,-45],[-15,-45],[-12,-45],[-9,-45],[-6,-45],[-3,-45],[0,-45],[3,-45],[6,-45],[9,-45],[12,-45],[15,-45],[18,-45],[21,-45],[24,-45],[27,-45],[30,-45],[33,-45],[36,-45],[39,-45],[42,-45],[45,-45],[48,-45],[51,-45],[54,-45],[57,-45],[60,-45],[63,-45],[66,-45],[69,-45],[72,-45],[75,-45],[78,-45],[81,-45],[84,-45],[87,-45],[90,-45]]},
{type: "LineString", coordinates: [[-90,0],[-87,0],[-84,0],[-81,0],[-78,0],[-75,0],[-72,0],[-69,0],[-66,0],[-63,0],[-60,0],[-57,0],[-54,0],[-51,0],[-48,0],[-45,0],[-42,0],[-39,0],[-36,0],[-33,0],[-30,0],[-27,0],[-24,0],[-21,0],[-18,0],[-15,0],[-12,0],[-9,0],[-6,0],[-3,0],[0,0],[3,0],[6,0],[9,0],[12,0],[15,0],[18,0],[21,0],[24,0],[27,0],[30,0],[33,0],[36,0],[39,0],[42,0],[45,0],[48,0],[51,0],[54,0],[57,0],[60,0],[63,0],[66,0],[69,0],[72,0],[75,0],[78,0],[81,0],[84,0],[87,0],[90,0]]}
]);
}
},
"returns a MultiLineString of all lines": function(graticule) {
var g = graticule()
.extent([[-90, -45], [90, 45]])
.step([45, 45])
.precision(3);
assert.deepEqual(g(), {
type: "MultiLineString",
coordinates: g.lines().map(function(line) { return line.coordinates; })
});
},
"outline": {
"returns a Polygon encompassing the major extent": function(graticule) {
assert.deepEqual(graticule()
.majorExtent([[-90, -45], [90, 45]])
.precision(3)
.outline(), {
type: "Polygon",
coordinates: [[
[-90,-45],[-90,45], // meridian
[-87,45],[-84,45],[-81,45],[-78,45],[-75,45],[-72,45],[-69,45],[-66,45],[-63,45],[-60,45],[-57,45],[-54,45],[-51,45],[-48,45],[-45,45],[-42,45],[-39,45],[-36,45],[-33,45],[-30,45],[-27,45],[-24,45],[-21,45],[-18,45],[-15,45],[-12,45],[-9,45],[-6,45],[-3,45],[0,45],[3,45],[6,45],[9,45],[12,45],[15,45],[18,45],[21,45],[24,45],[27,45],[30,45],[33,45],[36,45],[39,45],[42,45],[45,45],[48,45],[51,45],[54,45],[57,45],[60,45],[63,45],[66,45],[69,45],[72,45],[75,45],[78,45],[81,45],[84,45],[87,45],
[90,45],[90,-45], // meridian
[87,-45],[84,-45],[81,-45],[78,-45],[75,-45],[72,-45],[69,-45],[66,-45],[63,-45],[60,-45],[57,-45],[54,-45],[51,-45],[48,-45],[45,-45],[42,-45],[39,-45],[36,-45],[33,-45],[30,-45],[27,-45],[24,-45],[21,-45],[18,-45],[15,-45],[12,-45],[9,-45],[6,-45],[3,-45],[0,-45],[-3,-45],[-6,-45],[-9,-45],[-12,-45],[-15,-45],[-18,-45],[-21,-45],[-24,-45],[-27,-45],[-30,-45],[-33,-45],[-36,-45],[-39,-45],[-42,-45],[-45,-45],[-48,-45],[-51,-45],[-54,-45],[-57,-45],[-60,-45],[-63,-45],[-66,-45],[-69,-45],[-72,-45],[-75,-45],[-78,-45],[-81,-45],[-84,-45],[-87,-45],[-90,-45]
]]
});
}
}
}
});
suite.export(module);