diff --git a/spec-main/api-process-spec.ts b/spec-main/api-process-spec.ts new file mode 100644 index 00000000000..cb0fe9bede5 --- /dev/null +++ b/spec-main/api-process-spec.ts @@ -0,0 +1,124 @@ +import * as fs from 'fs'; +import * as path from 'path'; +import { expect } from 'chai'; +import { BrowserWindow } from 'electron'; +import { defer, ifdescribe } from './spec-helpers'; +import { app } from 'electron/main'; +import { closeAllWindows } from './window-helpers'; + +describe('renderer process module', () => { + let w: BrowserWindow; + before(async () => { + w = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true, contextIsolation: false } }); + await w.loadURL('about:blank'); + }); + after(closeAllWindows); + + describe('process.getCreationTime()', () => { + it('returns a creation time', async () => { + const creationTime = await w.webContents.executeJavaScript('process.getCreationTime()'); + expect(creationTime).to.be.a('number').and.be.at.least(0); + }); + }); + + describe('process.getCPUUsage()', () => { + it('returns a cpu usage object', async () => { + const cpuUsage = await w.webContents.executeJavaScript('process.getCPUUsage()'); + expect(cpuUsage.percentCPUUsage).to.be.a('number'); + expect(cpuUsage.idleWakeupsPerSecond).to.be.a('number'); + }); + }); + + ifdescribe(process.platform !== 'darwin')('process.getIOCounters()', () => { + it('returns an io counters object', async () => { + const ioCounters = await w.webContents.executeJavaScript('process.getIOCounters()'); + expect(ioCounters.readOperationCount).to.be.a('number'); + expect(ioCounters.writeOperationCount).to.be.a('number'); + expect(ioCounters.otherOperationCount).to.be.a('number'); + expect(ioCounters.readTransferCount).to.be.a('number'); + expect(ioCounters.writeTransferCount).to.be.a('number'); + expect(ioCounters.otherTransferCount).to.be.a('number'); + }); + }); + + describe('process.getBlinkMemoryInfo()', () => { + it('returns blink memory information object', async () => { + const heapStats = await w.webContents.executeJavaScript('process.getBlinkMemoryInfo()'); + expect(heapStats.allocated).to.be.a('number'); + expect(heapStats.total).to.be.a('number'); + }); + }); + + describe('process.getProcessMemoryInfo()', () => { + it('resolves promise successfully with valid data', async () => { + const memoryInfo = await w.webContents.executeJavaScript('process.getProcessMemoryInfo()'); + expect(memoryInfo).to.be.an('object'); + if (process.platform === 'linux' || process.platform === 'win32') { + expect(memoryInfo.residentSet).to.be.a('number').greaterThan(0); + } + expect(memoryInfo.private).to.be.a('number').greaterThan(0); + // Shared bytes can be zero + expect(memoryInfo.shared).to.be.a('number').greaterThan(-1); + }); + }); + + describe('process.getSystemMemoryInfo()', () => { + it('returns system memory info object', async () => { + const systemMemoryInfo = await w.webContents.executeJavaScript('process.getSystemMemoryInfo()'); + expect(systemMemoryInfo.free).to.be.a('number'); + expect(systemMemoryInfo.total).to.be.a('number'); + }); + }); + + describe('process.getSystemVersion()', () => { + it('returns a string', async () => { + const systemVersion = await w.webContents.executeJavaScript('process.getSystemVersion()'); + expect(systemVersion).to.be.a('string'); + }); + }); + + describe('process.getHeapStatistics()', () => { + it('returns heap statistics object', async () => { + const heapStats = await w.webContents.executeJavaScript('process.getHeapStatistics()'); + expect(heapStats.totalHeapSize).to.be.a('number'); + expect(heapStats.totalHeapSizeExecutable).to.be.a('number'); + expect(heapStats.totalPhysicalSize).to.be.a('number'); + expect(heapStats.totalAvailableSize).to.be.a('number'); + expect(heapStats.usedHeapSize).to.be.a('number'); + expect(heapStats.heapSizeLimit).to.be.a('number'); + expect(heapStats.mallocedMemory).to.be.a('number'); + expect(heapStats.peakMallocedMemory).to.be.a('number'); + expect(heapStats.doesZapGarbage).to.be.a('boolean'); + }); + }); + + describe('process.takeHeapSnapshot()', () => { + it('returns true on success', async () => { + const filePath = path.join(app.getPath('temp'), 'test.heapsnapshot'); + defer(() => { + try { + fs.unlinkSync(filePath); + } catch (e) { + // ignore error + } + }); + + const success = await w.webContents.executeJavaScript(`process.takeHeapSnapshot(${JSON.stringify(filePath)})`); + expect(success).to.be.true(); + const stats = fs.statSync(filePath); + expect(stats.size).not.to.be.equal(0); + }); + + it('returns false on failure', async () => { + const success = await w.webContents.executeJavaScript('process.takeHeapSnapshot("")'); + expect(success).to.be.false(); + }); + }); + + describe('process.contextId', () => { + it('is a string', async () => { + const contextId = await w.webContents.executeJavaScript('process.contextId'); + expect(contextId).to.be.a('string'); + }); + }); +}); diff --git a/spec/api-process-spec.js b/spec/api-process-spec.js deleted file mode 100644 index 80291074132..00000000000 --- a/spec/api-process-spec.js +++ /dev/null @@ -1,124 +0,0 @@ -const { ipcRenderer } = require('electron'); -const fs = require('fs'); -const path = require('path'); - -const { expect } = require('chai'); - -describe('process module', () => { - describe('process.getCreationTime()', () => { - it('returns a creation time', () => { - const creationTime = process.getCreationTime(); - expect(creationTime).to.be.a('number').and.be.at.least(0); - }); - }); - - describe('process.getCPUUsage()', () => { - it('returns a cpu usage object', () => { - const cpuUsage = process.getCPUUsage(); - expect(cpuUsage.percentCPUUsage).to.be.a('number'); - expect(cpuUsage.idleWakeupsPerSecond).to.be.a('number'); - }); - }); - - describe('process.getIOCounters()', () => { - before(function () { - if (process.platform === 'darwin') { - this.skip(); - } - }); - - it('returns an io counters object', () => { - const ioCounters = process.getIOCounters(); - expect(ioCounters.readOperationCount).to.be.a('number'); - expect(ioCounters.writeOperationCount).to.be.a('number'); - expect(ioCounters.otherOperationCount).to.be.a('number'); - expect(ioCounters.readTransferCount).to.be.a('number'); - expect(ioCounters.writeTransferCount).to.be.a('number'); - expect(ioCounters.otherTransferCount).to.be.a('number'); - }); - }); - - describe('process.getBlinkMemoryInfo()', () => { - it('returns blink memory information object', () => { - const heapStats = process.getBlinkMemoryInfo(); - expect(heapStats.allocated).to.be.a('number'); - expect(heapStats.total).to.be.a('number'); - }); - }); - - describe('process.getProcessMemoryInfo()', async () => { - it('resolves promise successfully with valid data', async () => { - const memoryInfo = await process.getProcessMemoryInfo(); - expect(memoryInfo).to.be.an('object'); - if (process.platform === 'linux' || process.platform === 'windows') { - expect(memoryInfo.residentSet).to.be.a('number').greaterThan(0); - } - expect(memoryInfo.private).to.be.a('number').greaterThan(0); - // Shared bytes can be zero - expect(memoryInfo.shared).to.be.a('number').greaterThan(-1); - }); - }); - - describe('process.getSystemMemoryInfo()', () => { - it('returns system memory info object', () => { - const systemMemoryInfo = process.getSystemMemoryInfo(); - expect(systemMemoryInfo.free).to.be.a('number'); - expect(systemMemoryInfo.total).to.be.a('number'); - }); - }); - - describe('process.getSystemVersion()', () => { - it('returns a string', () => { - expect(process.getSystemVersion()).to.be.a('string'); - }); - }); - - describe('process.getHeapStatistics()', () => { - it('returns heap statistics object', () => { - const heapStats = process.getHeapStatistics(); - expect(heapStats.totalHeapSize).to.be.a('number'); - expect(heapStats.totalHeapSizeExecutable).to.be.a('number'); - expect(heapStats.totalPhysicalSize).to.be.a('number'); - expect(heapStats.totalAvailableSize).to.be.a('number'); - expect(heapStats.usedHeapSize).to.be.a('number'); - expect(heapStats.heapSizeLimit).to.be.a('number'); - expect(heapStats.mallocedMemory).to.be.a('number'); - expect(heapStats.peakMallocedMemory).to.be.a('number'); - expect(heapStats.doesZapGarbage).to.be.a('boolean'); - }); - }); - - describe('process.takeHeapSnapshot()', () => { - it('returns true on success', async () => { - const filePath = path.join(await ipcRenderer.invoke('get-temp-dir'), 'test.heapsnapshot'); - - const cleanup = () => { - try { - fs.unlinkSync(filePath); - } catch (e) { - // ignore error - } - }; - - try { - const success = process.takeHeapSnapshot(filePath); - expect(success).to.be.true(); - const stats = fs.statSync(filePath); - expect(stats.size).not.to.be.equal(0); - } finally { - cleanup(); - } - }); - - it('returns false on failure', () => { - const success = process.takeHeapSnapshot(''); - expect(success).to.be.false(); - }); - }); - - describe('process.contextId', () => { - it('is a string', () => { - expect(process.contextId).to.be.a('string'); - }); - }); -});