From 975abe9b5cacdd6c1d5267a514fdc94eeb42c71e Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Wed, 1 Feb 2017 11:16:03 +0100 Subject: [PATCH 01/10] Set tree data just before render happens --- lib/carto/renderer_js.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/carto/renderer_js.js b/lib/carto/renderer_js.js index 57adb8d..ae840c4 100644 --- a/lib/carto/renderer_js.js +++ b/lib/carto/renderer_js.js @@ -279,14 +279,14 @@ CartoCSS.prototype = { carto.RendererJS = function (options) { this.options = options || {}; - var reference = this.options.reference || require('./torque-reference').version.latest; - tree.Reference.setData(reference); this.options.mapnik_version = this.options.mapnik_version || 'latest'; + this.reference = this.options.reference || require('./torque-reference').version.latest; this.options.strict = this.options.hasOwnProperty('strict') ? this.options.strict : false; }; // Prepare a javascript object which contains the layers carto.RendererJS.prototype.render = function render(cartocss, callback) { + tree.Reference.setData(this.reference); return new CartoCSS(cartocss, this.options); } From 515fbd0991a8edd2563e05e108befd8cff9e9f8c Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Wed, 1 Feb 2017 11:23:39 +0100 Subject: [PATCH 02/10] Only set previous reference if it existed --- test/rendering_js-strict.test.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/rendering_js-strict.test.js b/test/rendering_js-strict.test.js index 1247a2a..3339a8c 100644 --- a/test/rendering_js-strict.test.js +++ b/test/rendering_js-strict.test.js @@ -106,7 +106,9 @@ describe('RendererJS Strict Mode', function() { }); after(function() { - tree.Reference.setData(this.referenceData); + if (this.referenceData) { + tree.Reference.setData(this.referenceData); + } }); it('should fail if a feature is not supported and strict is turned on', function () { From 73154280794dda0d4177db9279713b909773e2bd Mon Sep 17 00:00:00 2001 From: Raul Ochoa Date: Wed, 1 Feb 2017 12:15:46 +0100 Subject: [PATCH 03/10] Adds test to validate supported features are validated and work --- test/rendering_js-strict.test.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/rendering_js-strict.test.js b/test/rendering_js-strict.test.js index 3339a8c..3a530f4 100644 --- a/test/rendering_js-strict.test.js +++ b/test/rendering_js-strict.test.js @@ -141,4 +141,11 @@ describe('RendererJS Strict Mode', 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); + }); + }); From 510847a3b228c04ba0872a163d4dca71ebf395e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20L=C3=B3pez?= Date: Fri, 3 Feb 2017 15:58:56 +0100 Subject: [PATCH 04/10] Make the validation in the correct place --- lib/carto/renderer_js.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/carto/renderer_js.js b/lib/carto/renderer_js.js index ae840c4..ac4fea5 100644 --- a/lib/carto/renderer_js.js +++ b/lib/carto/renderer_js.js @@ -57,7 +57,7 @@ CartoCSS.Layer.prototype = { }, /** - * return the symbolizers that need to be rendered with + * return the symbolizers that need to be rendered with * this style. The order is the rendering order. * @returns a list with 3 possible values 'line', 'marker', 'polygon' */ @@ -99,7 +99,7 @@ CartoCSS.Layer.prototype = { // // given a geoemtry type returns the transformed one acording the CartoCSS - // For points there are two kind of types: point and sprite, the first one + // For points there are two kind of types: point and sprite, the first one // is a circle, second one is an image sprite // // the other geometry types are the same than geojson (polygon, linestring...) @@ -209,12 +209,6 @@ CartoCSS.prototype = { var value = rule.value.value[0].value[0].value.value; this.imageURLs.push(value); } - - rule.toXML(parse_env, {}); - } - - if (this.options.strict && parse_env.errors.message) { - throw new Error(parse_env.errors.message); } layer.frames = []; @@ -244,6 +238,13 @@ CartoCSS.prototype = { var done = {}; for(var i = 0; i < defs.length; ++i) { var def = defs[i]; + + def.toXML(parse_env, {}); + + if (this.options.strict && parse_env.errors.message) { + throw new Error(parse_env.errors.message); + } + var k = defKey(def); var layer = layers[k]; if(!done[k]) { From 9b5fb6a4085d7ffcb2b5d4b633bd43ddc51a934e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20L=C3=B3pez?= Date: Mon, 17 Apr 2017 15:48:55 +0200 Subject: [PATCH 05/10] Make the error flag more strict --- lib/carto/renderer_js.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/carto/renderer_js.js b/lib/carto/renderer_js.js index ac4fea5..b4c2b1f 100644 --- a/lib/carto/renderer_js.js +++ b/lib/carto/renderer_js.js @@ -239,10 +239,11 @@ CartoCSS.prototype = { for(var i = 0; i < defs.length; ++i) { var def = defs[i]; - def.toXML(parse_env, {}); - - if (this.options.strict && parse_env.errors.message) { - throw new Error(parse_env.errors.message); + if (this.options.strict) { + def.toXML(parse_env, {}); + if (parse_env.errors.message) { + throw new Error(parse_env.errors.message); + } } var k = defKey(def); From 59c0208caa25294e460f4baaaa600ce226e3fcfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20L=C3=B3pez?= Date: Mon, 17 Apr 2017 16:00:07 +0200 Subject: [PATCH 06/10] Fix tests. Now we don't run the parser so there is no errors, we can't look for errors. --- test/editor/editor.test.js | 8 ++++++++ test/rendering_js-strict.test.js | 3 --- 2 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 test/editor/editor.test.js diff --git a/test/editor/editor.test.js b/test/editor/editor.test.js new file mode 100644 index 0000000..a2bb5ac --- /dev/null +++ b/test/editor/editor.test.js @@ -0,0 +1,8 @@ +var ref = require('./reference.json'); +var carto = require('../../lib/carto/index.js'); + + +var ccss = new carto.RendererJS({ + reference: ref, + strict: true +}).render("#layer { polygon-fill: #abcdef; }"); diff --git a/test/rendering_js-strict.test.js b/test/rendering_js-strict.test.js index 3a530f4..9628e9b 100644 --- a/test/rendering_js-strict.test.js +++ b/test/rendering_js-strict.test.js @@ -124,9 +124,6 @@ describe('RendererJS Strict Mode', function() { function rendererStrictModeOffTest(RendererJS) { return function () { var shader = RendererJS.render(style); - assert.ok(shader.parse_env); - assert.ok(shader.parse_env.errors); - assert.ok(shader.parse_env.errors.message.match(expectedErrorMessageRegex)); assert.ok(shader.layers); assert.equal(shader.layers.length, 2); From 7974fb0a053c3f3cf198fdd462f6bf7248eba85f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20L=C3=B3pez?= Date: Fri, 19 May 2017 12:20:22 +0200 Subject: [PATCH 07/10] Remove editor.test.js --- test/editor/editor.test.js | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 test/editor/editor.test.js diff --git a/test/editor/editor.test.js b/test/editor/editor.test.js deleted file mode 100644 index a2bb5ac..0000000 --- a/test/editor/editor.test.js +++ /dev/null @@ -1,8 +0,0 @@ -var ref = require('./reference.json'); -var carto = require('../../lib/carto/index.js'); - - -var ccss = new carto.RendererJS({ - reference: ref, - strict: true -}).render("#layer { polygon-fill: #abcdef; }"); From ab412165b2f37ae279eacd6c227721899eae02e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20L=C3=B3pez?= Date: Fri, 19 May 2017 12:21:00 +0200 Subject: [PATCH 08/10] Set correct indentation --- lib/carto/renderer_js.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/carto/renderer_js.js b/lib/carto/renderer_js.js index b4c2b1f..906086b 100644 --- a/lib/carto/renderer_js.js +++ b/lib/carto/renderer_js.js @@ -206,8 +206,8 @@ CartoCSS.prototype = { for(var u = 0; u Date: Fri, 19 May 2017 12:24:50 +0200 Subject: [PATCH 09/10] Check throw --- test/rendering_js-strict.test.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/test/rendering_js-strict.test.js b/test/rendering_js-strict.test.js index 9628e9b..07df548 100644 --- a/test/rendering_js-strict.test.js +++ b/test/rendering_js-strict.test.js @@ -134,9 +134,14 @@ describe('RendererJS Strict Mode', function() { new carto.RendererJS({reference: reference, mapnik_version: '1.0.0' }) )); - it('should pass if a feature is not supported but strict is turned off', rendererStrictModeOffTest( - new carto.RendererJS({reference: reference, mapnik_version: '1.0.0', strict: false }) - )); + it('should pass if a feature is not supported but strict is turned off', function () { + assert.doesNotThrow( + function () { + var RendererJS = new carto.RendererJS({reference: reference, mapnik_version: '1.0.0', strict: false }); + var shader = RendererJS.render(style); + } + ); + }); 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 }); From b051ae284e16d1f7e8b2b1a5dcaf21b5bf4efe44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20L=C3=B3pez?= Date: Fri, 19 May 2017 13:51:27 +0200 Subject: [PATCH 10/10] Remove throw check --- test/rendering_js-strict.test.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/test/rendering_js-strict.test.js b/test/rendering_js-strict.test.js index 07df548..4e15de9 100644 --- a/test/rendering_js-strict.test.js +++ b/test/rendering_js-strict.test.js @@ -135,12 +135,7 @@ describe('RendererJS Strict Mode', function() { )); it('should pass if a feature is not supported but strict is turned off', function () { - assert.doesNotThrow( - function () { - var RendererJS = new carto.RendererJS({reference: reference, mapnik_version: '1.0.0', strict: false }); - var shader = RendererJS.render(style); - } - ); + 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 () {