blob: 00bc6aafa0dc7ef5dc212a47ab6c831ba60de9f3 [file] [log] [blame]
/* This file is a part of @mdn/browser-compat-data
* See LICENSE file for more information. */
/** @import {Identifier, CompatStatement} from '../../types/types.js' */
import assert from 'node:assert/strict';
import compareStatements from './compare-statements.js';
/** @type {{ input: Identifier; output: Identifier }[]} */
const tests = /** @type {*} */ ([
{
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' },
],
},
},
},
},
{
input: {
__compat: {
support: {
chrome: [{ version_added: '10' }, { version_added: 'preview' }],
},
},
},
output: {
__compat: {
support: {
chrome: [{ version_added: 'preview' }, { version_added: '10' }],
},
},
},
},
]);
/**
* Update the order of the statements
* @param {string} key The key of the object (make sure it's '__compat')
* @param {CompatStatement} value The compat statement to update
* @returns {CompatStatement} The updated compat statement
*/
const orderStatements = (key, value) => {
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);
}
});
});