From be9bbd927133aeee7254add81b541f2d9b25eb4d Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Thu, 18 Jan 2018 15:21:38 -0500 Subject: [PATCH] Add tests for member ordering: node, way, relation --- modules/actions/add_member.js | 2 +- test/spec/actions/add_member.js | 24 ++++++++++++++++++++++++ test/spec/actions/split.js | 25 +++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/modules/actions/add_member.js b/modules/actions/add_member.js index 67f1d8b04..a9dfa7ec6 100644 --- a/modules/actions/add_member.js +++ b/modules/actions/add_member.js @@ -38,7 +38,7 @@ export function actionAddMember(relationId, member, memberIndex, insertPair) { // so that `osmJoinWays` can treat the pair like a single way. tempWay = osmWay({ id: 'wTemp', nodes: insertPair.nodes }); graph = graph.replace(tempWay); - var tempMember = { id: tempWay.id, type: 'way', role: '' }; + var tempMember = { id: tempWay.id, type: 'way', role: member.role }; var tempRelation = replaceMemberAll(relation, insertPair.originalID, tempMember); groups = _groupBy(tempRelation.members, function(m) { return m.type; }); groups.way = groups.way || []; diff --git a/test/spec/actions/add_member.js b/test/spec/actions/add_member.js index b2a8486ec..e27ef07e7 100644 --- a/test/spec/actions/add_member.js +++ b/test/spec/actions/add_member.js @@ -177,6 +177,30 @@ describe('iD.actionAddMember', function() { expect(members(graph)).to.eql(['-', '=', '~', '~', '=', '-']); }); + it('reorders members as node, way, relation (for Public Transport routing)', function() { + var graph = iD.coreGraph([ + iD.osmNode({id: 'a', loc: [0, 0]}), + iD.osmNode({id: 'b', loc: [0, 0]}), + iD.osmNode({id: 'c', loc: [0, 0]}), + iD.osmWay({id: '-', nodes: ['a', 'b']}), + iD.osmWay({id: '=', nodes: ['b', 'c']}), + iD.osmRelation({id: 'r', members: [ + { id: 'n1', type: 'node', role: 'forward' }, + { id: '-', type: 'way', role: 'forward' }, + { id: 'r1', type: 'relation', role: 'forward' }, + { id: 'n2', type: 'node', role: 'forward' } + ]}) + ]); + + graph = iD.actionAddMember('r', { id: '=', type: 'way', role: 'forward' })(graph); + expect(graph.entity('r').members).to.eql([ + { id: 'n1', type: 'node', role: 'forward' }, + { id: 'n2', type: 'node', role: 'forward' }, + { id: '-', type: 'way', role: 'forward' }, + { id: '=', type: 'way', role: 'forward' }, + { id: 'r1', type: 'relation', role: 'forward' } + ]); + }); }); }); diff --git a/test/spec/actions/split.js b/test/spec/actions/split.js index febf47d72..8e536a754 100644 --- a/test/spec/actions/split.js +++ b/test/spec/actions/split.js @@ -446,6 +446,31 @@ describe('iD.actionSplit', function () { graph = iD.actionSplit('b', ['='])(graph); expect(members(graph)).to.eql(['~', '=', '-']); }); + + it('reorders members as node, way, relation (for Public Transport routing)', function () { + var graph = iD.coreGraph([ + iD.osmNode({ id: 'a', loc: [0, 0] }), + iD.osmNode({ id: 'b', loc: [1, 0] }), + iD.osmNode({ id: 'c', loc: [2, 0] }), + iD.osmWay({ id: '-', nodes: ['a', 'b', 'c'] }), + iD.osmRelation({id: 'r', members: [ + { id: 'n1', type: 'node', role: 'forward' }, + { id: '-', type: 'way', role: 'forward' }, + { id: 'r1', type: 'relation', role: 'forward' }, + { id: 'n2', type: 'node', role: 'forward' } + ]}) + ]); + + graph = iD.actionSplit('b', ['='])(graph); + + expect(graph.entity('r').members).to.eql([ + { id: 'n1', type: 'node', role: 'forward' }, + { id: 'n2', type: 'node', role: 'forward' }, + { id: '-', type: 'way', role: 'forward' }, + { id: '=', type: 'way', role: 'forward' }, + { id: 'r1', type: 'relation', role: 'forward'} + ]); + }); }); describe('splitting out-and-back routes', function () {