blob: c372777df7dc06953c302e9c165323d3288a6c1e [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 { iterateFeatures } from './traverse.js';
describe('iterateFeatures', () => {
let obj: any;
let options: any;
beforeEach(() => {
obj = {
feature1: {
__compat: {
support: {
chrome: { version_added: '1.0' },
firefox: { version_added: '1.5' },
},
status: {
experimental: false,
standard_track: true,
deprecated: false,
},
},
},
feature2: {
__compat: {
support: {
chrome: { version_added: '2.0' },
firefox: { version_added: null },
},
status: {
experimental: false,
standard_track: true,
deprecated: false,
},
},
},
};
options = {
browsers: ['chrome', 'firefox'],
values: ['1.0', 'null'],
depth: 2,
tag: '',
identifier: '',
status: {
deprecated: undefined,
standard_track: undefined,
experimental: undefined,
},
};
});
it('should yield correct identifiers for given object', () => {
const result = Array.from(
iterateFeatures(
obj,
options.browsers,
options.values,
options.depth,
options.tag,
options.identifier,
),
);
assert.deepEqual(result, ['feature1', 'feature2']);
});
it('should filter out deprecated', () => {
options.status.deprecated = false;
obj.feature2.__compat.status.deprecated = true;
const result = Array.from(
iterateFeatures(
obj,
options.browsers,
options.values,
options.depth,
options.tag,
options.identifier,
options.status,
),
);
assert.deepEqual(result, ['feature1']);
});
it('should filter out non-deprecated', () => {
options.status.deprecated = true;
obj.feature2.__compat.status.deprecated = true;
const result = Array.from(
iterateFeatures(
obj,
options.browsers,
options.values,
options.depth,
options.tag,
options.identifier,
options.status,
),
);
assert.deepEqual(result, ['feature2']);
});
it('should filter out non-experimental', () => {
obj.feature2.__compat.status.experimental = true;
options.status.experimental = true;
const result = Array.from(
iterateFeatures(
obj,
options.browsers,
options.values,
options.depth,
options.tag,
options.identifier,
options.status,
),
);
assert.deepEqual(result, ['feature2']);
});
it('should filter out experimental', () => {
obj.feature2.__compat.status.experimental = true;
options.status.experimental = false;
const result = Array.from(
iterateFeatures(
obj,
options.browsers,
options.values,
options.depth,
options.tag,
options.identifier,
options.status,
),
);
assert.deepEqual(result, ['feature1']);
});
it('should filter out non-standard track', () => {
obj.feature1.__compat.status.standard_track = false;
options.status.standard_track = true;
const result = Array.from(
iterateFeatures(
obj,
options.browsers,
options.values,
options.depth,
options.tag,
options.identifier,
options.status,
),
);
assert.deepEqual(result, ['feature2']);
});
it('should filter out standard track', () => {
obj.feature1.__compat.status.standard_track = false;
options.status.standard_track = false;
const result = Array.from(
iterateFeatures(
obj,
options.browsers,
options.values,
options.depth,
options.tag,
options.identifier,
options.status,
),
);
assert.deepEqual(result, ['feature1']);
});
});