@samitouri / QOS-React-2 / commits / 0e28f5e6d7

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() {