blob: e417d582acc0ec1fbb2d8463d593aaf0fcba627b [file] [log] [blame]
const objects = {
SVGCircleElement: 'circle',
SVGClipPathElement: 'clipPath',
SVGComponentTransferFunctionElement: 'feFuncA',
SVGEllipseElement: 'ellipse',
SVGFEBlendElement: 'feBlend',
SVGFEColorMatrixElement: 'feColorMatrix',
SVGFECompositeElement: 'feComposite',
SVGFEConvolveMatrixElement: 'feConvolveMatrix',
SVGFEDiffuseLightingElement: 'feDiffuseLighting',
SVGFEDisplacementMapElement: 'feDisplacementMap',
SVGFEDistantLightElement: 'feDistantLight',
SVGFEDropShadowElement: 'feDropShadow',
SVGFEGaussianBlurElement: 'feGaussianBlur',
SVGFEMorphologyElement: 'feMorphology',
SVGFEOffsetElement: 'feOffset',
SVGFEPointLightElement: 'fePointLight',
SVGFESpecularLightingElement: 'feSpecularLighting',
SVGFESpotLightElement: 'feSpotLight',
SVGFETurbulenceElement: 'feTurbulence',
SVGFilterElement: 'filter',
SVGFilterPrimitiveStandardAttributes: 'feBlend',
SVGForeignObjectElement: 'foreignObject',
SVGGeometryElement: 'rect',
SVGGradientElement: 'linearGradient',
SVGImageElement: 'image',
SVGLineElement: 'line',
SVGLinearGradientElement: 'linearGradient',
SVGMarkerElement: 'marker',
SVGMaskElement: 'mask',
SVGPatternElement: 'pattern',
SVGRadialGradientElement: 'radialGradient',
SVGRectElement: 'rect',
SVGSVGElement: 'svg',
SVGStopElement: 'stop',
SVGTextContentElement: 'text',
SVGTextPathElement: 'textPath',
SVGUseElement: 'use',
};
function assert_initial_values(attribute_map, config) {
if (typeof config == 'undefined')
config = {};
let getValue = config.getValue || function(value) { return value; };
for (let info of attribute_map) {
for (let attribute of info.attributes) {
let content_attribute = config.mapProperty && config.mapProperty[attribute] || attribute;
test(function() {
let e = document.createElementNS('http://www.w3.org/2000/svg', objects[info.interface]);
let initial = info[attribute] && info[attribute].initial || config.initial;
let valid = info[attribute] && info[attribute].valid || config.valid;
assert_equals(getValue(e[attribute].baseVal), initial, 'initial before');
e.setAttribute(content_attribute, valid);
assert_not_equals(getValue(e[attribute].baseVal), initial, 'new value');
e.removeAttribute(content_attribute);
assert_equals(getValue(e[attribute].baseVal), initial, 'initial after');
}, document.title + ', ' + info.interface + '.prototype.' + attribute + ' (remove)');
test(function() {
let e = document.createElementNS('http://www.w3.org/2000/svg', objects[info.interface]);
let initial = info[attribute] && info[attribute].initial || config.initial;
let valid = info[attribute] && info[attribute].valid || config.valid;
assert_equals(getValue(e[attribute].baseVal), initial, 'initial before');
e.setAttribute(content_attribute, valid);
assert_not_equals(getValue(e[attribute].baseVal), initial, 'new value');
e.setAttribute(content_attribute, 'foobar');
assert_equals(getValue(e[attribute].baseVal), initial, 'initial after');
}, document.title + ', ' + info.interface + '.prototype.' + attribute + ' (invalid value)');
}
}
}