| Index: third_party/WebKit/LayoutTests/typedcssom/inlinestyle/properties/property-suite.js
|
| diff --git a/third_party/WebKit/LayoutTests/typedcssom/inlinestyle/properties/property-suite.js b/third_party/WebKit/LayoutTests/typedcssom/inlinestyle/properties/property-suite.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a27f6768232276a0a076740cc143c0031c3d65b9
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/typedcssom/inlinestyle/properties/property-suite.js
|
| @@ -0,0 +1,256 @@
|
| +/**
|
| + * @fileoverview A standard set of tests for using a single property in an
|
| + * inline StylePropertyMap
|
| + * (https://www.w3.org/TR/css-typed-om-1/#the-stylepropertymap).
|
| + *
|
| + * Create a config object containing {
|
| + * validKeywords: array of strings,
|
| + * validObjects: array of CSSStyleValue instances that are valid for the
|
| + * property,
|
| + * supportsMultiple: boolean; whether the property supports a list of
|
| + * properties,
|
| + * invalidObjects: array of CSSStyleValue instances that are invalid for the
|
| + * property
|
| + * }
|
| + *
|
| + * Then, call runInlineStylePropertyMapTests to test the behavior of an inline
|
| + * StylePropertyMap for one CSS property for an element.
|
| + *
|
| + * Note that CSS-wide keywords, and non-CSSStyleValue invalid types do not need
|
| + * to be specified.
|
| + *
|
| + * If necessary, you can continue to define non-standard tests in your html
|
| + * file as usual.
|
| + */
|
| +
|
| +function runInlineStylePropertyMapTests(config) {
|
| + let element = document.createElement('div');
|
| + let validKeywords = config.validKeywords.concat([
|
| + // CSS-wide keywords
|
| + 'initial',
|
| + 'inherit',
|
| + 'unset'
|
| + ]);
|
| + let validObjects = config.validObjects;
|
| + let invalidObjects = config.invalidObjects.concat([
|
| + // No properties should take these values
|
| + null,
|
| + undefined,
|
| + true,
|
| + false,
|
| + 1,
|
| + 'hello',
|
| + {},
|
| + new CSSKeywordValue('notAKeyword')
|
| + ]);
|
| + let validObject = validObjects.length ?
|
| + validObjects[0] : new CSSKeywordValue(validKeywords[0]);
|
| +
|
| + let styleMap = element.styleMap;
|
| + runSetterTests(
|
| + config.property, validKeywords, validObjects, invalidObjects, element);
|
| + runGetterTests(config.property, validKeywords, validObjects, element);
|
| + runGetAllTests(
|
| + config.property, validObject, element, config.supportsMultiple);
|
| + runDeletionTests(config.property, validObject, element);
|
| + runGetPropertiesTests(config.property, validObject, element);
|
| + if (config.supportsMultiple) {
|
| + runSequenceSetterTests(
|
| + config.property, validObject, invalidObjects[0], element);
|
| + runAppendTests(
|
| + config.property, validObject, invalidObjects[0], element);
|
| + } else {
|
| + runMultipleValuesNotSupportedTests(
|
| + config.property, validObject, element);
|
| + }
|
| +}
|
| +
|
| +function runSetterTests(
|
| + propertyName, validKeywords, validObjects, invalidObjects, element) {
|
| + for (let keyword of validKeywords) {
|
| + test(function() {
|
| + element.style = '';
|
| + element.styleMap.set(propertyName, new CSSKeywordValue(keyword));
|
| + assert_equals(element.style[propertyName], keyword);
|
| + }, 'Setting ' + propertyName + ' to ' + keyword);
|
| + }
|
| + for (let validObject of validObjects) {
|
| + test(function() {
|
| + element.style = '';
|
| +
|
| + element.styleMap.set(propertyName, validObject);
|
| + assert_equals(element.style[propertyName], validObject.cssText);
|
| + }, 'Setting ' + propertyName + ' to ' + validObject.constructor.name +
|
| + ' with value ' + validObject.cssText);
|
| + }
|
| +
|
| + // Negative tests
|
| + for (let invalidObject of invalidObjects) {
|
| + let name = invalidObject instanceof CSSStyleValue ?
|
| + invalidObject.constructor.name : invalidObject;
|
| + test(function() {
|
| + assert_throws(new TypeError(), function() {
|
| + element.styleMap.set(propertyName, invalidObject);
|
| + });
|
| + }, 'Setting ' + propertyName + ' to invalid value ' + name + ' throws');
|
| + }
|
| +}
|
| +
|
| +function runGetterTests(
|
| + propertyName, validKeywords, validObjects, element) {
|
| + for (let keyword of validKeywords) {
|
| + test(function() {
|
| + element.style[propertyName] = keyword;
|
| +
|
| + let result = element.styleMap.get(propertyName);
|
| + assert_true(result instanceof CSSKeywordValue,
|
| + 'result instanceof CSSKeywordValue:');
|
| + assert_equals(result.cssText, keyword);
|
| + }, 'Getting ' + propertyName + ' when it is set to ' + keyword);
|
| + }
|
| + for (let validObject of validObjects) {
|
| + test(function() {
|
| + element.style[propertyName] = validObject.cssText;
|
| +
|
| + let result = element.styleMap.get(propertyName);
|
| + assert_equals(result.constructor.name, validObject.constructor.name,
|
| + 'typeof result');
|
| + assert_equals(result.cssText, validObject.cssText);
|
| + }, 'Getting ' + propertyName + ' with a ' + validObject.constructor.name +
|
| + ' whose value is ' + validObject.cssText);
|
| + }
|
| +}
|
| +
|
| +function runSequenceSetterTests(
|
| + propertyName, validObject, invalidObject, element) {
|
| + test(function() {
|
| + element.style = '';
|
| +
|
| + element.styleMap.set(propertyName, [validObject, validObject]);
|
| + assert_equals(
|
| + element.style[propertyName], validObject.cssText + ', ' +
|
| + validObject.cssText);
|
| + }, 'Set ' + propertyName + ' to a sequence');
|
| +
|
| + test(function() {
|
| + let sequence = [validObject, invalidObject];
|
| + assert_throws(new TypeError(), function() {
|
| + element.styleMap.set(propertyName, sequence);
|
| + });
|
| + }, 'Set ' + propertyName + ' to a sequence containing an invalid type');
|
| +}
|
| +
|
| +function runAppendTests(
|
| + propertyName, validObject, invalidObject, element) {
|
| + test(function() {
|
| + element.style = '';
|
| +
|
| + element.styleMap.append(propertyName, validObject);
|
| + assert_equals(element.style[propertyName], validObject.cssText);
|
| +
|
| + element.styleMap.append(propertyName, validObject);
|
| + assert_equals(
|
| + element.style[propertyName], validObject.cssText + ', ' +
|
| + validObject.cssText);
|
| + }, 'Appending a ' + validObject.constructor.name + ' to ' + propertyName);
|
| +
|
| + test(function() {
|
| + element.style = '';
|
| +
|
| + element.styleMap.append(propertyName, [validObject, validObject]);
|
| + assert_equals(
|
| + element.style[propertyName], validObject.cssText + ', ' +
|
| + validObject.cssText);
|
| + }, 'Append a sequence to ' + propertyName);
|
| +
|
| + // Negative tests
|
| + test(function() {
|
| + assert_throws(new TypeError(), function() {
|
| + element.styleMap.append(propertyName, invalidObject);
|
| + });
|
| + }, 'Appending an invalid value to ' + propertyName);
|
| +
|
| + test(function() {
|
| + let sequence = [validObject, invalidObject];
|
| + assert_throws(new TypeError(), function() {
|
| + element.styleMap.append(propertyName, sequence);
|
| + });
|
| + }, 'Append a sequence containing an invalid value to ' + propertyName);
|
| +}
|
| +
|
| +function runGetAllTests(
|
| + propertyName, validObject, element, supportsMultiple) {
|
| + test(function() {
|
| + element.style = '';
|
| + assert_array_equals(element.styleMap.getAll(propertyName), []);
|
| +
|
| + element.style[propertyName] = validObject.cssText;
|
| + let result = element.styleMap.getAll(propertyName);
|
| + assert_equals(result.length, 1,
|
| + 'Expected getAll to retrieve an array containing a ' +
|
| + 'single CSSStyleValue');
|
| + assert_equals(result[0].constructor.name, validObject.constructor.name,
|
| + 'Returned type is incorrect:');
|
| + assert_equals(result[0].cssText, validObject.cssText);
|
| + }, 'getAll for single-valued ' + propertyName);
|
| +
|
| + if (supportsMultiple) {
|
| + test(function() {
|
| + element.style = '';
|
| + element.styleMap.set(propertyName, [validObject, validObject]);
|
| + let result = element.styleMap.getAll(propertyName);
|
| + assert_equals(result.length, 2,
|
| + 'Expected getAll to return an array containing two instances ' +
|
| + 'of CSSStyleValue');
|
| + assert_true(result[0] instanceof CSSStyleValue,
|
| + 'Expected first result to be an instance of CSSStyleValue');
|
| + assert_true(result[1] instanceof CSSStyleValue,
|
| + 'Expected second result to be an instance of CSSStyleValue');
|
| + assert_equals(result[0].constructor.name, validObject.constructor.name);
|
| + assert_equals(result[1].constructor.name, validObject.constructor.name);
|
| + assert_equals(result[0].cssText, validObject.cssText);
|
| + assert_equals(result[1].cssText, validObject.cssText);
|
| + }, 'getAll for list-valued ' + propertyName);
|
| + }
|
| +}
|
| +
|
| +function runDeletionTests(propertyName, validObject, element) {
|
| + test(function() {
|
| + element.style[propertyName] = validObject.cssText;
|
| +
|
| + assert_not_equals(element.styleMap.get(propertyName), null);
|
| +
|
| + element.styleMap.delete(propertyName);
|
| + assert_equals(element.style[propertyName], '');
|
| + assert_equals(element.styleMap.get(propertyName), null);
|
| + }, 'Delete ' + propertyName + ' removes the value form the styleMap');
|
| +}
|
| +
|
| +function runGetPropertiesTests(propertyName, validObject, element) {
|
| + test(function() {
|
| + element.style = '';
|
| + assert_array_equals(element.styleMap.getProperties(), []);
|
| +
|
| + element.styleMap.set(propertyName, validObject);
|
| +
|
| + assert_array_equals(element.styleMap.getProperties(), [propertyName]);
|
| + }, propertyName + ' shows up in getProperties');
|
| +}
|
| +
|
| +function runMultipleValuesNotSupportedTests(
|
| + propertyName, validObject, element) {
|
| + test(function() {
|
| + element.style = '';
|
| + assert_throws(new TypeError(), function() {
|
| + element.styleMap.set(propertyName, [validObject, validObject]);
|
| + });
|
| + }, 'Setting ' + propertyName + ' to a sequence throws');
|
| +
|
| + test(function() {
|
| + element.style = '';
|
| + assert_throws(new TypeError(), function() {
|
| + element.styleMap.append(propertyName, validObject);
|
| + });
|
| + }, 'Appending to ' + propertyName + ' throws');
|
| +}
|
| +
|
|
|