prevent degenerate ways caused by deleting a corner of a triangle (#10003)

This commit is contained in:
Kyℓe Hensel
2025-02-06 00:38:03 +11:00
committed by GitHub
parent ce0eca32db
commit a2e347ac97
4 changed files with 11 additions and 3 deletions

View File

@@ -278,10 +278,11 @@ describe('iD.actionCircularize', function () {
var graph = iD.coreGraph([
iD.osmNode({id: 'a', loc: [0, 0]}),
iD.osmNode({id: 'b', loc: [0, 2]}),
iD.osmWay({id: '-', nodes: ['a', 'b', 'a']})
iD.osmNode({id: 'c', loc: [2, 0]}),
iD.osmWay({id: '-', nodes: ['a', 'b', 'c', 'a']})
]);
expect(area('-', graph)).to.eql(0);
expect(area('-', graph)).to.eql(2);
graph = iD.actionCircularize('-', projection)(graph);

View File

@@ -473,6 +473,10 @@ describe('iD.osmWay', function() {
expect(iD.osmWay({nodes: ['a', 'b']}).isDegenerate()).to.equal(false);
});
it('returns true for a linear way that doubles back on itself', function () {
expect(iD.osmWay({nodes: ['a', 'b', 'a']}).isDegenerate()).to.equal(true);
});
it('returns true for an area with zero, one, or two unique nodes', function () {
expect(iD.osmWay({tags: {area: 'yes'}, nodes: []}).isDegenerate()).to.equal(true);
expect(iD.osmWay({tags: {area: 'yes'}, nodes: ['a', 'a']}).isDegenerate()).to.equal(true);