| /* 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); |
| } |
| }); |
| }); |