Browse Source

test: add spec for `child-process-gone` event for utility process (#40304)

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Milan Burda <[email protected]>
trop[bot] 1 year ago
parent
commit
22687c18c4
2 changed files with 22 additions and 2 deletions
  1. 1 1
      docs/api/utility-process.md
  2. 21 1
      spec/api-utility-process-spec.ts

+ 1 - 1
docs/api/utility-process.md

@@ -29,7 +29,7 @@ Process: [Main](../glossary.md#main-process)<br />
     * `inherit`: equivalent to \['ignore', 'inherit', 'inherit']
   * `serviceName` string (optional) - Name of the process that will appear in `name` property of
     [`child-process-gone` event of `app`](app.md#event-child-process-gone).
-    Default is `node.mojom.NodeService`.
+    Default is `Node Utility Process`.
   * `allowLoadingUnsignedLibraries` boolean (optional) _macOS_ - With this flag, the utility process will be
     launched via the `Electron Helper (Plugin).app` helper executable on macOS, which can be
     codesigned with `com.apple.security.cs.disable-library-validation` and

+ 21 - 1
spec/api-utility-process-spec.ts

@@ -1,7 +1,7 @@
 import { expect } from 'chai';
 import * as childProcess from 'node:child_process';
 import * as path from 'node:path';
-import { BrowserWindow, MessageChannelMain, utilityProcess } from 'electron/main';
+import { BrowserWindow, MessageChannelMain, utilityProcess, app } from 'electron/main';
 import { ifit } from './lib/spec-helpers';
 import { closeWindow } from './lib/window-helpers';
 import { once } from 'node:events';
@@ -93,6 +93,26 @@ describe('utilityProcess module', () => {
     });
   });
 
+  describe('app \'child-process-gone\' event', () => {
+    it('with default serviceName', async () => {
+      utilityProcess.fork(path.join(fixturesPath, 'crash.js'));
+      const [, details] = await once(app, 'child-process-gone') as [any, Electron.Details];
+      expect(details.type).to.equal('Utility');
+      expect(details.serviceName).to.equal('node.mojom.NodeService');
+      expect(details.name).to.equal('Node Utility Process');
+      expect(details.reason).to.be.oneOf(['crashed', 'abnormal-exit']);
+    });
+
+    it('with custom serviceName', async () => {
+      utilityProcess.fork(path.join(fixturesPath, 'crash.js'), [], { serviceName: 'Hello World!' });
+      const [, details] = await once(app, 'child-process-gone') as [any, Electron.Details];
+      expect(details.type).to.equal('Utility');
+      expect(details.serviceName).to.equal('node.mojom.NodeService');
+      expect(details.name).to.equal('Hello World!');
+      expect(details.reason).to.be.oneOf(['crashed', 'abnormal-exit']);
+    });
+  });
+
   describe('kill() API', () => {
     it('terminates the child process gracefully', async () => {
       const child = utilityProcess.fork(path.join(fixturesPath, 'endless.js'), [], {