mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-10-13 01:54:52 +08:00
This makes it easier to consume the data in the frontend. Bug: 1325812 Change-Id: I37979a7266af728399a9c4938bf97f77e5781b5b Signed-off-by: Victor Porof <victorporof@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3702682 Reviewed-by: Mathias Bynens <mathias@chromium.org>
163 lines
6.4 KiB
JavaScript
163 lines
6.4 KiB
JavaScript
// 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);
|
|
});
|
|
});
|