prettier/tests_integration/__tests__/support-info.js

69 lines
1.7 KiB
JavaScript

"use strict";
const prettier = require("prettier/local");
const runPrettier = require("../runPrettier");
const snapshotDiff = require("snapshot-diff");
describe("API getSupportInfo()", () => {
const testVersions = [
"0.0.0",
"1.0.0",
"1.4.0",
"1.5.0",
"1.7.1",
"1.8.0",
"1.8.2",
"1.16.0",
undefined
];
testVersions.forEach((version, index) => {
const info = getCoreInfo(version);
if (index === 0) {
test(`with version ${version}`, () => {
expect(info).toMatchSnapshot();
});
} else {
const previousVersion = testVersions[index - 1];
const previousInfo = getCoreInfo(previousVersion);
test(`with version ${previousVersion} -> ${version}`, () => {
expect(snapshotDiff(previousInfo, info)).toMatchSnapshot();
});
}
});
});
describe("CLI --support-info", () => {
runPrettier("cli", "--support-info").test({ status: 0 });
});
function getCoreInfo(version) {
const supportInfo = prettier.getSupportInfo(version);
const languages = supportInfo.languages.reduce(
(obj, language) =>
Object.assign({ [language.name]: language.parsers }, obj),
{}
);
const options = supportInfo.options.reduce(
(obj, option) =>
Object.assign(
{
[option.name]: Object.assign(
{
type: option.type,
default: option.default
},
option.type === "int"
? { range: option.range }
: option.type === "choice"
? { choices: option.choices.map(choice => choice.value) }
: null
)
},
obj
),
{}
);
return { languages, options };
}