diff --git a/dist/__snapshots__/oscd-designer.spec.snap.js b/dist/__snapshots__/oscd-designer.spec.snap.js index a533bc1..fb165d4 100644 --- a/dist/__snapshots__/oscd-designer.spec.snap.js +++ b/dist/__snapshots__/oscd-designer.spec.snap.js @@ -246,8 +246,8 @@ snapshots["Designer given conducting equipment grounds equipment on connection p esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -423,8 +423,8 @@ snapshots["Designer given conducting equipment connects equipment on connection esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -688,8 +688,8 @@ snapshots["Designer given conducting equipment connects equipment on connect men esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -965,8 +965,8 @@ snapshots["Designer given conducting equipment with established connectivity uni esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -1180,8 +1180,8 @@ snapshots["Designer given conducting equipment with established connectivity con esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -1357,8 +1357,8 @@ snapshots["Designer given conducting equipment with established connectivity avo esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -1641,8 +1641,8 @@ snapshots["Designer given conducting equipment with established connectivity kee esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -1816,8 +1816,8 @@ snapshots["Designer given conducting equipment with established connectivity bet esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -2001,8 +2001,8 @@ snapshots["Designer given conducting equipment with established connectivity bet esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -2321,8 +2321,8 @@ snapshots["Designer given conducting equipment with established connectivity bet esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -2621,8 +2621,8 @@ snapshots["Designer given conducting equipment with established connectivity bet esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -2855,8 +2855,8 @@ snapshots["Designer given conducting equipment with established connectivity bet esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -3024,8 +3024,8 @@ snapshots["Designer given conducting equipment with established connectivity bet esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -3151,8 +3151,8 @@ snapshots["Designer given conducting equipment with established connectivity bet esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -3384,8 +3384,8 @@ snapshots["Designer given conducting equipment with established connectivity bet esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -3521,8 +3521,8 @@ snapshots["Designer given conducting equipment with established connectivity bet esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -3785,8 +3785,8 @@ snapshots["Designer given conducting equipment with established connectivity bet esld:lx="22" esld:ly="7" esld:rot="3" - esld:x="22" - esld:y="7" + esld:x="21" + esld:y="6" name="SMC1" type="SMC" > @@ -4078,8 +4078,8 @@ snapshots["Designer given conducting equipment with established connectivity bet esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -4977,6 +4977,17 @@ snapshots["Designer given a voltage level opens a menu on voltage level right cl Resize + + + Copy + + + copy_all + + + + + Copy + + + copy_all + + @@ -5721,8 +5743,8 @@ snapshots["Designer given conducting equipment with established connectivity bet esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -6235,8 +6257,8 @@ snapshots["Designer given conducting equipment with established connectivity bet esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -6418,8 +6440,8 @@ snapshots["Designer given conducting equipment retargets grounded terminals when esld:lx="22" esld:ly="8" esld:rot="3" - esld:x="22" - esld:y="8" + esld:x="21" + esld:y="7" name="SMC1" type="SMC" > @@ -6436,3 +6458,1638 @@ snapshots["Designer given conducting equipment retargets grounded terminals when `; /* end snapshot Designer given conducting equipment retargets grounded terminals when reparenting equipment */ +snapshots["Designer given conducting equipment copies equipment on shift click"] = +` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +`; +/* end snapshot Designer given conducting equipment copies equipment on shift click */ + +snapshots["Designer given conducting equipment with established connectivity between more than two pieces of equipment and a bus bar copies equipment on shift click"] = +` + + + + + +
+ + + + +
+
+ + + + +
+
+ + + + +
+
+
+
+ + + + + + + + + +
+ + + + +
+
+ + + + + + +
+
+ + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+
+
+
+
+
+
+`; +/* end snapshot Designer given conducting equipment with established connectivity between more than two pieces of equipment and a bus bar copies equipment on shift click */ + +snapshots["Designer given conducting equipment with established connectivity between more than two pieces of equipment and a bus bar copies equipment on copy menu item select"] = +` + + + + + +
+ + + + +
+
+ + + + +
+
+ + + + +
+
+
+
+ + + + + + + + + +
+ + + + +
+
+ + + + + + +
+
+ + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+
+
+
+
+
+
+`; +/* end snapshot Designer given conducting equipment with established connectivity between more than two pieces of equipment and a bus bar copies equipment on copy menu item select */ + +snapshots["Designer given conducting equipment with established connectivity between more than two pieces of equipment and a bus bar copies bays on copy menu item select"] = +` + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+
+
+
+ + + +
+ + + + +
+
+ + + + +
+
+ + + + +
+
+
+
+ + + + + + + +
+ + + + +
+
+ + + + + + +
+
+ + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+
+
+
+
+
+
+`; +/* end snapshot Designer given conducting equipment with established connectivity between more than two pieces of equipment and a bus bar copies bays on copy menu item select */ + +snapshots["Designer given conducting equipment with established connectivity between more than two pieces of equipment and a bus bar copies voltage levels on move handle shift click"] = +` + + + + + + + + + + + + + +
+ + + + +
+
+ + + + +
+
+ + + + +
+
+
+
+ + + + + + + +
+ + + + +
+
+ + + + + + +
+
+ + + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+
+
+
+
+
+
+`; +/* end snapshot Designer given conducting equipment with established connectivity between more than two pieces of equipment and a bus bar copies voltage levels on move handle shift click */ + diff --git a/oscd-designer.spec.ts b/oscd-designer.spec.ts index b883c6a..e56c018 100644 --- a/oscd-designer.spec.ts +++ b/oscd-designer.spec.ts @@ -69,7 +69,7 @@ export const equipmentDocString = ` - + @@ -316,7 +316,7 @@ describe('Designer', () => { expect(voltageLevel).to.have.attribute('smth:h', '7'); }); - it('allows moving voltage levels', async () => { + it('moves voltage levels on move handle click', async () => { const sldEditor = element.shadowRoot!.querySelector('sld-editor')!; const moveHandle = @@ -376,7 +376,7 @@ describe('Designer', () => { const sldEditor = element.shadowRoot!.querySelector('sld-editor')!; const item = sldEditor.shadowRoot!.querySelector( - 'mwc-list-item:nth-of-type(2)' + 'mwc-list-item:nth-last-of-type(5)' )!; item.selected = true; await element.updateComplete; @@ -417,7 +417,7 @@ describe('Designer', () => { element.shadowRoot!.querySelector('sld-editor')!; await element.updateComplete; sldEditor.shadowRoot!.querySelector( - 'mwc-list-item:nth-of-type(3)' + 'mwc-list-item:nth-last-of-type(4)' )!.selected = true; await sldEditor.updateComplete; expect(element) @@ -512,7 +512,9 @@ describe('Designer', () => { expect(bus).to.have.attribute('y', '3'); expect(bus).to.have.attribute('smth:w', '1'); expect(bus).to.have.attribute('h', '8'); - expect(bus).dom.to.equalSnapshot({ ignoreAttributes: ['esld:uuid'] }); + await expect(bus).dom.to.equalSnapshot({ + ignoreAttributes: ['esld:uuid'], + }); }); }); @@ -602,7 +604,7 @@ describe('Designer', () => { expect(voltageLevel).to.have.attribute('esld:h', '13'); }); - it('allows moving bays', async () => { + it('moves bays on move handle click', async () => { const sldEditor = element.shadowRoot!.querySelector('sld-editor')!; sldEditor @@ -654,7 +656,7 @@ describe('Designer', () => { await sendMouse({ type: 'click', position: [600, 200] }); expect(element).to.have.property('placing', undefined); expect(cNode).to.have.attribute('pathName', 'S1/V2/B2/L1'); - expect(element.doc.documentElement).dom.to.equalSnapshot({ + await expect(element.doc.documentElement).dom.to.equalSnapshot({ ignoreAttributes: ['esld:uuid'], }); }); @@ -807,6 +809,30 @@ describe('Designer', () => { expect(equipment).to.have.attribute('esld:y', '3'); }); + it('copies equipment on shift click', async () => { + const sldEditor = + element.shadowRoot!.querySelector('sld-editor')!; + const equipment = element.doc.querySelector('ConductingEquipment'); + const id = identity(equipment); + const eqClickTarget = sldEditor + .shadowRoot!.getElementById(id)! + .querySelector('rect')!; + eqClickTarget.dispatchEvent( + new PointerEvent('click', { shiftKey: true }) + ); + expect(element.doc.querySelector('ConductingEquipment[*|x="3"][*|y="3"]')) + .to.not.exist; + await sendMouse({ type: 'click', position: [150, 180] }); + expect( + element.doc.querySelector('ConductingEquipment[*|x="3"][*|y="3"]') + ).to.exist.and.have.attribute('type', equipment!.getAttribute('type')!); + expect(equipment).to.have.attribute('esld:x', '4'); + expect(equipment).to.have.attribute('esld:y', '4'); + await expect(element.doc.documentElement).dom.to.equalSnapshot({ + ignoreAttributes: ['esld:uuid'], + }); + }); + it('rotates equipment on middle mouse button click', () => { const sldEditor = element.shadowRoot!.querySelector('sld-editor')!; @@ -890,7 +916,7 @@ describe('Designer', () => { eqClickTarget.dispatchEvent(new PointerEvent('contextmenu')); await element.updateComplete; const item = sldEditor.shadowRoot!.querySelector( - 'mwc-list-item:nth-of-type(7)' + 'mwc-list-item:nth-last-of-type(5)' )!; item.selected = true; await element.updateComplete; @@ -1592,6 +1618,38 @@ describe('Designer', () => { }); }); + it('copies equipment on copy menu item select', async () => { + queryUI({ + scl: 'ConductingEquipment', + ui: 'rect', + }).dispatchEvent(new PointerEvent('contextmenu')); + await element.updateComplete; + const sldEditor = + element.shadowRoot!.querySelector('sld-editor')!; + sldEditor.shadowRoot!.querySelector( + 'mwc-list-item:nth-last-of-type(6)' + )!.selected = true; + expect( + element.doc.querySelector('ConductingEquipment[*|x="3"][*|y="3"]') + ).to.not.exist; + expect( + element.doc.querySelector('ConductingEquipment') + ).to.have.attribute('esld:x', '4'); + expect( + element.doc.querySelector('ConductingEquipment') + ).to.have.attribute('esld:y', '4'); + await sendMouse({ type: 'click', position: [150, 180] }); + expect( + element.doc.querySelector('ConductingEquipment[*|x="3"][*|y="3"]') + ).to.exist; + expect( + element.doc.querySelector('ConductingEquipment[*|x="4"][*|y="4"]') + ).to.exist; + await expect(element.doc.documentElement).dom.to.equalSnapshot({ + ignoreAttributes: ['esld:uuid'], + }); + }); + it('moves the bus bar on move menu item select', async () => { queryUI({ scl: '[name="L"]', @@ -1673,6 +1731,45 @@ describe('Designer', () => { ignoreAttributes: ['esld:uuid'], }); }); + + it('copies bays on copy menu item select', async () => { + queryUI({ + scl: '[name="V2"] [name="B1"]', + ui: 'rect', + }).dispatchEvent(new PointerEvent('contextmenu')); + await element.updateComplete; + const sldEditor = + element.shadowRoot!.querySelector('sld-editor')!; + sldEditor.shadowRoot!.querySelector( + 'mwc-list-item:nth-last-of-type(6)' + )!.selected = true; + expect(element.doc.querySelector('[name="V1"] [name="B2"]')).not.to + .exist; + await sendMouse({ type: 'click', position: [280, 350] }); + expect(element.doc.querySelector('[name="V1"] [name="B2"]')).to + .exist; + await expect(element.doc.documentElement).dom.to.equalSnapshot({ + ignoreAttributes: ['esld:uuid'], + }); + }); + + it('copies voltage levels on move handle shift click', async () => { + queryUI({ + scl: '[name="V1"]', + ui: '.handle', + }).dispatchEvent(new PointerEvent('click', { shiftKey: true })); + expect(element.doc.querySelector('[name="V1"] [name="B2"]')).not.to + .exist; + element + .shadowRoot!.querySelector