[go: nahoru, domu]

blob: 1d686f6a1fab8d6bda924f35295920ed81a7811d [file] [log] [blame]
// Copyright 2022 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// eslint-disable-next-line rulesdir/es_modules_import
import idl from '@webref/idl';
import * as assert from 'assert';
import {SPECS} from './config.js';
import {addMetadata, getIDLProps, minimize} from './get-props.js';
import {getMissingTypes} from './util.js';
describe('DOM pinned properties dataset generation', function() {
let output;
this.beforeEach(async () => {
const files = await idl.listAll();
const names = Object.keys(SPECS);
const specs = await Promise.all(names.map(name => files[name].parse().then(idls => ({name, idls}))));
output = addMetadata(getIDLProps(specs));
});
it('doesn\'t have missing types', () => {
const missing = getMissingTypes(output);
assert.strictEqual(missing.length, 0);
});
it('generates valid data for HTMLElement', () => {
const type = output.HTMLElement;
assert.strictEqual(type.inheritance, 'Element');
assert.deepEqual(type.includes, [
'GlobalEventHandlers',
'DocumentAndElementEventHandlers',
'ElementContentEditable',
'HTMLOrSVGElement',
'ElementCSSInlineStyle',
]);
assert.deepEqual(type.props.title, {
global: true,
specs: ['html'],
});
assert.strictEqual(type.rules, undefined);
});
it('generates valid data for HTMLInputElement', () => {
const type = output.HTMLInputElement;
assert.strictEqual(type.inheritance, 'HTMLElement');
assert.deepEqual(type.includes, []);
assert.deepEqual(type.props.checked, {
global: false,
specs: ['html'],
rules: [{when: 'type', is: 'checkbox'}, {when: 'type', is: 'radio'}],
});
assert.deepEqual(type.props.required, {
global: false,
specs: ['html'],
rules: [
{when: 'type', is: 'text'}, {when: 'type', is: 'search'}, {when: 'type', is: 'url'}, {when: 'type', is: 'tel'},
{when: 'type', is: 'email'}, {when: 'type', is: 'password'}, {when: 'type', is: 'date'},
{when: 'type', is: 'month'}, {when: 'type', is: 'week'}, {when: 'type', is: 'time'},
{when: 'type', is: 'datetime-local'}, {when: 'type', is: 'number'}, {when: 'type', is: 'checkbox'},
{when: 'type', is: 'radio'}, {when: 'type', is: 'file'}
]
});
assert.deepEqual(type.props.value, {
global: false,
specs: ['html'],
rules: type.rules,
});
assert.deepEqual(type.rules, [
{when: 'type', is: 'hidden'}, {when: 'type', is: 'text'}, {when: 'type', is: 'search'},
{when: 'type', is: 'url'}, {when: 'type', is: 'tel'}, {when: 'type', is: 'email'},
{when: 'type', is: 'password'}, {when: 'type', is: 'date'}, {when: 'type', is: 'month'},
{when: 'type', is: 'week'}, {when: 'type', is: 'time'}, {when: 'type', is: 'datetime-local'},
{when: 'type', is: 'number'}, {when: 'type', is: 'range'}, {when: 'type', is: 'color'},
{when: 'type', is: 'checkbox'}, {when: 'type', is: 'radio'}, {when: 'type', is: 'file'},
{when: 'type', is: 'submit'}, {when: 'type', is: 'image'}, {when: 'type', is: 'reset'},
{when: 'type', is: 'button'},
]);
});
it('generates valid data for MouseEvent', () => {
const type = output.MouseEvent;
assert.strictEqual(type.inheritance, 'UIEvent');
assert.deepEqual(type.includes, []);
assert.deepEqual(type.props.screenX, {
global: false,
specs: ['uievents'],
});
assert.strictEqual(type.rules, undefined);
});
it('generates valid data for PointerEvent', () => {
const type = output.PointerEvent;
assert.strictEqual(type.inheritance, 'MouseEvent');
assert.deepEqual(type.includes, []);
assert.deepEqual(type.props.pressure, {
global: false,
specs: ['pointerevents'],
});
assert.strictEqual(type.rules, undefined);
});
it('generates an entry for DOMParser', () => {
const type = output.DOMParser;
assert.strictEqual(type.inheritance, null);
assert.deepEqual(type.includes, []);
assert.deepEqual(type.props, {});
assert.strictEqual(type.rules, undefined);
});
it('minimizes the data for HTMLInputElement', () => {
const minimized = minimize(output);
const type = minimized.HTMLInputElement;
assert.strictEqual(type.inheritance, 'HTMLElement');
assert.strictEqual(type.includes, undefined);
assert.deepEqual(type.props.checked, {
rules: [
{when: 'type', is: 'checkbox'},
{when: 'type', is: 'radio'},
],
});
assert.deepEqual(type.props.required, {
rules: [
{when: 'type', is: 'text'}, {when: 'type', is: 'search'}, {when: 'type', is: 'url'}, {when: 'type', is: 'tel'},
{when: 'type', is: 'email'}, {when: 'type', is: 'password'}, {when: 'type', is: 'date'},
{when: 'type', is: 'month'}, {when: 'type', is: 'week'}, {when: 'type', is: 'time'},
{when: 'type', is: 'datetime-local'}, {when: 'type', is: 'number'}, {when: 'type', is: 'checkbox'},
{when: 'type', is: 'radio'}, {when: 'type', is: 'file'}
],
});
assert.deepEqual(type.props.value, {
rules: type.rules,
});
assert.deepEqual(type.rules, [
{when: 'type', is: 'hidden'}, {when: 'type', is: 'text'}, {when: 'type', is: 'search'},
{when: 'type', is: 'url'}, {when: 'type', is: 'tel'}, {when: 'type', is: 'email'},
{when: 'type', is: 'password'}, {when: 'type', is: 'date'}, {when: 'type', is: 'month'},
{when: 'type', is: 'week'}, {when: 'type', is: 'time'}, {when: 'type', is: 'datetime-local'},
{when: 'type', is: 'number'}, {when: 'type', is: 'range'}, {when: 'type', is: 'color'},
{when: 'type', is: 'checkbox'}, {when: 'type', is: 'radio'}, {when: 'type', is: 'file'},
{when: 'type', is: 'submit'}, {when: 'type', is: 'image'}, {when: 'type', is: 'reset'},
{when: 'type', is: 'button'},
]);
});
it('minimizes the data for PointerEvent', () => {
const minimized = minimize(output);
const type = minimized.PointerEvent;
assert.strictEqual(type.inheritance, 'MouseEvent');
assert.strictEqual(type.includes, undefined);
assert.deepEqual(type.props.pressure, {
specs: 8,
});
assert.strictEqual(type.rules, undefined);
});
it('removes the entry for DOMParser in the minimized output', () => {
const minimized = minimize(output);
assert.strictEqual(minimized.DOMParser, undefined);
});
});