styled-components 2.1.1 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -1
- package/CODE_OF_CONDUCT.md +1 -1
- package/README.md +12 -67
- package/dist/styled-components.es.js +273 -110
- package/dist/styled-components.js +325 -119
- package/dist/styled-components.min.js +2 -2
- package/lib/hoc/withTheme.js +13 -7
- package/lib/models/BrowserStyleSheet.js +11 -0
- package/lib/models/ComponentStyle.js +45 -2
- package/lib/models/InlineStyle.js +1 -1
- package/lib/models/ServerStyleSheet.js +33 -17
- package/lib/models/StyleSheet.js +9 -0
- package/lib/models/StyledComponent.js +82 -38
- package/lib/models/StyledNativeComponent.js +31 -15
- package/lib/models/ThemeProvider.js +44 -12
- package/lib/native/index.js +1 -1
- package/lib/test/utils.js +5 -2
- package/lib/utils/create-broadcast.js +34 -24
- package/lib/utils/domElements.js +1 -1
- package/lib/utils/flatten.js +4 -1
- package/lib/utils/generateAlphabeticName.js +1 -1
- package/lib/utils/nonce.js +10 -0
- package/lib/utils/once.js +17 -0
- package/package.json +10 -10
- package/src/hoc/withTheme.js +14 -7
- package/src/models/BrowserStyleSheet.js +8 -0
- package/src/models/ComponentStyle.js +42 -2
- package/src/models/InlineStyle.js +1 -1
- package/src/models/ServerStyleSheet.js +27 -12
- package/src/models/StyleSheet.js +9 -0
- package/src/models/StyledComponent.js +81 -26
- package/src/models/StyledNativeComponent.js +30 -10
- package/src/models/ThemeProvider.js +38 -9
- package/src/models/test/ThemeProvider.test.js +7 -8
- package/src/native/index.js +1 -1
- package/src/native/test/native.test.js +14 -0
- package/src/test/__snapshots__/ssr.test.js.snap +147 -0
- package/src/test/expanded-api.test.js +24 -0
- package/src/test/props.test.js +14 -3
- package/src/test/ssr.test.js +90 -123
- package/src/test/styles.test.js +52 -0
- package/src/test/utils.js +5 -2
- package/src/utils/create-broadcast.js +31 -17
- package/src/utils/domElements.js +1 -0
- package/src/utils/flatten.js +16 -6
- package/src/utils/generateAlphabeticName.js +1 -1
- package/src/utils/nonce.js +6 -0
- package/src/utils/once.js +12 -0
- package/typings/styled-components.d.ts +15 -21
- package/typings/tests/issue1068.tsx +226 -0
- package/typings/tests/main-test.tsx +1 -1
- package/typings/tests/string-tags-test.tsx +62 -0
- package/typings/tests/themed-tests/issue1068.tsx +226 -0
- package/typings/tests/themed-tests/mytheme-styled-components.tsx +1 -1
- package/typings/tests/themed-tests/with-theme-test.tsx +2 -1
- package/typings/tests/with-theme-test.tsx +17 -0
- package/lib/constructors/test/injectGlobal.test.js +0 -63
- package/lib/constructors/test/keyframes.test.js +0 -48
- package/lib/constructors/test/styled.test.js +0 -19
- package/lib/models/AbstractStyledComponent.js +0 -43
- package/lib/models/test/ThemeProvider.test.js +0 -200
- package/lib/native/test/native.test.js +0 -290
- package/lib/no-parser/test/basic.test.js +0 -46
- package/lib/no-parser/test/flatten.test.js +0 -125
- package/lib/no-parser/test/keyframes.test.js +0 -45
- package/lib/primitives/test/primitives.test.js +0 -289
- package/lib/test/attrs.test.js +0 -158
- package/lib/test/basic.test.js +0 -267
- package/lib/test/css.test.js +0 -43
- package/lib/test/expanded-api.test.js +0 -90
- package/lib/test/extending.test.js +0 -198
- package/lib/test/overriding.test.js +0 -35
- package/lib/test/props.test.js +0 -38
- package/lib/test/rehydration.test.js +0 -306
- package/lib/test/ssr.test.js +0 -187
- package/lib/test/styles.test.js +0 -146
- package/lib/test/theme.test.js +0 -497
- package/lib/test/warnTooManyClasses.test.js +0 -71
- package/lib/utils/test/extractCompsFromCSS.test.js +0 -46
- package/lib/utils/test/flatten.test.js +0 -109
- package/lib/utils/test/generateAlphabeticName.test.js +0 -14
- package/lib/utils/test/interleave.test.js +0 -22
- package/lib/utils/test/validAttr.test.js +0 -560
- package/src/models/AbstractStyledComponent.js +0 -21
- package/typings/tags.d.ts +0 -137
package/lib/test/theme.test.js
DELETED
|
@@ -1,497 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var _templateObject = _taggedTemplateLiteralLoose(['\n color: ', ';\n '], ['\n color: ', ';\n ']),
|
|
4
|
-
_templateObject2 = _taggedTemplateLiteralLoose(['\n background: ', ';\n '], ['\n background: ', ';\n ']),
|
|
5
|
-
_templateObject3 = _taggedTemplateLiteralLoose(['\n color: ', ';\n z-index: ', 'px;\n '], ['\n color: ', ';\n z-index: ', 'px;\n ']),
|
|
6
|
-
_templateObject4 = _taggedTemplateLiteralLoose([''], ['']);
|
|
7
|
-
|
|
8
|
-
var _react = require('react');
|
|
9
|
-
|
|
10
|
-
var _react2 = _interopRequireDefault(_react);
|
|
11
|
-
|
|
12
|
-
var _enzyme = require('enzyme');
|
|
13
|
-
|
|
14
|
-
var _utils = require('./utils');
|
|
15
|
-
|
|
16
|
-
var _ThemeProvider = require('../models/ThemeProvider');
|
|
17
|
-
|
|
18
|
-
var _ThemeProvider2 = _interopRequireDefault(_ThemeProvider);
|
|
19
|
-
|
|
20
|
-
var _withTheme = require('../hoc/withTheme');
|
|
21
|
-
|
|
22
|
-
var _withTheme2 = _interopRequireDefault(_withTheme);
|
|
23
|
-
|
|
24
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
-
|
|
26
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
27
|
-
|
|
28
|
-
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
|
|
29
|
-
|
|
30
|
-
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
|
31
|
-
|
|
32
|
-
function _taggedTemplateLiteralLoose(strings, raw) { strings.raw = raw; return strings; }
|
|
33
|
-
|
|
34
|
-
var styled = void 0;
|
|
35
|
-
|
|
36
|
-
describe('theming', function () {
|
|
37
|
-
beforeEach(function () {
|
|
38
|
-
styled = (0, _utils.resetStyled)();
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('should inject props.theme into a styled component', function () {
|
|
42
|
-
var Comp = styled.div(_templateObject, function (props) {
|
|
43
|
-
return props.theme.color;
|
|
44
|
-
});
|
|
45
|
-
var theme = { color: 'black' };
|
|
46
|
-
(0, _enzyme.render)(_react2.default.createElement(
|
|
47
|
-
_ThemeProvider2.default,
|
|
48
|
-
{ theme: theme },
|
|
49
|
-
_react2.default.createElement(Comp, null)
|
|
50
|
-
));
|
|
51
|
-
(0, _utils.expectCSSMatches)('.sc-a {} .b { color: ' + theme.color + '; }');
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
it('should inject props.theme into a styled component multiple levels deep', function () {
|
|
55
|
-
var Comp = styled.div(_templateObject, function (props) {
|
|
56
|
-
return props.theme.color;
|
|
57
|
-
});
|
|
58
|
-
var theme = { color: 'black' };
|
|
59
|
-
(0, _enzyme.render)(_react2.default.createElement(
|
|
60
|
-
_ThemeProvider2.default,
|
|
61
|
-
{ theme: theme },
|
|
62
|
-
_react2.default.createElement(
|
|
63
|
-
'div',
|
|
64
|
-
null,
|
|
65
|
-
_react2.default.createElement(
|
|
66
|
-
'div',
|
|
67
|
-
null,
|
|
68
|
-
_react2.default.createElement(Comp, null)
|
|
69
|
-
)
|
|
70
|
-
)
|
|
71
|
-
));
|
|
72
|
-
(0, _utils.expectCSSMatches)('.sc-a {} .b { color: ' + theme.color + '; }');
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
it('should properly allow a component to fallback to its default props when a theme is not provided', function () {
|
|
76
|
-
var Comp1 = styled.div(_templateObject, function (props) {
|
|
77
|
-
return props.theme.test.color;
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
Comp1.defaultProps = {
|
|
81
|
-
theme: {
|
|
82
|
-
test: {
|
|
83
|
-
color: "purple"
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
(0, _enzyme.render)(_react2.default.createElement(
|
|
88
|
-
'div',
|
|
89
|
-
null,
|
|
90
|
-
_react2.default.createElement(Comp1, null)
|
|
91
|
-
));
|
|
92
|
-
(0, _utils.expectCSSMatches)('.sc-a {} .b { color: purple; }');
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
// https://github.com/styled-components/styled-components/issues/344
|
|
96
|
-
it('should use ThemeProvider theme instead of defaultProps theme', function () {
|
|
97
|
-
var Comp1 = styled.div(_templateObject, function (props) {
|
|
98
|
-
return props.theme.test.color;
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
Comp1.defaultProps = {
|
|
102
|
-
theme: {
|
|
103
|
-
test: {
|
|
104
|
-
color: "purple"
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
var theme = { test: { color: 'green' } };
|
|
109
|
-
|
|
110
|
-
(0, _enzyme.render)(_react2.default.createElement(
|
|
111
|
-
_ThemeProvider2.default,
|
|
112
|
-
{ theme: theme },
|
|
113
|
-
_react2.default.createElement(Comp1, null)
|
|
114
|
-
));
|
|
115
|
-
(0, _utils.expectCSSMatches)('.sc-a {} .b { color: green; }');
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
it('should properly allow a component to override the theme with a prop even if it is equal to defaultProps theme', function () {
|
|
119
|
-
var Comp1 = styled.div(_templateObject, function (props) {
|
|
120
|
-
return props.theme.test.color;
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
Comp1.defaultProps = {
|
|
124
|
-
theme: {
|
|
125
|
-
test: {
|
|
126
|
-
color: "purple"
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
var theme = { test: { color: 'green' } };
|
|
131
|
-
|
|
132
|
-
(0, _enzyme.render)(_react2.default.createElement(
|
|
133
|
-
_ThemeProvider2.default,
|
|
134
|
-
{ theme: theme },
|
|
135
|
-
_react2.default.createElement(Comp1, { theme: { test: { color: 'purple' } } })
|
|
136
|
-
));
|
|
137
|
-
(0, _utils.expectCSSMatches)('.sc-a {} .b { color: purple; }');
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
it('should properly allow a component to override the theme with a prop', function () {
|
|
141
|
-
var Comp = styled.div(_templateObject, function (props) {
|
|
142
|
-
return props.theme.color;
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
var theme = {
|
|
146
|
-
color: 'purple'
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
(0, _enzyme.render)(_react2.default.createElement(
|
|
150
|
-
'div',
|
|
151
|
-
null,
|
|
152
|
-
_react2.default.createElement(
|
|
153
|
-
_ThemeProvider2.default,
|
|
154
|
-
{ theme: theme },
|
|
155
|
-
_react2.default.createElement(Comp, { theme: { color: 'red' } })
|
|
156
|
-
)
|
|
157
|
-
));
|
|
158
|
-
(0, _utils.expectCSSMatches)('.sc-a {} .b { color: red; }');
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
it('should properly set the theme with an empty object when no theme is provided and no defaults are set', function () {
|
|
162
|
-
var Comp1 = styled.div(_templateObject, function (props) {
|
|
163
|
-
return props.theme.color;
|
|
164
|
-
});
|
|
165
|
-
(0, _enzyme.render)(_react2.default.createElement(
|
|
166
|
-
'div',
|
|
167
|
-
null,
|
|
168
|
-
_react2.default.createElement(Comp1, null)
|
|
169
|
-
));
|
|
170
|
-
(0, _utils.expectCSSMatches)('.sc-a {} .b { color: ; }');
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
it('should only inject props.theme into styled components within its child component tree', function () {
|
|
174
|
-
var Comp1 = styled.div(_templateObject, function (props) {
|
|
175
|
-
return props.theme.color;
|
|
176
|
-
});
|
|
177
|
-
var Comp2 = styled.div(_templateObject2, function (props) {
|
|
178
|
-
return props.theme.color;
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
var theme = { color: 'black' };
|
|
182
|
-
(0, _enzyme.render)(_react2.default.createElement(
|
|
183
|
-
'div',
|
|
184
|
-
null,
|
|
185
|
-
_react2.default.createElement(
|
|
186
|
-
_ThemeProvider2.default,
|
|
187
|
-
{ theme: theme },
|
|
188
|
-
_react2.default.createElement(
|
|
189
|
-
'div',
|
|
190
|
-
null,
|
|
191
|
-
_react2.default.createElement(Comp1, null)
|
|
192
|
-
)
|
|
193
|
-
),
|
|
194
|
-
_react2.default.createElement(Comp2, null)
|
|
195
|
-
));
|
|
196
|
-
(0, _utils.expectCSSMatches)('.sc-a {} .c { color: ' + theme.color + '; } .sc-b {} .d { background: ; }');
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
it('should inject props.theme into all styled components within the child component tree', function () {
|
|
200
|
-
var Comp1 = styled.div(_templateObject, function (props) {
|
|
201
|
-
return props.theme.color;
|
|
202
|
-
});
|
|
203
|
-
var Comp2 = styled.div(_templateObject2, function (props) {
|
|
204
|
-
return props.theme.color;
|
|
205
|
-
});
|
|
206
|
-
var theme = { color: 'black' };
|
|
207
|
-
(0, _enzyme.render)(_react2.default.createElement(
|
|
208
|
-
_ThemeProvider2.default,
|
|
209
|
-
{ theme: theme },
|
|
210
|
-
_react2.default.createElement(
|
|
211
|
-
'div',
|
|
212
|
-
null,
|
|
213
|
-
_react2.default.createElement(
|
|
214
|
-
'div',
|
|
215
|
-
null,
|
|
216
|
-
_react2.default.createElement(Comp1, null)
|
|
217
|
-
),
|
|
218
|
-
_react2.default.createElement(Comp2, null)
|
|
219
|
-
)
|
|
220
|
-
));
|
|
221
|
-
(0, _utils.expectCSSMatches)('.sc-a {} .c { color: ' + theme.color + '; } .sc-b {} .d { background: ' + theme.color + '; }');
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
it('should inject new CSS when the theme changes', function () {
|
|
225
|
-
var Comp = styled.div(_templateObject, function (props) {
|
|
226
|
-
return props.theme.color;
|
|
227
|
-
});
|
|
228
|
-
var originalTheme = { color: 'black' };
|
|
229
|
-
var newTheme = { color: 'blue' };
|
|
230
|
-
var theme = originalTheme;
|
|
231
|
-
// Force render the component
|
|
232
|
-
var renderComp = function renderComp() {
|
|
233
|
-
(0, _enzyme.render)(_react2.default.createElement(
|
|
234
|
-
_ThemeProvider2.default,
|
|
235
|
-
{ theme: theme },
|
|
236
|
-
_react2.default.createElement(Comp, null)
|
|
237
|
-
));
|
|
238
|
-
};
|
|
239
|
-
renderComp();
|
|
240
|
-
var initialCSS = (0, _utils.expectCSSMatches)('.sc-a {} .b { color: ' + theme.color + '; }');
|
|
241
|
-
// Change the theme
|
|
242
|
-
theme = newTheme;
|
|
243
|
-
renderComp();
|
|
244
|
-
(0, _utils.expectCSSMatches)(initialCSS + ' .c { color: ' + newTheme.color + '; }');
|
|
245
|
-
});
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
describe('theming', function () {
|
|
249
|
-
beforeEach(function () {
|
|
250
|
-
styled = (0, _utils.resetStyled)();
|
|
251
|
-
});
|
|
252
|
-
|
|
253
|
-
it('should properly render with the same theme from default props on re-render', function () {
|
|
254
|
-
var Comp1 = styled.div(_templateObject, function (props) {
|
|
255
|
-
return props.theme.color;
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
Comp1.defaultProps = {
|
|
259
|
-
theme: {
|
|
260
|
-
color: "purple"
|
|
261
|
-
}
|
|
262
|
-
};
|
|
263
|
-
var wrapper = (0, _enzyme.mount)(_react2.default.createElement(Comp1, null));
|
|
264
|
-
(0, _utils.expectCSSMatches)('.sc-a {} .b { color: purple; }');
|
|
265
|
-
|
|
266
|
-
wrapper.update();
|
|
267
|
-
(0, _utils.expectCSSMatches)('.sc-a {} .b { color: purple; }');
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
it('should properly update style if theme is changed', function () {
|
|
271
|
-
var Comp1 = styled.div(_templateObject, function (props) {
|
|
272
|
-
return props.theme.color;
|
|
273
|
-
});
|
|
274
|
-
|
|
275
|
-
Comp1.defaultProps = {
|
|
276
|
-
theme: {
|
|
277
|
-
color: "purple"
|
|
278
|
-
}
|
|
279
|
-
};
|
|
280
|
-
var wrapper = (0, _enzyme.mount)(_react2.default.createElement(Comp1, null));
|
|
281
|
-
(0, _utils.expectCSSMatches)('.sc-a {} .b { color: purple; }');
|
|
282
|
-
|
|
283
|
-
wrapper.setProps({ theme: { color: 'pink' } });
|
|
284
|
-
(0, _utils.expectCSSMatches)('.sc-a {} .b { color: purple; } .c { color: pink; }');
|
|
285
|
-
});
|
|
286
|
-
|
|
287
|
-
it('should properly update style if props used in styles is changed', function () {
|
|
288
|
-
var Comp1 = styled.div(_templateObject3, function (props) {
|
|
289
|
-
return props.theme.color;
|
|
290
|
-
}, function (props) {
|
|
291
|
-
return props.zIndex;
|
|
292
|
-
});
|
|
293
|
-
|
|
294
|
-
Comp1.defaultProps = {
|
|
295
|
-
theme: {
|
|
296
|
-
color: "purple"
|
|
297
|
-
},
|
|
298
|
-
zIndex: 0
|
|
299
|
-
};
|
|
300
|
-
var wrapper = (0, _enzyme.mount)(_react2.default.createElement(Comp1, null));
|
|
301
|
-
var expectedStyles = '.sc-a {} .b { color: purple; z-index: 0px; }';
|
|
302
|
-
(0, _utils.expectCSSMatches)(expectedStyles);
|
|
303
|
-
|
|
304
|
-
wrapper.setProps({ theme: { color: 'pink' } });
|
|
305
|
-
expectedStyles = expectedStyles + ' .c { color: pink; z-index: 0px; }';
|
|
306
|
-
(0, _utils.expectCSSMatches)(expectedStyles);
|
|
307
|
-
|
|
308
|
-
wrapper.setProps({ zIndex: 1 });
|
|
309
|
-
(0, _utils.expectCSSMatches)(expectedStyles + ' .d { color: pink; z-index: 1px; }');
|
|
310
|
-
});
|
|
311
|
-
|
|
312
|
-
it('should change the classnames when the theme changes', function () {
|
|
313
|
-
var Comp = styled.div(_templateObject, function (props) {
|
|
314
|
-
return props.theme.color;
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
var originalTheme = { color: 'black' };
|
|
318
|
-
var newTheme = { color: 'blue' };
|
|
319
|
-
|
|
320
|
-
var Theme = function Theme(_ref) {
|
|
321
|
-
var theme = _ref.theme;
|
|
322
|
-
return _react2.default.createElement(
|
|
323
|
-
_ThemeProvider2.default,
|
|
324
|
-
{ theme: theme },
|
|
325
|
-
_react2.default.createElement(Comp, { someProps: theme })
|
|
326
|
-
);
|
|
327
|
-
};
|
|
328
|
-
|
|
329
|
-
var wrapper = (0, _enzyme.mount)(_react2.default.createElement(Theme, { theme: originalTheme }));
|
|
330
|
-
|
|
331
|
-
(0, _utils.expectCSSMatches)('.sc-a {} .b { color: ' + originalTheme.color + '; }');
|
|
332
|
-
expect(wrapper.find('div').prop('className')).toBe('sc-a b');
|
|
333
|
-
|
|
334
|
-
// Change theme
|
|
335
|
-
wrapper.setProps({ theme: newTheme });
|
|
336
|
-
|
|
337
|
-
(0, _utils.expectCSSMatches)('.sc-a {} .b { color: ' + originalTheme.color + '; } .c { color: ' + newTheme.color + '; }');
|
|
338
|
-
expect(wrapper.find('div').prop('className')).toBe('sc-a c');
|
|
339
|
-
});
|
|
340
|
-
|
|
341
|
-
it('should inject props.theme into a component that uses withTheme hoc', function () {
|
|
342
|
-
var originalTheme = { color: 'black' };
|
|
343
|
-
|
|
344
|
-
var MyDiv = function MyDiv(_ref2) {
|
|
345
|
-
var theme = _ref2.theme;
|
|
346
|
-
return _react2.default.createElement(
|
|
347
|
-
'div',
|
|
348
|
-
null,
|
|
349
|
-
theme.color
|
|
350
|
-
);
|
|
351
|
-
};
|
|
352
|
-
var MyDivWithTheme = (0, _withTheme2.default)(MyDiv);
|
|
353
|
-
|
|
354
|
-
var wrapper = (0, _enzyme.mount)(_react2.default.createElement(
|
|
355
|
-
_ThemeProvider2.default,
|
|
356
|
-
{ theme: originalTheme },
|
|
357
|
-
_react2.default.createElement(MyDivWithTheme, null)
|
|
358
|
-
));
|
|
359
|
-
|
|
360
|
-
expect(wrapper.find('div').text()).toBe('black');
|
|
361
|
-
});
|
|
362
|
-
|
|
363
|
-
it('should properly update theme prop on hoc component when theme is changed', function () {
|
|
364
|
-
var MyDiv = function MyDiv(_ref3) {
|
|
365
|
-
var theme = _ref3.theme;
|
|
366
|
-
return _react2.default.createElement(
|
|
367
|
-
'div',
|
|
368
|
-
null,
|
|
369
|
-
theme.color
|
|
370
|
-
);
|
|
371
|
-
};
|
|
372
|
-
var MyDivWithTheme = (0, _withTheme2.default)(MyDiv);
|
|
373
|
-
|
|
374
|
-
var originalTheme = { color: 'black' };
|
|
375
|
-
var newTheme = { color: 'blue' };
|
|
376
|
-
|
|
377
|
-
var Theme = function Theme(_ref4) {
|
|
378
|
-
var theme = _ref4.theme;
|
|
379
|
-
return _react2.default.createElement(
|
|
380
|
-
_ThemeProvider2.default,
|
|
381
|
-
{ theme: theme },
|
|
382
|
-
_react2.default.createElement(MyDivWithTheme, null)
|
|
383
|
-
);
|
|
384
|
-
};
|
|
385
|
-
|
|
386
|
-
var wrapper = (0, _enzyme.mount)(_react2.default.createElement(Theme, { theme: originalTheme }));
|
|
387
|
-
|
|
388
|
-
expect(wrapper.find('div').text()).toBe('black');
|
|
389
|
-
|
|
390
|
-
// Change theme
|
|
391
|
-
wrapper.setProps({ theme: newTheme });
|
|
392
|
-
|
|
393
|
-
expect(wrapper.find('div').text()).toBe('blue');
|
|
394
|
-
});
|
|
395
|
-
|
|
396
|
-
// https://github.com/styled-components/styled-components/issues/445
|
|
397
|
-
it('should use ThemeProvider theme instead of defaultProps theme after initial render', function () {
|
|
398
|
-
var Text = styled.div(_templateObject, function (props) {
|
|
399
|
-
return props.theme.color;
|
|
400
|
-
});
|
|
401
|
-
|
|
402
|
-
Text.defaultProps = {
|
|
403
|
-
theme: {
|
|
404
|
-
color: 'purple'
|
|
405
|
-
}
|
|
406
|
-
};
|
|
407
|
-
|
|
408
|
-
var Theme = function Theme(props) {
|
|
409
|
-
return _react2.default.createElement(
|
|
410
|
-
_ThemeProvider2.default,
|
|
411
|
-
{ theme: { color: 'green' } },
|
|
412
|
-
_react2.default.createElement(Text, props)
|
|
413
|
-
);
|
|
414
|
-
};
|
|
415
|
-
|
|
416
|
-
var wrapper = (0, _enzyme.mount)(_react2.default.createElement(Theme, { prop: 'foo' }));
|
|
417
|
-
|
|
418
|
-
(0, _utils.expectCSSMatches)('.sc-a { } .b { color: green; } ');
|
|
419
|
-
|
|
420
|
-
wrapper.setProps({ prop: 'bar' });
|
|
421
|
-
|
|
422
|
-
(0, _utils.expectCSSMatches)('.sc-a { } .b { color: green; } ');
|
|
423
|
-
});
|
|
424
|
-
|
|
425
|
-
// https://github.com/styled-components/styled-components/issues/596
|
|
426
|
-
it('should hoist static properties when using withTheme', function () {
|
|
427
|
-
var MyComponent = function (_React$Component) {
|
|
428
|
-
_inherits(MyComponent, _React$Component);
|
|
429
|
-
|
|
430
|
-
function MyComponent() {
|
|
431
|
-
_classCallCheck(this, MyComponent);
|
|
432
|
-
|
|
433
|
-
return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
return MyComponent;
|
|
437
|
-
}(_react2.default.Component);
|
|
438
|
-
|
|
439
|
-
MyComponent.myStaticProperty = true;
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
var MyComponentWithTheme = (0, _withTheme2.default)(MyComponent);
|
|
443
|
-
|
|
444
|
-
expect(MyComponentWithTheme.myStaticProperty).toBe(true);
|
|
445
|
-
});
|
|
446
|
-
|
|
447
|
-
it('should accept innerRef and pass it on as ref', function () {
|
|
448
|
-
var Comp = function (_React$Component2) {
|
|
449
|
-
_inherits(Comp, _React$Component2);
|
|
450
|
-
|
|
451
|
-
function Comp() {
|
|
452
|
-
_classCallCheck(this, Comp);
|
|
453
|
-
|
|
454
|
-
return _possibleConstructorReturn(this, _React$Component2.apply(this, arguments));
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
Comp.prototype.render = function render() {
|
|
458
|
-
return _react2.default.createElement('div', null);
|
|
459
|
-
};
|
|
460
|
-
|
|
461
|
-
return Comp;
|
|
462
|
-
}(_react2.default.Component);
|
|
463
|
-
|
|
464
|
-
var CompWithTheme = (0, _withTheme2.default)(Comp);
|
|
465
|
-
var ref = jest.fn();
|
|
466
|
-
|
|
467
|
-
var wrapper = (0, _enzyme.mount)(_react2.default.createElement(
|
|
468
|
-
_ThemeProvider2.default,
|
|
469
|
-
{ theme: {} },
|
|
470
|
-
_react2.default.createElement(CompWithTheme, { innerRef: ref })
|
|
471
|
-
));
|
|
472
|
-
|
|
473
|
-
var inner = wrapper.find(Comp).first();
|
|
474
|
-
|
|
475
|
-
// $FlowFixMe
|
|
476
|
-
expect(ref).toHaveBeenCalledWith(inner.node);
|
|
477
|
-
expect(inner.prop('innerRef')).toBe(undefined);
|
|
478
|
-
});
|
|
479
|
-
|
|
480
|
-
it('should accept innerRef and pass it on for styled components', function () {
|
|
481
|
-
var Comp = styled.div(_templateObject4);
|
|
482
|
-
var CompWithTheme = (0, _withTheme2.default)(Comp);
|
|
483
|
-
var ref = jest.fn();
|
|
484
|
-
|
|
485
|
-
var wrapper = (0, _enzyme.mount)(_react2.default.createElement(
|
|
486
|
-
_ThemeProvider2.default,
|
|
487
|
-
{ theme: {} },
|
|
488
|
-
_react2.default.createElement(CompWithTheme, { innerRef: ref })
|
|
489
|
-
));
|
|
490
|
-
|
|
491
|
-
var inner = wrapper.find(Comp).first();
|
|
492
|
-
|
|
493
|
-
// $FlowFixMe
|
|
494
|
-
expect(ref).toHaveBeenCalledWith(inner.getDOMNode());
|
|
495
|
-
expect(inner.prop('innerRef')).toBe(ref);
|
|
496
|
-
});
|
|
497
|
-
});
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var _templateObject = _taggedTemplateLiteralLoose(['\n width: ', ';\n '], ['\n width: ', ';\n ']);
|
|
4
|
-
|
|
5
|
-
var _react = require('react');
|
|
6
|
-
|
|
7
|
-
var _react2 = _interopRequireDefault(_react);
|
|
8
|
-
|
|
9
|
-
var _enzyme = require('enzyme');
|
|
10
|
-
|
|
11
|
-
var _utils = require('./utils');
|
|
12
|
-
|
|
13
|
-
var _StyleSheet = require('../models/StyleSheet');
|
|
14
|
-
|
|
15
|
-
var _StyleSheet2 = _interopRequireDefault(_StyleSheet);
|
|
16
|
-
|
|
17
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
18
|
-
|
|
19
|
-
function _taggedTemplateLiteralLoose(strings, raw) { strings.raw = raw; return strings; }
|
|
20
|
-
|
|
21
|
-
var styled = void 0;
|
|
22
|
-
|
|
23
|
-
describe('warn too many classes', function () {
|
|
24
|
-
var nativeWarn = console.warn;
|
|
25
|
-
var warnCallCount = void 0;
|
|
26
|
-
/**
|
|
27
|
-
* Make sure the setup is the same for every test
|
|
28
|
-
*/
|
|
29
|
-
beforeEach(function () {
|
|
30
|
-
console.warn = function () {
|
|
31
|
-
return warnCallCount++;
|
|
32
|
-
};
|
|
33
|
-
warnCallCount = 0;
|
|
34
|
-
styled = (0, _utils.resetStyled)();
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
afterEach(function () {
|
|
38
|
-
console.warn = nativeWarn;
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('should warn once', function () {
|
|
42
|
-
var Comp = styled.div(_templateObject, function (props) {
|
|
43
|
-
return props.size;
|
|
44
|
-
});
|
|
45
|
-
for (var i = 0; i < 300; i++) {
|
|
46
|
-
(0, _enzyme.shallow)(_react2.default.createElement(Comp, { size: i }));
|
|
47
|
-
}
|
|
48
|
-
expect(warnCallCount).toEqual(1);
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
it('should warn if number of classes is 200', function () {
|
|
52
|
-
var Comp = styled.div(_templateObject, function (props) {
|
|
53
|
-
return props.size;
|
|
54
|
-
});
|
|
55
|
-
for (var i = 0; i < 200; i++) {
|
|
56
|
-
(0, _enzyme.shallow)(_react2.default.createElement(Comp, { size: i }));
|
|
57
|
-
}
|
|
58
|
-
expect(warnCallCount).toEqual(1);
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
it('should not warn if number of classes is below 200', function () {
|
|
62
|
-
var Comp = styled.div(_templateObject, function (props) {
|
|
63
|
-
return props.size;
|
|
64
|
-
});
|
|
65
|
-
for (var i = 0; i < 199; i++) {
|
|
66
|
-
(0, _enzyme.shallow)(_react2.default.createElement(Comp, { size: i }));
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
expect(warnCallCount).toEqual(0);
|
|
70
|
-
});
|
|
71
|
-
});
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var _extractCompsFromCSS = require('../extractCompsFromCSS');
|
|
4
|
-
|
|
5
|
-
var _extractCompsFromCSS2 = _interopRequireDefault(_extractCompsFromCSS);
|
|
6
|
-
|
|
7
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
8
|
-
|
|
9
|
-
describe('extractCompsFromCSS', function () {
|
|
10
|
-
it('should work for null or empty', function () {
|
|
11
|
-
expect((0, _extractCompsFromCSS2.default)('')).toEqual([]);
|
|
12
|
-
expect((0, _extractCompsFromCSS2.default)(null)).toEqual([]);
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
it('should ignore anything before the first SC', function () {
|
|
16
|
-
expect((0, _extractCompsFromCSS2.default)('\n Totally ignored, who cares.\n ')).toEqual([]);
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
it('should return a single SC', function () {
|
|
20
|
-
var css = '\n /* sc-component-id: 123 */\n .foo { color: red; }\n ';
|
|
21
|
-
expect((0, _extractCompsFromCSS2.default)(css)).toEqual([{ componentId: '123', cssFromDOM: css.replace(/^\n/, '') }]);
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('should return a single SC with multiple lines', function () {
|
|
25
|
-
var css = '\n /* sc-component-id: 123 */\n .foo { color: red; }\n .bar { color: blue; }\n ';
|
|
26
|
-
expect((0, _extractCompsFromCSS2.default)(css)).toEqual([{ componentId: '123', cssFromDOM: css.replace(/^\n/, '') }]);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('should return multiple SCs with single lines', function () {
|
|
30
|
-
var a = '\n /* sc-component-id: 123 */\n .foo { color: red; }\n ';
|
|
31
|
-
var b = '\n /* sc-component-id: 456 */\n .bar { color: blue; }\n ';
|
|
32
|
-
expect((0, _extractCompsFromCSS2.default)(a + b)).toEqual([{ componentId: '123', cssFromDOM: a.replace(/^\n/, '') + '\n' }, { componentId: '456', cssFromDOM: b.replace(/^\n/, '') }]);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
it('should return multiple SCs with multiple lines', function () {
|
|
36
|
-
var a = '\n /* sc-component-id: 123 */\n .foo { color: red; }\n .bar { color: blue; }\n ';
|
|
37
|
-
var b = '\n /* sc-component-id: 456 */\n .baz { color: green; }\n .boo { color: black; }\n ';
|
|
38
|
-
expect((0, _extractCompsFromCSS2.default)(a + b)).toEqual([{ componentId: '123', cssFromDOM: a.replace(/^\n/, '') + '\n' }, { componentId: '456', cssFromDOM: b.replace(/^\n/, '') }]);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it('should include whitespace after a component', function () {
|
|
42
|
-
var a = '\n /* sc-component-id: 123 */\n .foo { color: red; }\n .bar { color: blue; }\n \n \n \n ';
|
|
43
|
-
var b = '\n /* sc-component-id: 456 */\n .baz { color: green; }\n .boo { color: black; }\n \n \n \n ';
|
|
44
|
-
expect((0, _extractCompsFromCSS2.default)(a + b)).toEqual([{ componentId: '123', cssFromDOM: a.replace(/^\n/, '') + '\n' }, { componentId: '456', cssFromDOM: b.replace(/^\n/, '') }]);
|
|
45
|
-
});
|
|
46
|
-
});
|