Fix DOMProperty bitmask checking

This commit is contained in:
Brandon Tilley
2014-09-02 06:53:58 -07:00
parent 820210fd9e
commit 0e28f5e6d7
2 changed files with 33 additions and 7 deletions
+11 -7
View File
@@ -23,6 +23,10 @@
var invariant = require('invariant');
function checkMask(value, bitmask) {
return (value & bitmask) === bitmask;
}
var DOMPropertyInjection = {
/**
* Mapping from normalized, camelcased property names to a configuration that
@@ -109,19 +113,19 @@ var DOMPropertyInjection = {
var propConfig = Properties[propName];
DOMProperty.mustUseAttribute[propName] =
propConfig & DOMPropertyInjection.MUST_USE_ATTRIBUTE;
checkMask(propConfig, DOMPropertyInjection.MUST_USE_ATTRIBUTE);
DOMProperty.mustUseProperty[propName] =
propConfig & DOMPropertyInjection.MUST_USE_PROPERTY;
checkMask(propConfig, DOMPropertyInjection.MUST_USE_PROPERTY);
DOMProperty.hasSideEffects[propName] =
propConfig & DOMPropertyInjection.HAS_SIDE_EFFECTS;
checkMask(propConfig, DOMPropertyInjection.HAS_SIDE_EFFECTS);
DOMProperty.hasBooleanValue[propName] =
propConfig & DOMPropertyInjection.HAS_BOOLEAN_VALUE;
checkMask(propConfig, DOMPropertyInjection.HAS_BOOLEAN_VALUE);
DOMProperty.hasNumericValue[propName] =
propConfig & DOMPropertyInjection.HAS_NUMERIC_VALUE;
checkMask(propConfig, DOMPropertyInjection.HAS_NUMERIC_VALUE);
DOMProperty.hasPositiveNumericValue[propName] =
propConfig & DOMPropertyInjection.HAS_POSITIVE_NUMERIC_VALUE;
checkMask(propConfig, DOMPropertyInjection.HAS_POSITIVE_NUMERIC_VALUE);
DOMProperty.hasOverloadedBooleanValue[propName] =
propConfig & DOMPropertyInjection.HAS_OVERLOADED_BOOLEAN_VALUE;
checkMask(propConfig, DOMPropertyInjection.HAS_OVERLOADED_BOOLEAN_VALUE);
invariant(
!DOMProperty.mustUseAttribute[propName] ||
@@ -158,6 +158,28 @@ describe('DOMPropertyOperations', function() {
)).toBe('');
});
it('should create markup for numeric properties', function() {
expect(DOMPropertyOperations.createMarkupForProperty(
'start',
5
)).toBe('start="5"');
expect(DOMPropertyOperations.createMarkupForProperty(
'start',
0
)).toBe('start="0"');
expect(DOMPropertyOperations.createMarkupForProperty(
'size',
0
)).toBe('');
expect(DOMPropertyOperations.createMarkupForProperty(
'size',
1
)).toBe('size="1"');
});
});
describe('setValueForProperty', function() {