diff --git a/src/ol/source/vectorsource.js b/src/ol/source/vectorsource.js index 07c14a1f97..a2098845a4 100644 --- a/src/ol/source/vectorsource.js +++ b/src/ol/source/vectorsource.js @@ -1,6 +1,7 @@ goog.provide('ol.source.FeatureCache'); goog.provide('ol.source.Vector'); goog.provide('ol.source.VectorEventType'); +goog.provide('ol.source.VectorLoadState'); goog.require('goog.asserts'); goog.require('goog.async.nextTick'); diff --git a/test/spec/ol/source/vectorsource.test.js b/test/spec/ol/source/vectorsource.test.js index 3ed5181df2..527d8e2aeb 100644 --- a/test/spec/ol/source/vectorsource.test.js +++ b/test/spec/ol/source/vectorsource.test.js @@ -3,21 +3,65 @@ goog.provide('ol.test.source.Vector'); describe('ol.source.Vector', function() { + var url = 'spec/ol/source/vectorsource/single-feature.json'; + describe('constructor', function() { it('creates an instance', function() { var source = new ol.source.Vector(); expect(source).to.be.a(ol.source.Vector); expect(source).to.be.a(ol.source.Source); }); + + it('accepts features', function() { + var features = [new ol.Feature()]; + var source = new ol.source.Vector({ + features: features + }); + expect(source).to.be.a(ol.source.Vector); + expect(source.getFeatures()).to.eql(features); + }); + + it('accepts url and parser', function() { + var source = new ol.source.Vector({ + url: url, + parser: new ol.parser.GeoJSON() + }); + expect(source).to.be.a(ol.source.Vector); + }); + }); + + describe('#load()', function() { + it('triggers loading of features', function() { + var source = new ol.source.Vector({ + url: url, + parser: new ol.parser.GeoJSON() + }); + expect(source.loadState_).to.be(ol.source.VectorLoadState.IDLE); + var triggered = source.load([-1, -1, 1, 1], ol.proj.get('EPSG:4326')); + expect(triggered).to.be(true); + expect(source.loadState_).to.be(ol.source.VectorLoadState.LOADING); + }); + + it('returns false when already loading', function() { + var source = new ol.source.Vector({ + url: url, + parser: new ol.parser.GeoJSON() + }); + source.load([-1, -1, 1, 1], ol.proj.get('EPSG:4326')); + // second call with same extent + var triggered = source.load([-1, -1, 1, 1], ol.proj.get('EPSG:4326')); + expect(triggered).to.be(false); + expect(source.loadState_).to.be(ol.source.VectorLoadState.LOADING); + }); }); describe('#addFeatures()', function() { it('allows adding features', function() { var source = new ol.source.Vector(); - source.addFeatures([new ol.Feature(), new ol.Feature()]); - expect(goog.object.getCount(source.featureCache_.getFeaturesObject())) - .to.eql(2); + var features = [new ol.Feature()]; + source.addFeatures(features); + expect(source.getFeatures()).to.eql(features); }); }); @@ -88,7 +132,10 @@ goog.require('goog.object'); goog.require('ol.Feature'); goog.require('ol.geom.LineString'); goog.require('ol.geom.Point'); +goog.require('ol.parser.GeoJSON'); +goog.require('ol.proj'); goog.require('ol.source.FeatureCache'); goog.require('ol.source.Source'); goog.require('ol.source.Vector'); goog.require('ol.source.VectorEventType'); +goog.require('ol.source.VectorLoadState'); diff --git a/test/spec/ol/source/vectorsource/single-feature.json b/test/spec/ol/source/vectorsource/single-feature.json new file mode 100644 index 0000000000..5d7944efbe --- /dev/null +++ b/test/spec/ol/source/vectorsource/single-feature.json @@ -0,0 +1,16 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "id": "point_1", + "geometry": { + "coordinates": [1, 2], + "type": "Point" + }, + "properties": { + "name": "point" + } + } + ] +}