Skip to content

Commit 681dc70

Browse files
committed
Support React 16, fix jest coverage directory
1 parent 0cfc77c commit 681dc70

7 files changed

Lines changed: 68 additions & 38 deletions

File tree

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989
],
9090
"jest": {
9191
"rootDir": "src",
92+
"coverageDirectory": "../coverage",
9293
"setupFiles": [
9394
"raf/polyfill"
9495
]

src/injectStyled.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import {createElement} from 'react'
2+
import type {ComponentType} from 'react'
23

34
import composeClasses from './utils/composeClasses'
45
import type {StyledType} from './types'
56

6-
const injectStyled = (styled: StyledType) => (InnerComponent: ReactClass<any>) => {
7+
const injectStyled = (styled: StyledType) => (InnerComponent: ComponentType<any>) => {
78
const sheet = styled.mountSheet()
89

910
const classes = Object.keys(sheet.classes).reduce((acc, name) => ({

src/styled.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,10 @@ const styled = ({tagName, elementStyle, mountSheet}: StyledArgs) => {
2424
const availableDynamicTagNames = []
2525
const classMap = {}
2626

27-
return class StyledElement extends Component {
27+
return class StyledElement extends Component<StyledElementPropsType> {
2828
static tagName: string = tagName
2929
static style: ComponentStyleType = elementStyle
3030

31-
props: StyledElementPropsType
32-
3331
dynamicTagName = ''
3432

3533
sheet: JssSheet
@@ -76,15 +74,15 @@ const styled = ({tagName, elementStyle, mountSheet}: StyledArgs) => {
7674
for (ruleIndex; ruleIndex < classMap[this.dynamicTagName].length; ruleIndex++) {
7775
rule = classMap[this.dynamicTagName][ruleIndex]
7876

79-
if (rule.name) this.sheet.update(rule.name, props)
77+
if (rule.key) this.sheet.update(rule.key, props)
8078
if (rule.rules) rule.rules.update(props)
8179
}
8280
}
8381

8482
render() {
8583
const {children, className, ...attrs} = this.props
8684

87-
const props = filterProps(attrs)
85+
const props = filterProps(tagName, attrs)
8886
const tagClass = composeClasses([
8987
staticTagName && this.sheet.classes[staticTagName],
9088
this.dynamicTagName && this.sheet.classes[this.dynamicTagName],

src/tests/__snapshots__/functional.spec.jsx.snap

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
13
exports[`functional tests should update dynamic props for conditional rules 1`] = `
24
".button-1-id {
35
padding: 10px;

src/tests/__snapshots__/index.spec.jsx.snap

Lines changed: 49 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,111 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
13
exports[`base rendering tests renders correctly App with default Styled 1`] = `
24
<div
3-
className="div-8-0-8">
5+
className="div-8-0-9"
6+
>
47
<header
5-
className="header-9-0-9">
8+
className="header-9-0-10"
9+
>
610
<h1
7-
className="h1-12-0-10">
11+
className="h1-12-0-11"
12+
>
813
Title
914
</h1>
1015
</header>
1116
<section
12-
className="section-10-0-11"
13-
data-name="content">
17+
className="section-10-0-12"
18+
data-name="content"
19+
>
1420
<button
15-
className="button-13-0-12">
21+
className="button-13-0-13"
22+
>
1623
primitive test
1724
</button>
1825
<button
19-
className="button-14-0-13">
26+
className="button-14-0-14"
27+
>
2028
dynamic primitive test
2129
</button>
2230
</section>
2331
<section
24-
className="section-11-0-14">
32+
className="section-11-0-15"
33+
>
2534
Another section
2635
</section>
2736
</div>
2837
`;
2938

3039
exports[`base rendering tests renders correctly App with default styled 1`] = `
3140
<div
32-
className="div-1-0-0">
41+
className="div-1-0-1"
42+
>
3343
<header
34-
className="header-2-0-1">
44+
className="header-2-0-2"
45+
>
3546
<h1
36-
className="h1-5-0-2">
47+
className="h1-5-0-3"
48+
>
3749
Title
3850
</h1>
3951
</header>
4052
<section
41-
className="section-3-0-3"
42-
data-name="content">
53+
className="section-3-0-4"
54+
data-name="content"
55+
>
4356
<button
44-
className="button-6-0-4">
57+
className="button-6-0-5"
58+
>
4559
primitive test
4660
</button>
4761
<button
48-
className="button-7-0-5">
62+
className="button-7-0-6"
63+
>
4964
dynamic primitive test
5065
</button>
5166
</section>
5267
<section
53-
className="section-4-0-6">
68+
className="section-4-0-7"
69+
>
5470
Another section
5571
</section>
5672
</div>
5773
`;
5874

5975
exports[`base rendering tests renders correctly App with injectStyled 1`] = `
6076
<div
61-
className="root-0-15">
77+
className="root-0-16"
78+
>
6279
<div
63-
className="div-15-0-17">
80+
className="div-15-0-18"
81+
>
6482
<header
65-
className="header-16-0-18">
83+
className="header-16-0-19"
84+
>
6685
<h1
67-
className="h1-19-0-19">
86+
className="h1-19-0-20"
87+
>
6888
Title
6989
</h1>
7090
</header>
7191
<section
72-
className="section-17-0-20"
73-
data-name="content">
92+
className="section-17-0-21"
93+
data-name="content"
94+
>
7495
<button
75-
className="button-20-0-21">
96+
className="button-20-0-22"
97+
>
7698
primitive test
7799
</button>
78100
<button
79-
className="button-21-0-22">
101+
className="button-21-0-23"
102+
>
80103
dynamic primitive test
81104
</button>
82105
</section>
83106
<section
84-
className="section-18-0-23">
107+
className="section-18-0-24"
108+
>
85109
Another section
86110
</section>
87111
</div>

src/tests/functional.spec.jsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'react-dom'
22
import React from 'react'
3-
import {mount} from 'enzyme'
3+
import Enzyme, {mount} from 'enzyme'
4+
import Adapter from 'enzyme-adapter-react-16'
45

56
import {
67
getCss,
@@ -9,21 +10,23 @@ import {
910

1011
import CreateApp from './App'
1112

13+
Enzyme.configure({adapter: new Adapter()})
14+
1215
let Styled
1316
let styled
1417

1518
const mockNameGenerators = () => {
1619
let styledCounter = 0
1720

1821
jest.mock('../utils/generateTagName')
19-
jest.mock('jss/lib/utils/generateClassName')
22+
jest.mock('jss/lib/utils/createGenerateClassName')
2023

2124
const generateTagName = require('../utils/generateTagName').default
22-
const generateClassName = require('jss/lib/utils/generateClassName').default
25+
const createGenerateClassName = require('jss/lib/utils/createGenerateClassName').default
2326

2427
// $FlowIgnore
2528
generateTagName.mockImplementation((tagName: string) => `${tagName}-${++styledCounter}`)
26-
generateClassName.mockImplementation(rule => `${rule.name}-id`)
29+
createGenerateClassName.mockImplementation(() => rule => `${rule.key}-id`)
2730
}
2831

2932
const assertSheet = (sheet) => {

src/utils/filterProps.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
import isReactProp from 'is-react-prop'
1+
import checkAttr from 'is-react-prop/checkAttr'
22

3-
export default (props: Object) => {
3+
export default (tagName: string, props: Object) => {
44
const filtered = {}
55
const propNames = Object.keys(props)
66
let name
77

88
for (let i = 0; i < propNames.length; i++) {
99
name = propNames[i]
10-
if (isReactProp(name)) {
10+
11+
if (checkAttr(tagName, name)) {
1112
filtered[name] = props[name]
1213
}
1314
}

0 commit comments

Comments
 (0)