Replace node-module 'tempfile' seamlessly with 'tmp' (#4777)

This commit is contained in:
d4vidi
2025-06-11 13:55:12 +03:00
committed by GitHub
parent 79af43909f
commit 76c7952479
26 changed files with 134 additions and 27 deletions
+2 -1
View File
@@ -2,9 +2,10 @@ const path = require('path');
const fs = require('fs-extra');
const _ = require('lodash');
const tempfile = require('tempfile');
const yargs = require('yargs');
const tempfile = require('../src/utils/tempfile');
function callCli(modulePath, cmd) {
return new Promise((resolve, reject) => {
const originalModule = require(path.join(__dirname, '../local-cli', modulePath));
+2 -2
View File
@@ -1,6 +1,6 @@
const tempfile = require('tempfile');
const { callCli } = require('../__tests__/helpers');
const tempfile = require('../src/utils/tempfile');
describe('build', () => {
let execSync, detox;
+2 -1
View File
@@ -659,7 +659,8 @@ describe('CLI', () => {
// Helpers
function tempfile(extension, content) {
const tempFilePath = require('tempfile')(extension);
const _tempfile = require('../src/utils/tempfile');
const tempFilePath = _tempfile(extension);
fs.ensureFileSync(tempFilePath);
if (content) {
+1 -1
View File
@@ -98,7 +98,7 @@
"stream-json": "^1.7.4",
"strip-ansi": "^6.0.1",
"telnet-client": "1.2.8",
"tempfile": "^2.0.0",
"tmp": "^0.2.1",
"trace-event-lib": "^1.3.1",
"which": "^1.3.1",
"ws": "^7.0.0",
+2 -2
View File
@@ -9,7 +9,7 @@ describe('AndroidExpect', () => {
beforeEach(() => {
jest.mock('../utils/logger');
jest.mock('tempfile');
jest.mock('../utils/tempfile');
jest.mock('fs-extra');
mockExecutor = new MockExecutor();
@@ -341,7 +341,7 @@ describe('AndroidExpect', () => {
mockExecutor.executeResult = Promise.resolve(invokeResultInBase64);
fs = require('fs-extra');
tempfile = require('tempfile');
tempfile = require('../utils/tempfile');
tempfile.mockReturnValue(tempFilePath);
_element = e.element(e.by.id('FancyElement'));
+2 -1
View File
@@ -1,13 +1,14 @@
const path = require('path');
const fs = require('fs-extra');
const tempfile = require('tempfile');
const DetoxRuntimeError = require('../../errors/DetoxRuntimeError');
const invoke = require('../../invoke');
const { removeMilliseconds } = require('../../utils/dateUtils');
const { actionDescription } = require('../../utils/invocationTraceDescriptions');
const mapLongPressArguments = require('../../utils/mapLongPressArguments');
const tempfile = require('../../utils/tempfile');
const actions = require('../actions/native');
const DetoxMatcherApi = require('../espressoapi/DetoxMatcher');
const { ActionInteraction } = require('../interactions/native');
@@ -5,9 +5,10 @@ const path = require('path');
const fs = require('fs-extra');
const _ = require('lodash');
const tempfile = require('tempfile');
const childProcess = require('../../../utils/childProcess');
const tempfile = require('../../../utils/tempfile');
describe('SimulatorLogPlugin', () => {
async function majorWorkflow() {
@@ -2,9 +2,10 @@
const path = require('path');
const fs = require('fs-extra');
const tempfile = require('tempfile');
const appendFile = require('../../../utils/appendFile');
const tempfile = require('../../../utils/tempfile');
const Artifact = require('./Artifact');
@@ -1,6 +1,7 @@
const fs = require('fs-extra');
const _ = require('lodash');
const tempfile = require('tempfile');
const tempfile = require('../../../utils/tempfile');
describe('FileArtifact', () => {
let FileArtifact, fileArtifact, logger, temporaryPath, temporaryData, destinationPath;
+2 -1
View File
@@ -3,9 +3,10 @@ const { promisify } = require('util');
const glob = require('glob');
const _ = require('lodash');
const tempfile = require('tempfile');
const { useForwardSlashes } = require('../../utils/shellUtils');
const tempfile = require('../../utils/tempfile');
const globSync = glob.sync;
const globAsync = promisify(glob);
@@ -1,7 +1,8 @@
const path = require('path');
const fs = require('fs-extra');
const tempfile = require('tempfile');
const tempfile = require('../../utils/tempfile');
const temporaryPath = require('./temporaryPath');
+2 -1
View File
@@ -2,10 +2,11 @@
jest.useFakeTimers('modern');
const { serializeError } = require('serialize-error');
const tempfile = require('tempfile');
const { validSession } = require('../configuration/configurations.mock');
const Deferred = require('../utils/Deferred');
const tempfile = require('../utils/tempfile');
const actions = require('./actions/actions');
@@ -1,5 +1,6 @@
const fs = require('fs-extra');
const tempfile = require('tempfile');
const tempfile = require('../../utils/tempfile');
const DeviceRegistry = require('./DeviceRegistry'); // Adjust the path to your actual file
+2 -1
View File
@@ -3,7 +3,7 @@ const path = require('path');
const fs = require('fs-extra');
const _ = require('lodash');
const tempfile = require('tempfile');
const { assertTraceDescription, assertEnum, assertNormalized } = require('../utils/assertArgument');
const { removeMilliseconds } = require('../utils/dateUtils');
@@ -11,6 +11,7 @@ const { actionDescription, expectDescription } = require('../utils/invocationTra
const { isRegExp } = require('../utils/isRegExp');
const log = require('../utils/logger').child({ cat: 'ws-client, ws' });
const mapLongPressArguments = require('../utils/mapLongPressArguments');
const tempfile = require('../utils/tempfile');
const traceInvocationCall = require('../utils/traceInvocationCall').bind(null, log);
const { systemElement, systemMatcher, systemExpect, isSystemElement } = require('./system');
+2 -2
View File
@@ -11,8 +11,8 @@ describe('expectTwo', () => {
beforeEach(() => {
jest.mock('../utils/logger');
jest.mock('../utils/tempfile');
jest.mock('fs-extra');
jest.mock('tempfile');
fs = require('fs-extra');
const IosExpect = require('./expectTwo');
@@ -690,7 +690,7 @@ describe('expectTwo', () => {
screenshotPath: deviceTmpFilePath,
});
require('tempfile').mockReturnValue(tmpFilePath);
require('../utils/tempfile').mockReturnValue(tmpFilePath);
result = await e.element(e.by.id('uniqueId')).takeScreenshot(imageName);
});
+2 -1
View File
@@ -8,9 +8,10 @@ const os = require('os');
const fs = require('fs-extra');
const _ = require('lodash');
const tempfile = require('tempfile');
const sleep = require('../utils/sleep');
const tempfile = require('../utils/tempfile');
jest.retryTimes(2);
@@ -5,9 +5,9 @@ const { PassThrough } = require('stream');
const fs = require('fs-extra');
const glob = require('glob');
const tempfile = require('tempfile');
const temporary = require('../../artifacts/utils/temporaryPath');
const tempfile = require('../../utils/tempfile');
const DetoxLogger = require('../DetoxLogger');
const DetoxLogFinalizer = require('./DetoxLogFinalizer');
@@ -1,5 +1,6 @@
const fs = require('fs-extra');
const tempfile = require('tempfile');
const tempfile = require('../../../utils/tempfile');
describe('BunyanTransformer', () => {
/** @type {import('./BunyanTransformer')} */
+2 -1
View File
@@ -2,9 +2,10 @@ jest.mock('proper-lockfile');
const fs = require('fs-extra');
const plock = require('proper-lockfile');
const tempfile = require('tempfile');
const ExclusiveLockFile = require('./ExclusiveLockfile');
const tempfile = require('./tempfile');
describe('ExclusiveLockFile', () => {
let filePath;
+2 -1
View File
@@ -1,7 +1,8 @@
const fs = require('fs-extra');
const tempfile = require('tempfile');
const appendFile = require('./appendFile');
const tempfile = require('./tempfile');
describe('appendFile', () => {
let src, dest;
+2 -1
View File
@@ -3,7 +3,8 @@ const path = require('path');
const fs = require('fs-extra');
const _ = require('lodash');
const tempfile = require('tempfile');
const tempfile = require('./tempfile');
describe('Environment', () => {
let Environment;
+2 -1
View File
@@ -1,9 +1,10 @@
const path = require('path');
const fs = require('fs-extra');
const tempfile = require('tempfile');
const fsext = require('./fsext');
const tempfile = require('./tempfile');
test('isDirEmptySync', async () => {
const tempDir = tempfile();
+18
View File
@@ -0,0 +1,18 @@
const tmp = require('tmp');
tmp.setGracefulCleanup();
/**
* Creates a temporary file path. If extension is provided, it will be appended to the path.
* @param {string} [extension] - Optional file extension to append to the temporary file path
* @returns {string} Path to a temporary file
*/
module.exports = function(extension) {
const _extension = (extension && extension.startsWith('.'))
? extension
: (extension && `.${extension}`);
return tmp.tmpNameSync({
template: `detox-${process.pid}-XXXXXX${_extension || ''}`,
});
};
+72
View File
@@ -0,0 +1,72 @@
describe('tempfile', () => {
let tmp;
let tempfile;
describe('in full integration with tmp module', () => {
beforeEach(() => {
jest.restoreAllMocks();
tempfile = require('./tempfile');
});
it('should work with the real tmp module', () => {
const tmpdir = require('node:os').tmpdir();
const path = require('node:path');
const expectedFile = path.join(tmpdir, `detox-${process.pid}-[a-zA-Z0-9]+.log`).replace(/\\/g, '\\\\');
const expectedResult = new RegExp(`^${expectedFile}$`);
const result = tempfile('.log');
expect(result).toMatch(expectedResult);
});
});
describe('with mocked tmp module', () => {
beforeEach(() => {
jest.mock('tmp');
tmp = require('tmp');
tempfile = require('./tempfile');
});
const expectTmpCalled = ({ withExtension = '' } = {}) => {
const template = `detox-${process.pid}-XXXXXX${withExtension}`;
expect(tmp.tmpNameSync).toHaveBeenCalledWith({ template });
};
it(`should enable tmp's graceful cleanup`, () => {
expect(tmp.setGracefulCleanup).toHaveBeenCalled();
});
it('should return the value from tmp.tmpNameSync', () => {
const mockPath = '/tmp/detox-123-abc123';
tmp.tmpNameSync.mockReturnValueOnce(mockPath);
const result = tempfile();
expect(result).toEqual(mockPath);
});
it('should create a temporary file path without extension', () => {
tempfile();
expectTmpCalled();
});
it('should create a temporary file path with extension', () => {
tempfile('txt');
expectTmpCalled({ withExtension: '.txt' });
});
it('should handle extension with leading dot', () => {
tempfile('.txt');
expectTmpCalled({ withExtension: '.txt' });
});
it('should handle empty extension', () => {
tempfile('');
expectTmpCalled();
});
it('should handle undefined extension', () => {
tempfile();
expectTmpCalled();
});
});
});
@@ -1,6 +1,6 @@
const temporaryPath = require('detox/src/artifacts/utils/temporaryPath');
const DeviceDriverBase = require('detox/src/devices/runtime/drivers/DeviceDriverBase');
const tempfile = require('tempfile');
const tempfile = require('../../../src/utils/tempfile');
const {
sleepSomeTime,
@@ -1,7 +1,7 @@
const path = require('path');
const _ = require('lodash');
const tempfile = require('tempfile');
const tempfile = require('../../src/utils/tempfile');
const fs = require('fs-extra');
const { promisify } = require('util');
const { execCommand } = require('./utils/exec');