@@ -98,7 +98,10 @@ describe("ElectronMenu", () => {
9898 const electronMenu = yield * ElectronMenu . ElectronMenu ;
9999 const selectedItemId = yield * electronMenu . showContextMenu ( {
100100 window : makeWindow ( 2 ) ,
101- items : [ { id : "copy" , label : "Copy" } ] ,
101+ items : [
102+ { id : "copy" , label : "Copy" } ,
103+ { id : "delete" , label : "Delete" , destructive : true , separatorBefore : true } ,
104+ ] ,
102105 position : Option . some ( { x : 10.8 , y : 20.2 } ) ,
103106 } ) ;
104107
@@ -110,6 +113,38 @@ describe("ElectronMenu", () => {
110113 enabled : true ,
111114 click : buildFromTemplateMock . mock . calls [ 0 ] ?. [ 0 ] [ 0 ] . click ,
112115 } ) ;
116+ assert . deepEqual (
117+ buildFromTemplateMock . mock . calls [ 0 ] ?. [ 0 ] . map (
118+ ( item : Electron . MenuItemConstructorOptions ) => item . type ?? item . label ,
119+ ) ,
120+ [ "Copy" , "separator" , "Delete" ] ,
121+ ) ;
122+ } ) . pipe ( Effect . provide ( TestLayer ) ) ,
123+ ) ;
124+
125+ it . effect ( "keeps a preceding non-destructive action in the destructive section" , ( ) =>
126+ Effect . gen ( function * ( ) {
127+ buildFromTemplateMock . mockImplementation ( ( ) => ( {
128+ popup : ( options : Electron . PopupOptions ) => options . callback ?.( ) ,
129+ } ) ) ;
130+
131+ const electronMenu = yield * ElectronMenu . ElectronMenu ;
132+ yield * electronMenu . showContextMenu ( {
133+ window : makeWindow ( ) ,
134+ items : [
135+ { id : "copy" , label : "Copy" } ,
136+ { id : "archive" , label : "Archive" , separatorBefore : true } ,
137+ { id : "delete" , label : "Delete" , destructive : true } ,
138+ ] ,
139+ position : Option . none ( ) ,
140+ } ) ;
141+
142+ assert . deepEqual (
143+ buildFromTemplateMock . mock . calls [ 0 ] ?. [ 0 ] . map (
144+ ( item : Electron . MenuItemConstructorOptions ) => item . type ?? item . label ,
145+ ) ,
146+ [ "Copy" , "separator" , "Archive" , "Delete" ] ,
147+ ) ;
113148 } ) . pipe ( Effect . provide ( TestLayer ) ) ,
114149 ) ;
115150
0 commit comments