Skip to content

Commit 3fbd95d

Browse files
authored
Replace node-module 'tempfile' seamlessly with 'tmp' (#4777)
1 parent c8724e6 commit 3fbd95d

26 files changed

+134
-27
lines changed

detox/__tests__/helpers.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ const path = require('path');
22

33
const fs = require('fs-extra');
44
const _ = require('lodash');
5-
const tempfile = require('tempfile');
65
const yargs = require('yargs');
76

7+
const tempfile = require('../src/utils/tempfile');
8+
89
function callCli(modulePath, cmd) {
910
return new Promise((resolve, reject) => {
1011
const originalModule = require(path.join(__dirname, '../local-cli', modulePath));

detox/local-cli/build.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
const tempfile = require('tempfile');
2-
31
const { callCli } = require('../__tests__/helpers');
2+
const tempfile = require('../src/utils/tempfile');
3+
44

55
describe('build', () => {
66
let execSync, detox;

detox/local-cli/test.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -659,7 +659,8 @@ describe('CLI', () => {
659659
// Helpers
660660

661661
function tempfile(extension, content) {
662-
const tempFilePath = require('tempfile')(extension);
662+
const _tempfile = require('../src/utils/tempfile');
663+
const tempFilePath = _tempfile(extension);
663664

664665
fs.ensureFileSync(tempFilePath);
665666
if (content) {

detox/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@
9898
"stream-json": "^1.7.4",
9999
"strip-ansi": "^6.0.1",
100100
"telnet-client": "1.2.8",
101-
"tempfile": "^2.0.0",
101+
"tmp": "^0.2.1",
102102
"trace-event-lib": "^1.3.1",
103103
"which": "^1.3.1",
104104
"ws": "^7.0.0",

detox/src/android/AndroidExpect.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ describe('AndroidExpect', () => {
99

1010
beforeEach(() => {
1111
jest.mock('../utils/logger');
12-
jest.mock('tempfile');
12+
jest.mock('../utils/tempfile');
1313
jest.mock('fs-extra');
1414

1515
mockExecutor = new MockExecutor();
@@ -341,7 +341,7 @@ describe('AndroidExpect', () => {
341341
mockExecutor.executeResult = Promise.resolve(invokeResultInBase64);
342342

343343
fs = require('fs-extra');
344-
tempfile = require('tempfile');
344+
tempfile = require('../utils/tempfile');
345345
tempfile.mockReturnValue(tempFilePath);
346346

347347
_element = e.element(e.by.id('FancyElement'));

detox/src/android/core/NativeElement.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
const path = require('path');
22

33
const fs = require('fs-extra');
4-
const tempfile = require('tempfile');
4+
55

66
const DetoxRuntimeError = require('../../errors/DetoxRuntimeError');
77
const invoke = require('../../invoke');
88
const { removeMilliseconds } = require('../../utils/dateUtils');
99
const { actionDescription } = require('../../utils/invocationTraceDescriptions');
1010
const mapLongPressArguments = require('../../utils/mapLongPressArguments');
11+
const tempfile = require('../../utils/tempfile');
1112
const actions = require('../actions/native');
1213
const DetoxMatcherApi = require('../espressoapi/DetoxMatcher');
1314
const { ActionInteraction } = require('../interactions/native');

detox/src/artifacts/log/ios/SimulatorLogPlugin.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ const path = require('path');
55

66
const fs = require('fs-extra');
77
const _ = require('lodash');
8-
const tempfile = require('tempfile');
98

109
const childProcess = require('../../../utils/childProcess');
10+
const tempfile = require('../../../utils/tempfile');
11+
1112

1213
describe('SimulatorLogPlugin', () => {
1314
async function majorWorkflow() {

detox/src/artifacts/templates/artifact/FileArtifact.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
const path = require('path');
33

44
const fs = require('fs-extra');
5-
const tempfile = require('tempfile');
65

76
const appendFile = require('../../../utils/appendFile');
7+
const tempfile = require('../../../utils/tempfile');
8+
89

910
const Artifact = require('./Artifact');
1011

detox/src/artifacts/templates/artifact/FileArtifact.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const fs = require('fs-extra');
22
const _ = require('lodash');
3-
const tempfile = require('tempfile');
3+
4+
const tempfile = require('../../../utils/tempfile');
45

56
describe('FileArtifact', () => {
67
let FileArtifact, fileArtifact, logger, temporaryPath, temporaryData, destinationPath;

detox/src/artifacts/utils/temporaryPath.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ const { promisify } = require('util');
33

44
const glob = require('glob');
55
const _ = require('lodash');
6-
const tempfile = require('tempfile');
76

87
const { useForwardSlashes } = require('../../utils/shellUtils');
8+
const tempfile = require('../../utils/tempfile');
9+
910

1011
const globSync = glob.sync;
1112
const globAsync = promisify(glob);

detox/src/artifacts/utils/temporaryPath.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
const path = require('path');
22

33
const fs = require('fs-extra');
4-
const tempfile = require('tempfile');
4+
5+
const tempfile = require('../../utils/tempfile');
56

67
const temporaryPath = require('./temporaryPath');
78

detox/src/client/Client.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22
jest.useFakeTimers('modern');
33

44
const { serializeError } = require('serialize-error');
5-
const tempfile = require('tempfile');
5+
66

77
const { validSession } = require('../configuration/configurations.mock');
88
const Deferred = require('../utils/Deferred');
9+
const tempfile = require('../utils/tempfile');
910

1011
const actions = require('./actions/actions');
1112

detox/src/devices/allocation/DeviceRegistry.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const fs = require('fs-extra');
2-
const tempfile = require('tempfile');
2+
3+
const tempfile = require('../../utils/tempfile');
34

45
const DeviceRegistry = require('./DeviceRegistry'); // Adjust the path to your actual file
56

detox/src/ios/expectTwo.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ const path = require('path');
33

44
const fs = require('fs-extra');
55
const _ = require('lodash');
6-
const tempfile = require('tempfile');
6+
77

88
const { assertTraceDescription, assertEnum, assertNormalized } = require('../utils/assertArgument');
99
const { removeMilliseconds } = require('../utils/dateUtils');
1010
const { actionDescription, expectDescription } = require('../utils/invocationTraceDescriptions');
1111
const { isRegExp } = require('../utils/isRegExp');
1212
const log = require('../utils/logger').child({ cat: 'ws-client, ws' });
1313
const mapLongPressArguments = require('../utils/mapLongPressArguments');
14+
const tempfile = require('../utils/tempfile');
1415
const traceInvocationCall = require('../utils/traceInvocationCall').bind(null, log);
1516

1617
const { systemElement, systemMatcher, systemExpect, isSystemElement } = require('./system');

detox/src/ios/expectTwo.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ describe('expectTwo', () => {
1111

1212
beforeEach(() => {
1313
jest.mock('../utils/logger');
14+
jest.mock('../utils/tempfile');
1415
jest.mock('fs-extra');
15-
jest.mock('tempfile');
1616

1717
fs = require('fs-extra');
1818
const IosExpect = require('./expectTwo');
@@ -690,7 +690,7 @@ describe('expectTwo', () => {
690690
screenshotPath: deviceTmpFilePath,
691691
});
692692

693-
require('tempfile').mockReturnValue(tmpFilePath);
693+
require('../utils/tempfile').mockReturnValue(tmpFilePath);
694694
result = await e.element(e.by.id('uniqueId')).takeScreenshot(imageName);
695695
});
696696

detox/src/logger/DetoxLogger.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ const os = require('os');
88

99
const fs = require('fs-extra');
1010
const _ = require('lodash');
11-
const tempfile = require('tempfile');
1211

1312
const sleep = require('../utils/sleep');
13+
const tempfile = require('../utils/tempfile');
14+
1415

1516
jest.retryTimes(2);
1617

detox/src/logger/utils/DetoxLogFinalizer.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ const { PassThrough } = require('stream');
55

66
const fs = require('fs-extra');
77
const glob = require('glob');
8-
const tempfile = require('tempfile');
98

109
const temporary = require('../../artifacts/utils/temporaryPath');
10+
const tempfile = require('../../utils/tempfile');
1111
const DetoxLogger = require('../DetoxLogger');
1212

1313
const DetoxLogFinalizer = require('./DetoxLogFinalizer');

detox/src/logger/utils/streams/BunyanTransformer.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const fs = require('fs-extra');
2-
const tempfile = require('tempfile');
2+
3+
const tempfile = require('../../../utils/tempfile');
34

45
describe('BunyanTransformer', () => {
56
/** @type {import('./BunyanTransformer')} */

detox/src/utils/ExclusiveLockfile.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ jest.mock('proper-lockfile');
22

33
const fs = require('fs-extra');
44
const plock = require('proper-lockfile');
5-
const tempfile = require('tempfile');
65

76
const ExclusiveLockFile = require('./ExclusiveLockfile');
7+
const tempfile = require('./tempfile');
8+
89

910
describe('ExclusiveLockFile', () => {
1011
let filePath;

detox/src/utils/appendFile.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
const fs = require('fs-extra');
2-
const tempfile = require('tempfile');
32

43
const appendFile = require('./appendFile');
4+
const tempfile = require('./tempfile');
5+
56

67
describe('appendFile', () => {
78
let src, dest;

detox/src/utils/environment.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ const path = require('path');
33

44
const fs = require('fs-extra');
55
const _ = require('lodash');
6-
const tempfile = require('tempfile');
6+
7+
const tempfile = require('./tempfile');
78

89
describe('Environment', () => {
910
let Environment;

detox/src/utils/fsext.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
const path = require('path');
22

33
const fs = require('fs-extra');
4-
const tempfile = require('tempfile');
54

65
const fsext = require('./fsext');
6+
const tempfile = require('./tempfile');
7+
78

89
test('isDirEmptySync', async () => {
910
const tempDir = tempfile();

detox/src/utils/tempfile.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
const tmp = require('tmp');
2+
3+
tmp.setGracefulCleanup();
4+
5+
/**
6+
* Creates a temporary file path. If extension is provided, it will be appended to the path.
7+
* @param {string} [extension] - Optional file extension to append to the temporary file path
8+
* @returns {string} Path to a temporary file
9+
*/
10+
module.exports = function(extension) {
11+
const _extension = (extension && extension.startsWith('.'))
12+
? extension
13+
: (extension && `.${extension}`);
14+
15+
return tmp.tmpNameSync({
16+
template: `detox-${process.pid}-XXXXXX${_extension || ''}`,
17+
});
18+
};

detox/src/utils/tempfile.test.js

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
describe('tempfile', () => {
2+
let tmp;
3+
let tempfile;
4+
5+
describe('in full integration with tmp module', () => {
6+
beforeEach(() => {
7+
jest.restoreAllMocks();
8+
tempfile = require('./tempfile');
9+
});
10+
11+
it('should work with the real tmp module', () => {
12+
const tmpdir = require('node:os').tmpdir();
13+
const path = require('node:path');
14+
15+
const expectedFile = path.join(tmpdir, `detox-${process.pid}-[a-zA-Z0-9]+.log`).replace(/\\/g, '\\\\');
16+
const expectedResult = new RegExp(`^${expectedFile}$`);
17+
18+
const result = tempfile('.log');
19+
expect(result).toMatch(expectedResult);
20+
});
21+
});
22+
23+
describe('with mocked tmp module', () => {
24+
beforeEach(() => {
25+
jest.mock('tmp');
26+
tmp = require('tmp');
27+
tempfile = require('./tempfile');
28+
});
29+
30+
const expectTmpCalled = ({ withExtension = '' } = {}) => {
31+
const template = `detox-${process.pid}-XXXXXX${withExtension}`;
32+
expect(tmp.tmpNameSync).toHaveBeenCalledWith({ template });
33+
};
34+
35+
it(`should enable tmp's graceful cleanup`, () => {
36+
expect(tmp.setGracefulCleanup).toHaveBeenCalled();
37+
});
38+
39+
it('should return the value from tmp.tmpNameSync', () => {
40+
const mockPath = '/tmp/detox-123-abc123';
41+
tmp.tmpNameSync.mockReturnValueOnce(mockPath);
42+
43+
const result = tempfile();
44+
expect(result).toEqual(mockPath);
45+
});
46+
47+
it('should create a temporary file path without extension', () => {
48+
tempfile();
49+
expectTmpCalled();
50+
});
51+
52+
it('should create a temporary file path with extension', () => {
53+
tempfile('txt');
54+
expectTmpCalled({ withExtension: '.txt' });
55+
});
56+
57+
it('should handle extension with leading dot', () => {
58+
tempfile('.txt');
59+
expectTmpCalled({ withExtension: '.txt' });
60+
});
61+
62+
it('should handle empty extension', () => {
63+
tempfile('');
64+
expectTmpCalled();
65+
});
66+
67+
it('should handle undefined extension', () => {
68+
tempfile();
69+
expectTmpCalled();
70+
});
71+
});
72+
});

detox/test/integration/stub/StubRuntimeDriver.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const temporaryPath = require('detox/src/artifacts/utils/temporaryPath');
22
const DeviceDriverBase = require('detox/src/devices/runtime/drivers/DeviceDriverBase');
3-
const tempfile = require('tempfile');
3+
const tempfile = require('../../../src/utils/tempfile');
44

55
const {
66
sleepSomeTime,

detox/test/integration/timeline-artifact.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const path = require('path');
22

33
const _ = require('lodash');
4-
const tempfile = require('tempfile');
4+
const tempfile = require('../../src/utils/tempfile');
55
const fs = require('fs-extra');
66
const { promisify } = require('util');
77
const { execCommand } = require('./utils/exec');

0 commit comments

Comments
 (0)