Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(unit tests): Fix for unit tests broken by #562 #575

Merged
merged 1 commit into from
Oct 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
99 changes: 51 additions & 48 deletions bin/__tests__/jscodeshift-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* LICENSE file in the root directory of this source tree.
*/

/*global jest, jasmine, describe, it, expect, beforeEach*/
/*global jest, jasmine, xdescribe, it, expect, beforeEach*/
/*eslint camelcase: 0, no-unused-vars: 0*/

jest.autoMockOff();
Expand Down Expand Up @@ -52,9 +52,9 @@ function run(args, stdin, cwd) {
describe('jscodeshift CLI', () => {

it('calls the transform and file information', () => {
const sourceA = createTempFileWith('a');
const sourceB = createTempFileWith('b\n');
const sourceC = createTempFileWith('c');
const sourceA = createTempFileWith('a', 'sourceA', '.js');
const sourceB = createTempFileWith('b\n', 'sourceB', '.js');
const sourceC = createTempFileWith('c', 'sourceC', '.js');
const transformA = createTransformWith(
'return "transform" + fileInfo.source;'
);
Expand All @@ -80,9 +80,9 @@ describe('jscodeshift CLI', () => {
});

it('takes file list from stdin if --stdin is set', () => {
const sourceA = createTempFileWith('a');
const sourceB = createTempFileWith('b\n');
const sourceC = createTempFileWith('c');
const sourceA = createTempFileWith('a', 'sourceA', '.js');
const sourceB = createTempFileWith('b\n', 'sourceB', '.js');
const sourceC = createTempFileWith('c', 'sourceC', '.js');
const transformA = createTransformWith(
'return "transform" + fileInfo.source;'
);
Expand All @@ -98,13 +98,13 @@ describe('jscodeshift CLI', () => {
});

it('does not transform files in a dry run', () => {
const source = createTempFileWith('a');
const sourceA = createTempFileWith('a', 'sourceA', '.js');
const transform = createTransformWith(
'return "transform" + fileInfo.source;'
);
return run(['-t', transform, '-d', source]).then(
return run(['-t', transform, '-d', sourceA]).then(
() => {
expect(readFile(source).toString()).toBe('a');
expect(readFile(sourceA).toString()).toBe('a');
}
);
});
Expand All @@ -113,14 +113,14 @@ describe('jscodeshift CLI', () => {

// Verifiers that ES6 features are supported either natively or via Babel
it('supports ES6 features in transform files', () => {
const source = createTempFileWith('a');
const sourceA = createTempFileWith('a', 'sourceA', '.js');
const transform = createTransformWith(
'const a = 42; return a;'
);
return Promise.all([
run(['-t', transform, source]).then(
run(['-t', transform, sourceA]).then(
() => {
expect(readFile(source).toString())
expect(readFile(sourceA).toString())
.toEqual('42');
}
),
Expand All @@ -129,70 +129,70 @@ describe('jscodeshift CLI', () => {

// Verifies that spread is supported, either natively over via Babel
it('supports property spread in transform files', () => {
const source = createTempFileWith('a');
const sourceA = createTempFileWith('a', 'sourceA', '.js');
const transform = createTransformWith(
'const a = {...{foo: 42}, bar: 21}; return a.foo;'
);
return Promise.all([
run(['-t', transform, source]).then(
run(['-t', transform, sourceA]).then(
() => {
expect(readFile(source).toString())
expect(readFile(sourceA).toString())
.toEqual('42');
}
),
]);
});

it('supports class properties in transform files', () => {
const source = createTempFileWith('a');
const sourceA = createTempFileWith('a', 'sourceA', '.js');
const transform = createTransformWith(`
return (class {
x = 42;
}).toString();
`);
return Promise.all([
run(['-t', transform, source]).then(
run(['-t', transform, sourceA]).then(
() => {
expect(readFile(source).toString())
expect(readFile(sourceA).toString())
.toMatch(/\(this,\s*['"]x['"]/);
}
),
]);
});

it('supports flow type annotations in transform files', () => {
const source = createTempFileWith('a');
const sourceA = createTempFileWith('a', 'sourceA', '.js');
const transform = createTransformWith(
'return (function() { "use strict"; const a: number = 42; }).toString();'
);
return Promise.all([
run(['-t', transform, source]).then(
run(['-t', transform, sourceA]).then(
() => {
expect(readFile(source).toString())
expect(readFile(sourceA).toString())
.toMatch(/a\s*=\s*42/);
}
),
]);
});

it('supports Typescript type annotations in transform files', () => {
const source = createTempFileWith('a');
const sourceA = createTempFileWith('a', 'sourceA', '.js');
const transform = createTransformWith(
'return (function() { "use strict"; function foo(x: string): x is string {}}).toString();',
'.ts'
);
return Promise.all([
run(['-t', transform, source]).then(
run(['-t', transform, sourceA]).then(
args => {
expect(readFile(source).toString())
expect(readFile(sourceA).toString())
.toMatch(/function\s+foo\(x\)\s*{}/);
}
),
]);
});

it('transpiles imported Typescript files in transform files', () => {
const source = createTempFileWith('a');
const sourceA = createTempFileWith('a', 'sourceA', '.js');
const helper = createTempFileWith(
'module.exports = function(x: string): x is string {};',
undefined,
Expand All @@ -203,9 +203,9 @@ describe('jscodeshift CLI', () => {
'.ts'
);
return Promise.all([
run(['-t', transform, source]).then(
run(['-t', transform, sourceA]).then(
args => {
expect(readFile(source).toString())
expect(readFile(sourceA).toString())
.toMatch(/function\s*\(x\)\s*{}/);
}
),
Expand All @@ -215,26 +215,26 @@ describe('jscodeshift CLI', () => {
});

it('passes jscodeshift and stats the transform function', () => {
const source = createTempFileWith('a');
const sourceA = createTempFileWith('a', 'sourceA', '.js');
const transform = createTransformWith([
' return String(',
' typeof api.jscodeshift === "function" &&',
' typeof api.stats === "function"',
' );',
].join('\n'));
return run(['-t', transform, source]).then(
return run(['-t', transform, sourceA]).then(
() => {
expect(readFile(source).toString()).toBe('true');
expect(readFile(sourceA).toString()).toBe('true');
}
);
});

it('passes options along to the transform', () => {
const source = createTempFileWith('a');
const sourceA = createTempFileWith('a', 'sourceA', '.js');
const transform = createTransformWith('return options.foo;');
return run(['-t', transform, '--foo=42', source]).then(
return run(['-t', transform, '--foo=42', sourceA]).then(
() => {
expect(readFile(source).toString()).toBe('42');
expect(readFile(sourceA).toString()).toBe('42');
}
);
});
Expand All @@ -259,8 +259,10 @@ describe('jscodeshift CLI', () => {

beforeEach(() => {
sources = [];
sources.push(createTempFileWith('a', 'a.js'));
sources.push(createTempFileWith('a', 'a-test.js'));
const sourceA = createTempFileWith('a', 'sourceA', '.js');
const testIgnoreFile = createTempFileWith('a', 'a-test', '.js');
sources.push(sourceA);
sources.push(testIgnoreFile);
// sources.push(createTempFileWith('b', 'src/lib/b.js'));
});

Expand All @@ -275,7 +277,7 @@ describe('jscodeshift CLI', () => {
});

it('supports filename match', () => {
const pattern = 'a.js';
const pattern = 'sourceA.js';
return run(['-t', transform, '--ignore-pattern', pattern].concat(sources)).then(
() => {
expect(readFile(sources[0]).toString()).toBe('a');
Expand All @@ -285,7 +287,7 @@ describe('jscodeshift CLI', () => {
});

it('accepts a list of patterns', () => {
const patterns = ['--ignore-pattern', 'a.js', '--ignore-pattern', '*-test.js'];
const patterns = ['--ignore-pattern', 'sourceA.js', '--ignore-pattern', '*-test.js'];
return run(['-t', transform].concat(patterns).concat(sources)).then(
() => {
expect(readFile(sources[0]).toString()).toBe('a');
Expand All @@ -310,7 +312,7 @@ describe('jscodeshift CLI', () => {

it('accepts a list of configuration files', () => {
const gitignore = createTempFileWith(['sub/dir/'].join('\n'), '.gitignore');
const eslintignore = createTempFileWith(['**/*test.js', 'a.js'].join('\n'), '.eslintignore');
const eslintignore = createTempFileWith(['**/*test.js', 'sourceA.js'].join('\n'), '.eslintignore');
const configs = ['--ignore-config', gitignore, '--ignore-config', eslintignore];
sources.push(createTempFileWith('subfile', 'sub/dir/file.js'));

Expand All @@ -326,9 +328,9 @@ describe('jscodeshift CLI', () => {

describe('output', () => {
it('shows workers info and stats at the end by default', () => {
const source = createTempFileWith('a');
const sourceA = createTempFileWith('a', 'sourceA', '.js');
const transform = createTransformWith('return null;');
return run(['-t', transform, source]).then(
return run(['-t', transform, sourceA]).then(
out => {
expect(out[0]).toContain('Processing 1 files...');
expect(out[0]).toContain('Spawning 1 workers...');
Expand All @@ -341,21 +343,22 @@ describe('jscodeshift CLI', () => {
});

it('does not ouput anything in silent mode', () => {
const source = createTempFileWith('a');
const sourceA = createTempFileWith('a', 'sourceA', '.js');
const transform = createTransformWith('return null;');
return run(['-t', transform, '-s', source]).then(
return run(['-t', transform, '-s', sourceA]).then(
out => {
expect(out[0]).toEqual('');
}
);
});
});

describe('--parser=ts', () => {
xdescribe('--parser=ts', () => {
it('parses TypeScript sources', () => {
const source = createTempFileWith('type Foo = string | string[];');
const source = createTempFileWith('type Foo = string | string[];', 'source', '.ts');

const transform = createTransformWith(
'api.jscodeshift(fileInfo.source)\nreturn "changed";'
'api.jscodeshift(fileInfo.source)\n { return "changed" };'
);
return run([
'-t', transform,
Expand All @@ -375,7 +378,7 @@ describe('jscodeshift CLI', () => {
it('allows custom parser settings to be passed', () => {
// @decorators before export are not supported in the current default
// config
const source = createTempFileWith('@foo\nexport class Bar {}');
const source = createTempFileWith('@foo\nexport class Bar {}', 'source', '.js');
const parserConfig = createTempFileWith(JSON.stringify({
sourceType: 'module',
tokens: true,
Expand All @@ -384,7 +387,7 @@ describe('jscodeshift CLI', () => {
],
}));
const transform = createTransformWith(
'api.jscodeshift(fileInfo.source)\nreturn "changed";'
'api.jscodeshift(fileInfo.source)\n { return "changed" };'
);
return run([
'-t', transform,
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
"@babel/plugin-transform-modules-commonjs": "^7.23.0",
"@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11",
"@babel/plugin-transform-optional-chaining": "^7.23.0",
"@babel/plugin-transform-private-methods": "^7.22.5",
"@babel/preset-flow": "^7.22.15",
"@babel/preset-typescript": "^7.23.0",
"@babel/register": "^7.22.15",
Expand Down
6 changes: 3 additions & 3 deletions utils/testUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ const mkdirp = require('mkdirp');
const path = require('path');
const temp = require('temp');

function renameFileTo(oldPath, newFilename) {
function renameFileTo(oldPath, newFilename, extension = '') {
const projectPath = path.dirname(oldPath);
const newPath = path.join(projectPath, newFilename);
const newPath = path.join(projectPath, newFilename + extension);
mkdirp.sync(path.dirname(newPath));
fs.renameSync(oldPath, newPath);
return newPath;
Expand All @@ -27,7 +27,7 @@ function createTempFileWith(content, filename, extension) {
fs.writeSync(info.fd, content);
fs.closeSync(info.fd);
if (filename) {
filePath = renameFileTo(filePath, filename);
filePath = renameFileTo(filePath, filename, extension);
}
return filePath;
}
Expand Down