Warn about SVG attributes once

This fixes a missing check in #5714
This commit is contained in:
Dan Abramov
2016-03-04 16:26:49 +00:00
parent b89e7d25d5
commit 8a9ab75261
2 changed files with 42 additions and 6 deletions
@@ -539,6 +539,39 @@ describe('ReactDOMComponent', function() {
expect(console.error.argsForCall[0][0]).toContain('clip-path');
});
it('should only warn once about deprecated SVG attributes', function() {
spyOn(console, 'error');
var container = document.createElement('div');
ReactDOM.render(
<svg clipPath="0 0 100 100">
<rect strokeWidth={1} />
<rect strokeWidth={10} />
</svg>,
container
);
expect(console.error.argsForCall.length).toBe(2);
expect(console.error.argsForCall[0][0]).toContain('clipPath');
expect(console.error.argsForCall[0][0]).toContain('clip-path');
expect(console.error.argsForCall[1][0]).toContain('strokeWidth');
expect(console.error.argsForCall[1][0]).toContain('stroke-width');
ReactDOM.render(
<svg clipPath="0 0 100 100">
<rect strokeWidth={1} strokeOpacity={0.5} />
<rect strokeWidth={10} />
<rect strokeWidth={100} />
</svg>,
container
);
expect(console.error.argsForCall.length).toBe(3);
expect(console.error.argsForCall[0][0]).toContain('clipPath');
expect(console.error.argsForCall[0][0]).toContain('clip-path');
expect(console.error.argsForCall[1][0]).toContain('strokeWidth');
expect(console.error.argsForCall[1][0]).toContain('stroke-width');
expect(console.error.argsForCall[2][0]).toContain('strokeOpacity');
expect(console.error.argsForCall[2][0]).toContain('stroke-opacity');
});
it('should update arbitrary hyphenated attributes for SVG tags', function() {
var container = document.createElement('div');
@@ -25,20 +25,23 @@ if (__DEV__) {
var warnedSVGAttributes = {};
var warnDeprecatedSVGAttribute = function(name) {
if (reactProps.hasOwnProperty(name) && reactProps[name]) {
return;
}
if (!DOMProperty.properties.hasOwnProperty(name)) {
return;
}
if (reactProps.hasOwnProperty(name) && reactProps[name] ||
warnedSVGAttributes.hasOwnProperty(name) && warnedSVGAttributes[name]) {
return;
}
var { attributeName, attributeNamespace } = DOMProperty.properties[name];
if (attributeNamespace || name === attributeName) {
return;
}
if (warnedSVGAttributes.hasOwnProperty(name) && warnedSVGAttributes[name]) {
return;
}
warnedSVGAttributes[name] = true;
warning(
false,
'SVG property %s is deprecated. Use the original attribute name ' +