Merge pull request #27 from CartoDB/reference-errors
[WIP] Reference errors (attempt 2)pull/35/head
commit
3f9f6ef40d
@ -0,0 +1,148 @@
|
|||||||
|
var assert = require('assert');
|
||||||
|
var carto = require('../lib/carto');
|
||||||
|
var tree = require('../lib/carto/tree');
|
||||||
|
|
||||||
|
describe('RendererJS Strict Mode', function() {
|
||||||
|
|
||||||
|
var style = [
|
||||||
|
'#world {',
|
||||||
|
'polygon-fill: red;',
|
||||||
|
'line-width: 2;',
|
||||||
|
'line-color: #f00;',
|
||||||
|
'[frame-offset = 1] {',
|
||||||
|
'line-width: 3;',
|
||||||
|
'}',
|
||||||
|
'[frame-offset = 2] {',
|
||||||
|
'line-width: 3;',
|
||||||
|
'}',
|
||||||
|
'}',
|
||||||
|
'',
|
||||||
|
'#worls[frame-offset = 10] {',
|
||||||
|
'line-width: 4;',
|
||||||
|
'}'
|
||||||
|
].join('\n');
|
||||||
|
|
||||||
|
var reference = {
|
||||||
|
version: '1.0.0',
|
||||||
|
style: {},
|
||||||
|
layer: {},
|
||||||
|
colors: {},
|
||||||
|
filter: {},
|
||||||
|
symbolizers: {
|
||||||
|
line: {
|
||||||
|
"stroke": {
|
||||||
|
"css": "line-color",
|
||||||
|
"default-value": "rgba(0,0,0,1)",
|
||||||
|
"type": "color",
|
||||||
|
"default-meaning": "black and fully opaque (alpha = 1), same as rgb(0,0,0)",
|
||||||
|
"doc": "The color of a drawn line"
|
||||||
|
},
|
||||||
|
"stroke-width": {
|
||||||
|
"css": "line-width",
|
||||||
|
"default-value": 1,
|
||||||
|
"type": "float",
|
||||||
|
"doc": "The width of a line in pixels"
|
||||||
|
},
|
||||||
|
"stroke-opacity": {
|
||||||
|
"css": "line-opacity",
|
||||||
|
"default-value": 1,
|
||||||
|
"type": "float",
|
||||||
|
"default-meaning": "opaque",
|
||||||
|
"doc": "The opacity of a line"
|
||||||
|
},
|
||||||
|
"stroke-linejoin": {
|
||||||
|
"css": "line-join",
|
||||||
|
"default-value": "miter",
|
||||||
|
"type": [
|
||||||
|
"miter",
|
||||||
|
"miter-revert",
|
||||||
|
"round",
|
||||||
|
"bevel"
|
||||||
|
],
|
||||||
|
"expression": true,
|
||||||
|
"doc": "The behavior of lines when joining.",
|
||||||
|
"default-meaning": "The line joins will be rendered using a miter look."
|
||||||
|
},
|
||||||
|
"stroke-linecap": {
|
||||||
|
"css": "line-cap",
|
||||||
|
"default-value": "butt",
|
||||||
|
"type": [
|
||||||
|
"butt",
|
||||||
|
"round",
|
||||||
|
"square"
|
||||||
|
],
|
||||||
|
"expression": true,
|
||||||
|
"doc": "The display of line endings.",
|
||||||
|
"default-meaning": "The line endings will be rendered using a butt look."
|
||||||
|
},
|
||||||
|
"comp-op": {
|
||||||
|
"css": "line-comp-op",
|
||||||
|
"default-value": "overlay",
|
||||||
|
"default-meaning": "Add the current symbolizer on top of other symbolizer.",
|
||||||
|
"doc": "Composite operation. This defines how this symbolizer should behave relative to symbolizers atop or below it.",
|
||||||
|
"type": [
|
||||||
|
"multiply",
|
||||||
|
"add",
|
||||||
|
"overlay"
|
||||||
|
],
|
||||||
|
"expression": true
|
||||||
|
},
|
||||||
|
"stroke-dasharray": {
|
||||||
|
"css": "line-dasharray",
|
||||||
|
"type": "numbers",
|
||||||
|
"expression": true,
|
||||||
|
"doc": "A pair of length values [a,b], where (a) is the dash length and (b) is the gap length respectively. More than two values are supported for more complex patterns.",
|
||||||
|
"default-value": "none",
|
||||||
|
"default-meaning": "The line will be drawn without dashes."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var expectedErrorMessageRegex = /Unrecognized rule: polygon-fill/;
|
||||||
|
|
||||||
|
before(function() {
|
||||||
|
this.referenceData = tree.Reference.data;
|
||||||
|
});
|
||||||
|
|
||||||
|
after(function() {
|
||||||
|
if (this.referenceData) {
|
||||||
|
tree.Reference.setData(this.referenceData);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should fail if a feature is not supported and strict is turned on', function () {
|
||||||
|
assert.throws(
|
||||||
|
function () {
|
||||||
|
var RendererJS = new carto.RendererJS({reference: reference, mapnik_version: '1.0.0', strict: true });
|
||||||
|
var shader = RendererJS.render(style);
|
||||||
|
},
|
||||||
|
expectedErrorMessageRegex
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
function rendererStrictModeOffTest(RendererJS) {
|
||||||
|
return function () {
|
||||||
|
var shader = RendererJS.render(style);
|
||||||
|
|
||||||
|
assert.ok(shader.layers);
|
||||||
|
assert.equal(shader.layers.length, 2);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
it('should pass if a feature is not supported but strict mode is not specified', rendererStrictModeOffTest(
|
||||||
|
new carto.RendererJS({reference: reference, mapnik_version: '1.0.0' })
|
||||||
|
));
|
||||||
|
|
||||||
|
it('should pass if a feature is not supported but strict is turned off', function () {
|
||||||
|
new carto.RendererJS({reference: reference, mapnik_version: '1.0.0', strict: false })
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should pass if a feature is supported and strict is turned on', function () {
|
||||||
|
var RendererJS = new carto.RendererJS({reference: reference, mapnik_version: '1.0.0', strict: true });
|
||||||
|
var cartocss = '#layer { line-width: 10 }';
|
||||||
|
var shader = RendererJS.render(cartocss);
|
||||||
|
assert.ok(shader);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
Loading…
Reference in new issue