blob: 4e0a358331fc0116f918e6f789b3919e5ba154fb [file] [log] [blame] [edit]
/* This file is a part of @mdn/browser-compat-data
* See LICENSE file for more information. */
import assert from 'node:assert/strict';
import { Identifier, CompatStatement } from '../../types/types.js';
import compareStatements from './compare-statements.js';
const tests: { input: Identifier; output: Identifier }[] = [
{
input: {
__compat: {
support: {
chrome: [
{ version_added: '20', prefix: 'webkit' },
{
version_added: '18',
partial_implementation: true,
notes: 'Fries are kind of cold',
},
{
version_added: '10',
version_removed: '18',
partial_implementation: true,
notes: 'No fries with the burger',
},
{
version_added: '12',
flags: [
{
type: 'preference',
name: '#add_fries',
value_to_set: 'Extra Crispy',
},
],
},
{ version_added: '20' },
{
version_added: '11',
version_removed: '12',
prefix: 'moz',
},
],
},
},
},
output: {
__compat: {
support: {
chrome: [
{ version_added: '20' },
{ version_added: '20', prefix: 'webkit' },
{
version_added: '18',
partial_implementation: true,
notes: 'Fries are kind of cold',
},
{
version_added: '12',
flags: [
{
type: 'preference',
name: '#add_fries',
value_to_set: 'Extra Crispy',
},
],
},
{
version_added: '10',
version_removed: '18',
partial_implementation: true,
notes: 'No fries with the burger',
},
{
version_added: '11',
version_removed: '12',
prefix: 'moz',
},
],
},
},
},
},
{
input: {
__compat: {
support: {
chrome: [
{ version_added: '20' },
{ version_added: '30' },
{ version_added: '10' },
{ version_added: '40' },
],
},
},
},
output: {
__compat: {
support: {
chrome: [
{ version_added: '40' },
{ version_added: '30' },
{ version_added: '20' },
{ version_added: '10' },
],
},
},
},
},
] as any;
/**
* Update the order of the statements
* @param key The key of the object (make sure it's '__compat')
* @param value The compat statement to update
* @returns The updated compat statement
*/
const orderStatements = (
key: string,
value: CompatStatement,
): CompatStatement => {
if (key === '__compat') {
for (const browser of Object.keys(value.support)) {
const supportData = value.support[browser];
if (Array.isArray(supportData)) {
value.support[browser] = supportData.sort(compareStatements);
}
}
}
return value;
};
describe('compare-statements script', () => {
it('`compareStatements()` works correctly', () => {
for (const test of tests) {
const expected = test.output;
const actual = JSON.parse(JSON.stringify(test.output), orderStatements);
assert.deepEqual(actual, expected);
}
});
});