feat: add signal option to dialog.showMessageBox (#26102)
* mac: add dialog.closeMessageBox API * win: Implement dialog.closeMessageBox * mac: Return cancelId with closeMessageBox * gtk: Implement dialog.closeMessageBox * win: Fix 32bit build * win: Reduce the scope of lock * fix: Build error after rebase * feat: Use AbortSignal to close message box * chore: silently handle duplicate ID * win: Add more notes about the threads * chore: apply reviews * fix: base::NoDestructor should be warpped in function * chore: fix style on windows
This commit is contained in:
parent
4b780f9770
commit
05ba6359d0
9 changed files with 276 additions and 24 deletions
|
@ -1,7 +1,7 @@
|
|||
import { expect } from 'chai';
|
||||
import { dialog, BrowserWindow } from 'electron/main';
|
||||
import { closeAllWindows } from './window-helpers';
|
||||
import { ifit } from './spec-helpers';
|
||||
import { ifit, delay } from './spec-helpers';
|
||||
|
||||
describe('dialog module', () => {
|
||||
describe('showOpenDialog', () => {
|
||||
|
@ -121,6 +121,62 @@ describe('dialog module', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('showMessageBox with signal', () => {
|
||||
afterEach(closeAllWindows);
|
||||
|
||||
it('closes message box immediately', async () => {
|
||||
const controller = new AbortController();
|
||||
const signal = controller.signal;
|
||||
const w = new BrowserWindow();
|
||||
const p = dialog.showMessageBox(w, { signal, message: 'i am message' });
|
||||
controller.abort();
|
||||
const result = await p;
|
||||
expect(result.response).to.equal(0);
|
||||
});
|
||||
|
||||
it('closes message box after a while', async () => {
|
||||
const controller = new AbortController();
|
||||
const signal = controller.signal;
|
||||
const w = new BrowserWindow();
|
||||
const p = dialog.showMessageBox(w, { signal, message: 'i am message' });
|
||||
await delay(500);
|
||||
controller.abort();
|
||||
const result = await p;
|
||||
expect(result.response).to.equal(0);
|
||||
});
|
||||
|
||||
it('cancels message box', async () => {
|
||||
const controller = new AbortController();
|
||||
const signal = controller.signal;
|
||||
const w = new BrowserWindow();
|
||||
const p = dialog.showMessageBox(w, {
|
||||
signal,
|
||||
message: 'i am message',
|
||||
buttons: ['OK', 'Cancel'],
|
||||
cancelId: 1
|
||||
});
|
||||
controller.abort();
|
||||
const result = await p;
|
||||
expect(result.response).to.equal(1);
|
||||
});
|
||||
|
||||
it('cancels message box after a while', async () => {
|
||||
const controller = new AbortController();
|
||||
const signal = controller.signal;
|
||||
const w = new BrowserWindow();
|
||||
const p = dialog.showMessageBox(w, {
|
||||
signal,
|
||||
message: 'i am message',
|
||||
buttons: ['OK', 'Cancel'],
|
||||
cancelId: 1
|
||||
});
|
||||
await delay(500);
|
||||
controller.abort();
|
||||
const result = await p;
|
||||
expect(result.response).to.equal(1);
|
||||
});
|
||||
});
|
||||
|
||||
describe('showErrorBox', () => {
|
||||
it('throws errors when the options are invalid', () => {
|
||||
expect(() => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue