ipsambeatae
Version:
Shared dependencies of Compass, the MongoDB extension for VSCode and MongoSH
64 lines (53 loc) • 1.9 kB
text/typescript
import { expect } from 'chai';
import * as acorn from 'acorn';
import { STAGE_OPERATORS } from './stage-operators';
// Replaces any placeholder with a variable,
// the resulting snippet should always be parseable.
function replacePlaceholders(snippet: string): string {
return snippet
.replace(/\${\d+:?[A-z1-9.()]*}/g, 'x')
.replace(/\.\.\./g, 'rest');
}
describe('stage operators', function () {
STAGE_OPERATORS.forEach((operator) => {
it(`${operator.name} has a properly formatted comment`, function () {
expect(
operator.comment.startsWith('/**\n'),
'expected comment to be open'
).to.be.true;
const commentLines = operator.comment.split('\n');
commentLines.shift();
commentLines.pop();
commentLines.pop();
for (const commentLine of commentLines) {
expect(
/^ \*( |$)/.test(commentLine),
'expected comment to be indented properly'
).to.be.true;
const spaces =
/^ */.exec(commentLine.replace(/^ \* ?/, ''))?.[0].length ?? -1;
expect(spaces % 2, 'expected comment to be indented properly').to.equal(
0
);
}
expect(
operator.comment.endsWith('\n */\n'),
'expected comment to be closed properly'
).to.be.true;
});
it(`${operator.name} has a properly formatted snippet`, function () {
const snippet = replacePlaceholders(operator.snippet);
expect(
() => acorn.parseExpressionAt(snippet, 0, { ecmaVersion: 'latest' }),
'expected snippet to parse'
).not.to.throw();
const snippetLines = snippet.split('\n');
for (const snippetLine of snippetLines) {
const spaces = /^ */.exec(snippetLine)?.[0].length ?? -1;
expect(spaces % 2, 'expected snippet to be indented properly').to.equal(
0
);
}
});
});
});