From f4887c20a8b969a53b568f9eeb0fea3bdfa81983 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Wed, 15 Feb 2012 13:19:47 -0800 Subject: [PATCH] expose grid.painted() to match image.painted() --- src/mapnik_grid.cpp | 9 +++++ src/mapnik_grid.hpp | 6 ++-- src/mapnik_map.cpp | 11 ++++-- test/grid.test.js | 87 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 108 insertions(+), 5 deletions(-) create mode 100644 test/grid.test.js diff --git a/src/mapnik_grid.cpp b/src/mapnik_grid.cpp index 85c7145fa8..ffbd8d0876 100644 --- a/src/mapnik_grid.cpp +++ b/src/mapnik_grid.cpp @@ -34,6 +34,7 @@ void Grid::Initialize(Handle target) { NODE_SET_PROTOTYPE_METHOD(constructor, "view", view); NODE_SET_PROTOTYPE_METHOD(constructor, "width", width); NODE_SET_PROTOTYPE_METHOD(constructor, "height", height); + NODE_SET_PROTOTYPE_METHOD(constructor, "painted", painted); // properties ATTR(constructor, "key", get_prop, set_prop); @@ -121,6 +122,14 @@ Handle Grid::New(const Arguments& args) return Undefined(); } +Handle Grid::painted(const Arguments& args) +{ + HandleScope scope; + + Grid* g = ObjectWrap::Unwrap(args.This()); + return scope.Close(Boolean::New(g->get()->painted())); +} + Handle Grid::width(const Arguments& args) { HandleScope scope; diff --git a/src/mapnik_grid.hpp b/src/mapnik_grid.hpp index 543e5e75fb..31beec4115 100644 --- a/src/mapnik_grid.hpp +++ b/src/mapnik_grid.hpp @@ -19,11 +19,11 @@ class Grid: public node::ObjectWrap { static Handle New(const Arguments &args); static Handle encodeSync(const Arguments &args); static Handle encode(const Arguments &args); + static Handle fields(const Arguments &args); + static Handle view(const Arguments &args); static Handle width(const Arguments &args); static Handle height(const Arguments &args); - static Handle view(const Arguments &args); - - static Handle fields(const Arguments &args); + static Handle painted(const Arguments &args); static Handle get_prop(Local property, const AccessorInfo& info); diff --git a/src/mapnik_map.cpp b/src/mapnik_map.cpp index 22d04b09c2..d1b7985f3a 100644 --- a/src/mapnik_map.cpp +++ b/src/mapnik_map.cpp @@ -1144,8 +1144,15 @@ Handle Map::render(const Arguments& args) if (layer_idx >= layer_num) { std::ostringstream s; - s << "Zero-based layer index '" << layer_idx << "' not valid, only '" - << layers.size() << "' layers are in map"; + s << "Zero-based layer index '" << layer_idx << "' not valid, "; + if (layer_num > 0) + { + s << "only '" << layers.size() << "' layers exist in map"; + } + else + { + s << "no layers found in map"; + } return ThrowException(Exception::TypeError(String::New(s.str().c_str()))); } } else { diff --git a/test/grid.test.js b/test/grid.test.js new file mode 100644 index 0000000000..5525557cd1 --- /dev/null +++ b/test/grid.test.js @@ -0,0 +1,87 @@ +var mapnik = require('mapnik'); +var assert = require('assert'); +var fs = require('fs'); +var path = require('path'); + +exports['test grids'] = function(beforeExit) { + // no 'new' keyword + assert.throws(function() { mapnik.Grid(1, 1); }); + + // invalid args + assert.throws(function() { new mapnik.Grid(); }); + assert.throws(function() { new mapnik.Grid(1); }); + assert.throws(function() { new mapnik.Grid('foo'); }); + assert.throws(function() { new mapnik.Grid('a', 'b', 'c'); }); + + var grid = new mapnik.Grid(256, 256); + assert.ok(grid instanceof mapnik.Grid); + + assert.equal(grid.width(), 256); + assert.equal(grid.height(), 256); + var v = grid.view(0, 0, 256, 256); + assert.ok(v instanceof mapnik.GridView); + assert.equal(v.width(), 256); + assert.equal(v.height(), 256); + assert.equal(grid.encodeSync().length, v.encodeSync().length); + + + var grid_blank = new mapnik.Grid(4,4); + assert.equal(grid_blank.painted(),false); + assert.equal(grid_blank.background,undefined); + + var m = new mapnik.Map(4,4); + var l = new mapnik.Layer('test'); + m.add_layer(l); + + m.render(grid_blank,{layer:0},function(err,grid_blank) { + assert.equal(grid_blank.painted(),false); + assert.equal(grid_blank.background,undefined); + }); + + var grid_blank2 = new mapnik.Grid(4,4); + assert.equal(grid_blank2.painted(),false); + assert.equal(grid_blank2.background,undefined); + + var m2 = new mapnik.Map(4,4); + var l = new mapnik.Layer('test'); + m2.add_layer(l); + + m2.background = new mapnik.Color('green'); + m2.render(grid_blank2,{layer:0},function(err,grid_blank2) { + assert.equal(grid_blank2.painted(),false); + //assert.ok(grid_blank2.background); + }); + + + var grid_blank3 = new mapnik.Grid(4,4); + assert.equal(grid_blank3.painted(),false); + assert.equal(grid_blank3.background,undefined); + + var m3 = new mapnik.Map(4,4); + var s = ''; + s += ''; + s += ''; + m3.fromStringSync(s); + + var mem_datasource = new mapnik.MemoryDatasource({'extent':'-180,-90,180,90'}); + mem_datasource.add({ 'x':0, 'y':0 }); + mem_datasource.add({ 'x':1, 'y':1 }); + mem_datasource.add({ 'x':2, 'y':2 }); + mem_datasource.add({ 'x':3, 'y':3 }); + var l = new mapnik.Layer('test'); + l.srs = m3.srs; + l.styles = ["points"]; + l.datasource = mem_datasource; + m3.add_layer(l); + m3.zoomAll(); + m3.render(grid_blank3,{layer:0},function(err,grid_blank3) { + assert.equal(grid_blank3.painted(),true); + // TODO - expose grid background + //assert.equal(grid_blank3.background,undefined); + }); + +};