Skip to content

Commit 0db6de9

Browse files
Enoah NetzachEnoahNetzach
authored andcommitted
Test language features
1 parent 63f71cf commit 0db6de9

33 files changed

+714
-38
lines changed

packages/react-scripts/templates/kitchensink/src/App.js

Lines changed: 73 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,88 @@
1-
// @flow
21
import React from 'react';
32

43
class App extends React.Component {
54
constructor(props) {
6-
super(props)
5+
super(props);
76

8-
this.state = { feature: null }
7+
this.state = { feature: null };
98
}
109

1110
componentDidMount() {
1211
switch (location.hash.slice(1)) {
13-
case 'promises':
14-
require.ensure(['./features/Promises'], () => {
15-
this.setState({ feature: require('./features/Promises').default })
16-
});
12+
case 'array-destructuring':
13+
require.ensure(['./features/syntax/ArrayDestructuring'], () =>
14+
this.setState({ feature: require('./features/syntax/ArrayDestructuring').default })
15+
);
1716
break;
18-
case 'generators':
19-
require.ensure(['./features/Generators'], () => {
20-
this.setState({ feature: require('./features/Generators').default })
21-
});
17+
case 'array-spread':
18+
require.ensure(['./features/syntax/ArraySpread'], () =>
19+
this.setState({ feature: require('./features/syntax/ArraySpread').default })
20+
);
2221
break;
2322
case 'async-await':
24-
require.ensure(['./features/AsyncAwait'], () => {
25-
this.setState({ feature: require('./features/AsyncAwait').default })
26-
});
23+
require.ensure(['./features/syntax/AsyncAwait'], () =>
24+
this.setState({ feature: require('./features/syntax/AsyncAwait').default })
25+
);
26+
break;
27+
case 'class-properties':
28+
require.ensure(['./features/syntax/ClassProperties'], () =>
29+
this.setState({ feature: require('./features/syntax/ClassProperties').default })
30+
);
31+
break;
32+
case 'computed-properties':
33+
require.ensure(['./features/syntax/ComputedProperties'], () =>
34+
this.setState({ feature: require('./features/syntax/ComputedProperties').default })
35+
);
36+
break;
37+
case 'custom-interpolation':
38+
require.ensure(['./features/syntax/CustomInterpolation'], () =>
39+
this.setState({ feature: require('./features/syntax/CustomInterpolation').default })
40+
);
41+
break;
42+
case 'default-parameters':
43+
require.ensure(['./features/syntax/DefaultParameters'], () =>
44+
this.setState({ feature: require('./features/syntax/DefaultParameters').default })
45+
);
46+
break;
47+
case 'destructuring-and-await':
48+
require.ensure(['./features/syntax/DestructuringAndAwait'], () =>
49+
this.setState({ feature: require('./features/syntax/DestructuringAndAwait').default })
50+
);
51+
break;
52+
case 'generators':
53+
require.ensure(['./features/syntax/Generators'], () =>
54+
this.setState({ feature: require('./features/syntax/Generators').default })
55+
);
56+
break;
57+
case 'object-destructuring':
58+
require.ensure(['./features/syntax/ObjectDestructuring'], () =>
59+
this.setState({ feature: require('./features/syntax/ObjectDestructuring').default })
60+
);
61+
break;
62+
case 'object-spread':
63+
require.ensure(['./features/syntax/ObjectSpread'], () =>
64+
this.setState({ feature: require('./features/syntax/ObjectSpread').default })
65+
);
66+
break;
67+
case 'promises':
68+
require.ensure(['./features/syntax/Promises'], () =>
69+
this.setState({ feature: require('./features/syntax/Promises').default })
70+
);
71+
break;
72+
case 'rest-and-default':
73+
require.ensure(['./features/syntax/RestAndDefault'], () =>
74+
this.setState({ feature: require('./features/syntax/RestAndDefault').default })
75+
);
76+
break;
77+
case 'rest-parameters':
78+
require.ensure(['./features/syntax/RestParameters'], () =>
79+
this.setState({ feature: require('./features/syntax/RestParameters').default })
80+
);
81+
break;
82+
case 'template-interpolation':
83+
require.ensure(['./features/syntax/TemplateInterpolation'], () =>
84+
this.setState({ feature: require('./features/syntax/TemplateInterpolation').default })
85+
);
2786
break;
2887
default:
2988
this.setState({ feature: null });
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import React from 'react'
2+
3+
function load() {
4+
return [
5+
[1, '1'],
6+
[2, '2'],
7+
[3, '3'],
8+
[4, '4']
9+
];
10+
}
11+
12+
export default class extends React.Component {
13+
constructor(props) {
14+
super(props);
15+
16+
this.state = { users: [] };
17+
}
18+
19+
async componentDidMount() {
20+
const users = load();
21+
this.setState({ users });
22+
}
23+
24+
render() {
25+
return (
26+
<div id="feature-array-destructuring">
27+
{this.state.users.map(user => {
28+
const [id, name] = user;
29+
return <div key={id}>{name}</div>
30+
})}
31+
</div>
32+
);
33+
}
34+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import React from 'react';
2+
import ReactDOM from 'react-dom';
3+
import ArrayDestructuring from './ArrayDestructuring';
4+
5+
describe('array destructuring', () => {
6+
it('renders without crashing', () => {
7+
const div = document.createElement('div');
8+
ReactDOM.render(<ArrayDestructuring />, div);
9+
});
10+
});
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import React from 'react'
2+
3+
function load(users) {
4+
return [
5+
{ id: 1, name: '1' },
6+
{ id: 2, name: '2' },
7+
{ id: 3, name: '3' },
8+
...users
9+
];
10+
}
11+
12+
export default class extends React.Component {
13+
constructor(props) {
14+
super(props);
15+
16+
this.state = { users: [] };
17+
}
18+
19+
async componentDidMount() {
20+
const users = load([{ id: 42, name: '42' }]);
21+
this.setState({ users });
22+
}
23+
24+
render() {
25+
return (
26+
<div id="feature-array-spread">
27+
{this.state.users.map(user => (
28+
<div key={user.id}>{user.name}</div>
29+
))}
30+
</div>
31+
);
32+
}
33+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import React from 'react';
2+
import ReactDOM from 'react-dom';
3+
import ArraySpread from './ArraySpread';
4+
5+
describe('array spread', () => {
6+
it('renders without crashing', () => {
7+
const div = document.createElement('div');
8+
ReactDOM.render(<ArraySpread />, div);
9+
});
10+
});

packages/react-scripts/templates/kitchensink/src/features/AsyncAwait.js renamed to packages/react-scripts/templates/kitchensink/src/features/syntax/AsyncAwait.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ async function load() {
1111

1212
export default class extends React.Component {
1313
constructor(props) {
14-
super(props)
14+
super(props);
1515

16-
this.state = { users: [] }
16+
this.state = { users: [] };
1717
}
1818

1919
async componentDidMount() {
@@ -28,6 +28,6 @@ export default class extends React.Component {
2828
<div key={user.id}>{user.name}</div>
2929
))}
3030
</div>
31-
)
31+
);
3232
}
3333
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import React from 'react';
2+
import ReactDOM from 'react-dom';
3+
import AsyncAwait from './AsyncAwait';
4+
5+
describe('async/await', () => {
6+
it('renders without crashing', () => {
7+
const div = document.createElement('div');
8+
ReactDOM.render(<AsyncAwait />, div);
9+
});
10+
});
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import React from 'react'
2+
3+
export default class extends React.Component {
4+
users = [
5+
{ id: 1, name: '1' },
6+
{ id: 2, name: '2' },
7+
{ id: 3, name: '3' },
8+
{ id: 4, name: '4' }
9+
];
10+
11+
render() {
12+
return (
13+
<div id="feature-class-properties">
14+
{this.users.map(user => (
15+
<div key={user.id}>{user.name}</div>
16+
))}
17+
</div>
18+
);
19+
}
20+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import React from 'react';
2+
import ReactDOM from 'react-dom';
3+
import ClassProperties from './ClassProperties';
4+
5+
describe('class properties', () => {
6+
it('renders without crashing', () => {
7+
const div = document.createElement('div');
8+
ReactDOM.render(<ClassProperties />, div);
9+
});
10+
});
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import React from 'react'
2+
3+
function load(prefix) {
4+
return [
5+
{ id: 1, [prefix + 'name']: '1' },
6+
{ id: 2, [prefix + 'name']: '2' },
7+
{ id: 3, [prefix + 'name']: '3' },
8+
{ id: 4, [prefix + 'name']: '4' }
9+
];
10+
}
11+
12+
export default class extends React.Component {
13+
constructor(props) {
14+
super(props);
15+
16+
this.state = { users: [] };
17+
}
18+
19+
async componentDidMount() {
20+
const users = load('user_');
21+
this.setState({ users });
22+
}
23+
24+
render() {
25+
return (
26+
<div id="feature-computed-properties">
27+
{this.state.users.map(user => (
28+
<div key={user.id}>{user.user_name}</div>
29+
))}
30+
</div>
31+
);
32+
}
33+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import React from 'react';
2+
import ReactDOM from 'react-dom';
3+
import ComputedProperties from './ComputedProperties';
4+
5+
describe('computed properties', () => {
6+
it('renders without crashing', () => {
7+
const div = document.createElement('div');
8+
ReactDOM.render(<ComputedProperties />, div);
9+
});
10+
});
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import React from 'react'
2+
3+
const styled = ([style]) => style.trim()
4+
.split(/\s*;\s*/)
5+
.map(rule => rule.split(/\s*:\s*/))
6+
.reduce((rules, rule) => ({ ...rules, [rule[0]]: rule[1] }), {});
7+
8+
function load() {
9+
return [
10+
{ id: 1, name: '1' },
11+
{ id: 2, name: '2' },
12+
{ id: 3, name: '3' },
13+
{ id: 4, name: '4' }
14+
];
15+
}
16+
17+
export default class extends React.Component {
18+
constructor(props) {
19+
super(props);
20+
21+
this.state = { users: [] };
22+
}
23+
24+
async componentDidMount() {
25+
const users = load();
26+
this.setState({ users });
27+
}
28+
29+
render() {
30+
const veryInlineStyle = styled`
31+
background: palevioletred;
32+
color: papayawhip;
33+
`;
34+
35+
return (
36+
<div id="feature-custom-interpolation">
37+
{this.state.users.map(user => (
38+
<div key={user.id} style={veryInlineStyle}>{user.name}</div>
39+
))}
40+
</div>
41+
);
42+
}
43+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import React from 'react';
2+
import ReactDOM from 'react-dom';
3+
import CustomInterpolation from './CustomInterpolation';
4+
5+
describe('custom interpolation', () => {
6+
it('renders without crashing', () => {
7+
const div = document.createElement('div');
8+
ReactDOM.render(<CustomInterpolation />, div);
9+
});
10+
});
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import React from 'react'
2+
3+
function load(id = 0) {
4+
return [
5+
{ id: id + 1, name: '1' },
6+
{ id: id + 2, name: '2' },
7+
{ id: id + 3, name: '3' },
8+
{ id: id + 4, name: '4' }
9+
];
10+
}
11+
12+
export default class extends React.Component {
13+
constructor(props) {
14+
super(props);
15+
16+
this.state = { users: [] };
17+
}
18+
19+
async componentDidMount() {
20+
const users = load();
21+
this.setState({ users });
22+
}
23+
24+
render() {
25+
return (
26+
<div id="feature-default-parameters">
27+
{this.state.users.map(user => (
28+
<div key={user.id}>{user.name}</div>
29+
))}
30+
</div>
31+
);
32+
}
33+
}

0 commit comments

Comments
 (0)