Fix DOMProperty bitmask checking
Brandon Tilley committed
Sep 1, 2014 at 20:44 UTC
0e28f5e6d7fd1a960b92637053d2bb0859b67b36
2 files changed
+33
-7
src/browser/ui/dom/DOMProperty.js
+11
-7
@@ -23,6 +23,10 @@
23
24
var invariant = require('invariant');
25
26
+function checkMask(value, bitmask) {
27
+ return (value & bitmask) === bitmask;
28
+}
29
+
30
var DOMPropertyInjection = {
31
/**
32
* Mapping from normalized, camelcased property names to a configuration that
@@ -109,19 +113,19 @@ var DOMPropertyInjection = {
113
114
var propConfig = Properties[propName];
115
DOMProperty.mustUseAttribute[propName] =
112
- propConfig & DOMPropertyInjection.MUST_USE_ATTRIBUTE;
116
+ checkMask(propConfig, DOMPropertyInjection.MUST_USE_ATTRIBUTE);
117
DOMProperty.mustUseProperty[propName] =
114
- propConfig & DOMPropertyInjection.MUST_USE_PROPERTY;
118
+ checkMask(propConfig, DOMPropertyInjection.MUST_USE_PROPERTY);
119
DOMProperty.hasSideEffects[propName] =
116
- propConfig & DOMPropertyInjection.HAS_SIDE_EFFECTS;
120
+ checkMask(propConfig, DOMPropertyInjection.HAS_SIDE_EFFECTS);
121
DOMProperty.hasBooleanValue[propName] =
118
- propConfig & DOMPropertyInjection.HAS_BOOLEAN_VALUE;
122
+ checkMask(propConfig, DOMPropertyInjection.HAS_BOOLEAN_VALUE);
123
DOMProperty.hasNumericValue[propName] =
120
- propConfig & DOMPropertyInjection.HAS_NUMERIC_VALUE;
124
+ checkMask(propConfig, DOMPropertyInjection.HAS_NUMERIC_VALUE);
125
DOMProperty.hasPositiveNumericValue[propName] =
122
- propConfig & DOMPropertyInjection.HAS_POSITIVE_NUMERIC_VALUE;
126
+ checkMask(propConfig, DOMPropertyInjection.HAS_POSITIVE_NUMERIC_VALUE);
127
DOMProperty.hasOverloadedBooleanValue[propName] =
124
- propConfig & DOMPropertyInjection.HAS_OVERLOADED_BOOLEAN_VALUE;
128
+ checkMask(propConfig, DOMPropertyInjection.HAS_OVERLOADED_BOOLEAN_VALUE);
129
130
invariant(
131
!DOMProperty.mustUseAttribute[propName] ||
src/browser/ui/dom/__tests__/DOMPropertyOperations-test.js
+22
@@ -158,6 +158,28 @@ describe('DOMPropertyOperations', function() {
158
)).toBe('');
159
});
160
161
+ it('should create markup for numeric properties', function() {
162
+ expect(DOMPropertyOperations.createMarkupForProperty(
163
+ 'start',
164
+ 5
165
+ )).toBe('start="5"');
166
+
167
+ expect(DOMPropertyOperations.createMarkupForProperty(
168
+ 'start',
169
+ 0
170
+ )).toBe('start="0"');
171
+
172
+ expect(DOMPropertyOperations.createMarkupForProperty(
173
+ 'size',
174
+ 0
175
+ )).toBe('');
176
+
177
+ expect(DOMPropertyOperations.createMarkupForProperty(
178
+ 'size',
179
+ 1
180
+ )).toBe('size="1"');
181
+ });
182
+
183
});
184
185
describe('setValueForProperty', function() {