goog.provide('ol.test.format.GPX'); describe('ol.format.GPX', function() { var format; beforeEach(function() { format = new ol.format.GPX(); }); describe('readFeatures', function() { describe('rte', function() { it('can read an empty rte', function() { var text = '' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(1); var f = fs[0]; expect(f).to.be.an(ol.Feature); var g = f.getGeometry(); expect(g).to.be.an(ol.geom.LineString); expect(g.getCoordinates()).to.eql([]); expect(g.getLayout()).to.be(ol.geom.GeometryLayout.XYZM); }); it('can read and write various rte attributes', function() { var text = '' + ' ' + ' Name' + ' Comment' + ' Description' + ' Source' + ' ' + ' Link text' + ' Link type' + ' ' + ' 1' + ' Type' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(1); var f = fs[0]; expect(f).to.be.an(ol.Feature); expect(f.get('name')).to.be('Name'); expect(f.get('cmt')).to.be('Comment'); expect(f.get('desc')).to.be('Description'); expect(f.get('src')).to.be('Source'); expect(f.get('link')).to.be('http://example.com/'); expect(f.get('linkText')).to.be('Link text'); expect(f.get('linkType')).to.be('Link type'); expect(f.get('number')).to.be(1); expect(f.get('type')).to.be('Type'); var serialized = format.writeFeatures(fs); expect(serialized).to.xmleql(ol.xml.load(text)); }); it('can read and write a rte with multiple rtepts', function() { var text = '' + ' ' + ' ' + ' ' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(1); var f = fs[0]; expect(f).to.be.an(ol.Feature); var g = f.getGeometry(); expect(g).to.be.an(ol.geom.LineString); expect(g.getCoordinates()).to.eql([[2, 1, 0, 0], [4, 3, 0, 0]]); expect(g.getLayout()).to.be(ol.geom.GeometryLayout.XYZM); var serialized = format.writeFeatures(fs); expect(serialized).to.xmleql(ol.xml.load(text)); }); }); describe('trk', function() { it('can read an empty trk', function() { var text = '' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(1); var f = fs[0]; expect(f).to.be.an(ol.Feature); var g = f.getGeometry(); expect(g).to.be.an(ol.geom.MultiLineString); expect(g.getCoordinates()).to.eql([]); expect(g.getLayout()).to.be(ol.geom.GeometryLayout.XYZM); }); it('can read and write various trk attributes', function() { var text = '' + ' ' + ' Name' + ' Comment' + ' Description' + ' Source' + ' ' + ' Link text' + ' Link type' + ' ' + ' 1' + ' Type' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(1); var f = fs[0]; expect(f).to.be.an(ol.Feature); expect(f.get('name')).to.be('Name'); expect(f.get('cmt')).to.be('Comment'); expect(f.get('desc')).to.be('Description'); expect(f.get('src')).to.be('Source'); expect(f.get('link')).to.be('http://example.com/'); expect(f.get('linkText')).to.be('Link text'); expect(f.get('linkType')).to.be('Link type'); expect(f.get('number')).to.be(1); expect(f.get('type')).to.be('Type'); var serialized = format.writeFeatures(fs); expect(serialized).to.xmleql(ol.xml.load(text)); }); it('can read and write a trk with an empty trkseg', function() { var text = '' + ' ' + ' ' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(1); var f = fs[0]; expect(f).to.be.an(ol.Feature); var g = f.getGeometry(); expect(g).to.be.an(ol.geom.MultiLineString); expect(g.getCoordinates()).to.eql([[]]); expect(g.getLayout()).to.be(ol.geom.GeometryLayout.XYZM); var serialized = format.writeFeatures(fs); expect(serialized).to.xmleql(ol.xml.load(text)); }); it('can read/write a trk with a trkseg with multiple trkpts', function() { var text = '' + ' ' + ' ' + ' ' + ' 3' + ' ' + ' ' + ' ' + ' 7' + ' ' + ' ' + ' ' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(1); var f = fs[0]; expect(f).to.be.an(ol.Feature); var g = f.getGeometry(); expect(g).to.be.an(ol.geom.MultiLineString); expect(g.getCoordinates()).to.eql([ [[2, 1, 3, 1263115752], [6, 5, 7, 1263115812]] ]); expect(g.getLayout()).to.be(ol.geom.GeometryLayout.XYZM); var serialized = format.writeFeatures(fs); expect(serialized).to.xmleql(ol.xml.load(text)); }); it('can read and write a trk with multiple trksegs', function() { var text = '' + ' ' + ' ' + ' ' + ' 3' + ' ' + ' ' + ' ' + ' 7' + ' ' + ' ' + ' ' + ' ' + ' ' + ' 10' + ' ' + ' ' + ' ' + ' 13' + ' ' + ' ' + ' ' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(1); var f = fs[0]; expect(f).to.be.an(ol.Feature); var g = f.getGeometry(); expect(g).to.be.an(ol.geom.MultiLineString); expect(g.getCoordinates()).to.eql([ [[2, 1, 3, 1263115752], [6, 5, 7, 1263115812]], [[9, 8, 10, 1263115872], [12, 11, 13, 1263115932]] ]); expect(g.getLayout()).to.be(ol.geom.GeometryLayout.XYZM); var serialized = format.writeFeatures(fs); expect(serialized).to.xmleql(ol.xml.load(text)); }); }); describe('wpt', function() { it('can read and write a wpt', function() { var text = '' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(1); var f = fs[0]; expect(f).to.be.an(ol.Feature); var g = f.getGeometry(); expect(g).to.be.an(ol.geom.Point); expect(g.getCoordinates()).to.eql([2, 1, 0, 0]); expect(g.getLayout()).to.be(ol.geom.GeometryLayout.XYZM); var serialized = format.writeFeatures(fs); expect(serialized).to.xmleql(ol.xml.load(text)); }); it('can read and write a wpt with ele', function() { var text = '' + ' ' + ' 3' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(1); var f = fs[0]; expect(f).to.be.an(ol.Feature); var g = f.getGeometry(); expect(g).to.be.an(ol.geom.Point); expect(g.getCoordinates()).to.eql([2, 1, 3, 0]); expect(g.getLayout()).to.be(ol.geom.GeometryLayout.XYZM); var serialized = format.writeFeatures(fs); expect(serialized).to.xmleql(ol.xml.load(text)); }); it('can read and write a wpt with time', function() { var text = '' + ' ' + ' ' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(1); var f = fs[0]; expect(f).to.be.an(ol.Feature); var g = f.getGeometry(); expect(g).to.be.an(ol.geom.Point); expect(g.getCoordinates()).to.eql([2, 1, 0, 1263115752]); expect(g.getLayout()).to.be(ol.geom.GeometryLayout.XYZM); var serialized = format.writeFeatures(fs); expect(serialized).to.xmleql(ol.xml.load(text)); }); it('can read and write a wpt with ele and time', function() { var text = '' + ' ' + ' 3' + ' ' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(1); var f = fs[0]; expect(f).to.be.an(ol.Feature); var g = f.getGeometry(); expect(g).to.be.an(ol.geom.Point); expect(g.getCoordinates()).to.eql([2, 1, 3, 1263115752]); expect(g.getLayout()).to.be(ol.geom.GeometryLayout.XYZM); var serialized = format.writeFeatures(fs); expect(serialized).to.xmleql(ol.xml.load(text)); }); it('can read and write various wpt attributes', function() { var text = '' + ' ' + ' 11' + ' 4' + ' Name' + ' Comment' + ' Description' + ' Source' + ' ' + ' Link text' + ' Link type' + ' ' + ' Symbol' + ' Type' + ' 2d' + ' 5' + ' 6' + ' 7' + ' 8' + ' 9' + ' 10' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(1); var f = fs[0]; expect(f).to.be.an(ol.Feature); expect(f.get('magvar')).to.be(11); expect(f.get('geoidheight')).to.be(4); expect(f.get('name')).to.be('Name'); expect(f.get('cmt')).to.be('Comment'); expect(f.get('desc')).to.be('Description'); expect(f.get('src')).to.be('Source'); expect(f.get('link')).to.be('http://example.com/'); expect(f.get('linkText')).to.be('Link text'); expect(f.get('linkType')).to.be('Link type'); expect(f.get('sym')).to.be('Symbol'); expect(f.get('type')).to.be('Type'); expect(f.get('fix')).to.be('2d'); expect(f.get('hdop')).to.be(6); expect(f.get('vdop')).to.be(7); expect(f.get('pdop')).to.be(8); expect(f.get('ageofdgpsdata')).to.be(9); expect(f.get('dgpsid')).to.be(10); var serialized = format.writeFeatures(fs); expect(serialized).to.xmleql(ol.xml.load(text)); }); }); describe('XML namespace support', function() { beforeEach(function() { format = new ol.format.GPX(); }); it('can read features with a version 1.0 namespace', function() { var text = '' + ' ' + ' ' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(3); }); it('can read features with a version 1.1 namespace', function() { var text = '' + ' ' + ' ' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(3); }); it('can read features with no namespace', function() { var text = '' + ' ' + ' ' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(3); }); }); describe('extensions support', function() { beforeEach(function() { format = new ol.format.GPX({ readExtensions: function(feature, extensionsNode) { var nodes = extensionsNode.getElementsByTagName('id'); var id = nodes.item(0).textContent; feature.setId(id); } }); }); it('can process extensions from wpt', function() { var text = '' + ' ' + ' ' + ' feature-id' + ' ' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(1); var feature = fs[0]; expect(feature.getId()).to.be('feature-id'); }); it('can process extensions from rte', function() { var text = '' + ' ' + ' ' + ' bar' + ' feature-id' + ' ' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(1); var feature = fs[0]; expect(feature.getId()).to.be('feature-id'); }); it('can process extensions from trk, not trkpt', function() { var text = '' + ' ' + ' ' + ' feature-id' + ' ' + ' ' + ' ' + ' ' + ' another-feature-id' + ' ' + ' ' + ' ' + ' ' + ''; var fs = format.readFeatures(text); expect(fs).to.have.length(1); var feature = fs[0]; expect(feature.getId()).to.be('feature-id'); }); }); }); }); goog.require('ol.Feature'); goog.require('ol.format.GPX'); goog.require('ol.geom.LineString'); goog.require('ol.geom.MultiLineString'); goog.require('ol.geom.Point'); goog.require('ol.xml');