diff --git a/js/id/core/entity.js b/js/id/core/entity.js index 8ea60bb31..b0ed5b0f0 100644 --- a/js/id/core/entity.js +++ b/js/id/core/entity.js @@ -73,7 +73,7 @@ iD.Entity.prototype = { var t1 = merged[k], t2 = tags[k]; if (t1 && t1 !== t2) { - merged[k] = t1 + ';' + t2; + merged[k] = _.union(t1.split(/;\s*/), t2.split(/;\s*/)).join(';'); } else { merged[k] = t2; } diff --git a/test/spec/core/entity.js b/test/spec/core/entity.js index 51a89dee4..2cc3cce05 100644 --- a/test/spec/core/entity.js +++ b/test/spec/core/entity.js @@ -88,6 +88,22 @@ describe('iD.Entity', function () { b = a.mergeTags({a: 'b'}); expect(b.tags).to.eql({a: 'a;b'}); }); + + it("combines combined tags", function () { + var a = iD.Entity({tags: {a: 'a;b'}}), + b = iD.Entity({tags: {a: 'b'}}); + + expect(a.mergeTags(b.tags).tags).to.eql({a: 'a;b'}); + expect(b.mergeTags(a.tags).tags).to.eql({a: 'b;a'}); + }); + + it("combines combined tags with whitespace", function () { + var a = iD.Entity({tags: {a: 'a; b'}}), + b = iD.Entity({tags: {a: 'b'}}); + + expect(a.mergeTags(b.tags).tags).to.eql({a: 'a;b'}); + expect(b.mergeTags(a.tags).tags).to.eql({a: 'b;a'}); + }); }); describe("#osmId", function () {