52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
|
/**
|
||
|
* @license
|
||
|
* Copyright Google Inc. All Rights Reserved.
|
||
|
*
|
||
|
* Use of this source code is governed by an MIT-style license that can be
|
||
|
* found in the LICENSE file at https://angular.io/license
|
||
|
*/
|
||
|
|
||
|
import {DomElementSchemaRegistry} from '@angular/compiler';
|
||
|
import {SchemaInformation} from '../src/html_info';
|
||
|
|
||
|
describe('html_info', () => {
|
||
|
const domRegistry = new DomElementSchemaRegistry();
|
||
|
|
||
|
it('should have the same elements as the dom registry', () => {
|
||
|
// If this test fails, replace the SCHEMA constant in html_info with the one
|
||
|
// from dom_element_schema_registry and also verify the code to interpret
|
||
|
// the schema is the same.
|
||
|
const domElements = domRegistry.allKnownElementNames();
|
||
|
const infoElements = SchemaInformation.instance.allKnownElements();
|
||
|
const uniqueToDom = uniqueElements(infoElements, domElements);
|
||
|
const uniqueToInfo = uniqueElements(domElements, infoElements);
|
||
|
expect(uniqueToDom).toEqual([]);
|
||
|
expect(uniqueToInfo).toEqual([]);
|
||
|
});
|
||
|
|
||
|
it('should have at least a sub-set of properties', () => {
|
||
|
const elements = SchemaInformation.instance.allKnownElements();
|
||
|
for (const element of elements) {
|
||
|
for (const prop of SchemaInformation.instance.propertiesOf(element)) {
|
||
|
expect(domRegistry.hasProperty(element, prop, []));
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
});
|
||
|
|
||
|
function uniqueElements<T>(a: T[], b: T[]): T[] {
|
||
|
const s = new Set<T>();
|
||
|
for (const aItem of a) {
|
||
|
s.add(aItem);
|
||
|
}
|
||
|
const result: T[] = [];
|
||
|
const reported = new Set<T>();
|
||
|
for (const bItem of b) {
|
||
|
if (!s.has(bItem) && !reported.has(bItem)) {
|
||
|
reported.add(bItem);
|
||
|
result.push(bItem);
|
||
|
}
|
||
|
}
|
||
|
return result;
|
||
|
}
|