blob: 2967886baff3065945a026f7a18a9c3971b83d4d [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 { CompatStatement } from '../../types/types.js';
import { Logger } from '../utils.js';
import test, { checkExperimental } from './test-status.js';
describe('checkExperimental', () => {
it('should return true when data is not experimental', () => {
const data: CompatStatement = {
status: {
experimental: false,
standard_track: true,
deprecated: false,
},
support: {},
};
assert.equal(checkExperimental(data), true);
});
it('should return true when data is experimental but supported by only one engine', () => {
const data: CompatStatement = {
status: {
experimental: true,
standard_track: true,
deprecated: false,
},
support: {
firefox: {
version_added: '1',
version_removed: null,
},
chrome: {
version_added: 'preview',
version_removed: null,
},
},
};
assert.equal(checkExperimental(data), true);
});
it('should return false when data is experimental and supported by more than one engine', () => {
const data: CompatStatement = {
status: {
experimental: true,
standard_track: true,
deprecated: false,
},
support: {
firefox: {
version_added: '1',
version_removed: null,
},
chrome: {
version_added: '1',
version_removed: null,
},
},
};
assert.equal(checkExperimental(data), false);
});
});
describe('checkStatus', () => {
let logger: Logger;
beforeEach(() => {
logger = new Logger('test', 'test');
});
it('should not log error when status is not defined', () => {
const data: CompatStatement = {
status: undefined,
support: {},
};
test.check(logger, { data, path: { category: 'api' } });
assert.equal(logger.messages.length, 0);
});
it('should log error when category is webextensions and status is defined', () => {
const data: CompatStatement = {
status: {
experimental: false,
standard_track: true,
deprecated: false,
},
support: {},
};
test.check(logger, { data, path: { category: 'webextensions' } });
assert.equal(logger.messages.length, 1);
assert.ok(logger.messages[0].message.includes('not allowed'));
});
it('should log error when status is both experimental and deprecated', () => {
const data: CompatStatement = {
status: {
experimental: true,
standard_track: true,
deprecated: true,
},
support: {},
};
test.check(logger, { data, path: { category: 'api' } });
assert.equal(logger.messages.length, 1);
assert.ok(logger.messages[0].message.includes('Unexpected simultaneous'));
});
it('should log error when status is non-standard but has a spec_url', () => {
const data: CompatStatement = {
status: {
experimental: false,
standard_track: false,
deprecated: false,
},
spec_url: 'https://example.com',
support: {},
};
test.check(logger, { data, path: { category: 'api' } });
assert.equal(logger.messages.length, 1);
assert.ok(logger.messages[0].message.includes('but has a'));
});
it('should log error when status is experimental and supported by more than one engine', () => {
const data: CompatStatement = {
status: {
experimental: true,
standard_track: true,
deprecated: false,
},
support: {
firefox: {
version_added: '1',
version_removed: null,
},
chrome: {
version_added: '1',
version_removed: null,
},
},
};
test.check(logger, { data, path: { category: 'api' } });
assert.equal(logger.messages.length, 1);
assert.ok(logger.messages[0].message.includes('should be set to'));
});
});