Remove perf folder
cpojer committed
Mar 17, 2015 at 13:40 UTC
72919425503008be4adae014057fbf42b17cf3d8
24 files changed
-1484
.travis.yml
-1
@@ -49,7 +49,6 @@ matrix:
49
fast_finish: true
50
allow_failures:
51
- env: TEST_TYPE=test:coverage
52
- - env: TEST_TYPE=perf:full
52
- env: TEST_TYPE=test:webdriver:saucelabs:modern
53
- env: TEST_TYPE=test:webdriver:saucelabs BROWSER_NAME=ie11
54
- env: TEST_TYPE=test:webdriver:saucelabs BROWSER_NAME=ie10
Gruntfile.js
-32
@@ -24,7 +24,6 @@ module.exports = function(grunt) {
24
populist: require('./grunt/config/populist')(grunt),
25
connect: require('./grunt/config/server')(grunt),
26
'webdriver-jasmine': require('./grunt/config/webdriver-jasmine'),
27
- 'webdriver-perf': require('./grunt/config/webdriver-perf'),
27
npm: require('./grunt/config/npm'),
28
clean: [
29
'./build',
@@ -79,8 +78,6 @@ module.exports = function(grunt) {
78
79
grunt.registerMultiTask('webdriver-jasmine', webdriverJasmineTasks);
80
82
- grunt.registerMultiTask('webdriver-perf', require('./grunt/tasks/webdriver-perf'));
83
-
81
grunt.registerMultiTask('npm', npmTask);
82
83
grunt.registerTask('npm-react:release', npmReactTasks.buildRelease);
@@ -119,14 +116,6 @@ module.exports = function(grunt) {
116
'version-check',
117
'browserify:withCodeCoverageLogging'
118
]);
122
- grunt.registerTask('build:perf', [
123
- 'jsx:normal',
124
- 'version-check',
125
- 'browserify:transformer',
126
- 'browserify:basic',
127
- 'browserify:min',
128
- 'download-previous-version'
129
- ]);
119
grunt.registerTask('build:test', [
120
'delete-build-modules',
121
'jsx:test',
@@ -153,12 +142,6 @@ module.exports = function(grunt) {
142
'webdriver-jasmine:local'
143
]);
144
156
- grunt.registerTask('perf:webdriver:phantomjs', [
157
- 'connect',
158
- 'webdriver-phantomjs',
159
- 'webdriver-perf:local'
160
- ]);
161
-
145
grunt.registerTask('test:full', [
146
'build:test',
147
'build:basic',
@@ -173,20 +156,6 @@ module.exports = function(grunt) {
156
'webdriver-jasmine:saucelabs_chrome'
157
]);
158
176
- grunt.registerTask('perf:full', [
177
- 'build:perf',
178
-
179
- 'connect',
180
- 'webdriver-phantomjs',
181
- 'webdriver-perf:local',
182
-
183
- 'sauce-tunnel',
184
- 'webdriver-perf:saucelabs_firefox',
185
- 'webdriver-perf:saucelabs_chrome',
186
- 'webdriver-perf:saucelabs_ie11',
187
- 'webdriver-perf:saucelabs_ie8'
188
- ]);
189
-
159
grunt.registerTask('test:webdriver:saucelabs', [
160
'build:test',
161
'build:basic',
@@ -251,7 +220,6 @@ module.exports = function(grunt) {
220
grunt.task.run('build:test', 'build:basic', 'test:webdriver:phantomjs');
221
}
222
});
254
- grunt.registerTask('perf', ['build:perf', 'perf:webdriver:phantomjs']);
223
grunt.registerTask('npm:test', ['build', 'npm:pack']);
224
225
// Optimized build task that does all of our builds. The subtasks will be run
grunt/config/webdriver-perf.js
deleted
-55
@@ -1,55 +0,0 @@
1
-'use strict';
2
-
3
-var grunt = require('grunt');
4
-var path = require('path');
5
-
6
-var tests = grunt.file.expand(path.join(__dirname, '/../../perf/tests/*'));
7
-
8
-var maxTime = 5;
9
-
10
-var reactVersions = [
11
- 'edge',
12
- 'previous'
13
-];
14
-
15
-var params = []
16
- .concat('headless=false')
17
- .concat('maxTime=' + maxTime)
18
- .concat(tests
19
- .map(function(testPath) {
20
- return testPath.split(/tests./i).reverse()[0];
21
- })
22
- .map(encodeURIComponent)
23
- .map(function(filename) {
24
- return 'test=' + filename;
25
- })
26
- )
27
- .concat(reactVersions
28
- .map(encodeURIComponent)
29
- .map(function(version) {
30
- return 'react=' + version;
31
- }
32
- )
33
-);
34
-
35
-module.exports = require('./webdriver-all')({
36
-
37
- url: 'http://127.0.0.1:9999/perf/index.html?' + params.join('&'),
38
-
39
- isDoneTimeout: 15 * 60 * 1000,
40
-
41
- onStart: function() {
42
- grunt.event.on('perf results', function(results) {
43
- console.log(results);
44
- });
45
- },
46
-
47
- onComplete: function(completedTestKeys) {
48
- grunt.verbose.writeln('onComplete ' + JSON.stringify(completedTestKeys));
49
- },
50
-
51
- onError: function(error) {
52
- grunt.fatal(error);
53
- }
54
-
55
-});
grunt/tasks/webdriver-perf.js
deleted
-20
@@ -1,20 +0,0 @@
1
-'use strict';
2
-
3
-var grunt = require('grunt');
4
-
5
-module.exports = function() {
6
- return require('./webdriver-all').call(this, function(config, wd, browser) {
7
- if (!config.isDoneTimeout) {
8
- grunt.verbose.writeln('Expected isDoneTimeout config, using default value');
9
- }
10
- grunt.verbose.writeln('isDoneTimeout:' + config.isDoneTimeout);
11
- return browser
12
- .waitFor(wd.asserters.jsCondition('window.isDone === false'), 5e3, 50)
13
- .fail(function(error) {
14
- throw Error('The test page didn\'t load properly. ' + error);
15
- })
16
- .waitFor(wd.asserters.jsCondition('window.isDone === true'), config.isDoneTimeout || 30e3, 1e3)
17
- .waitFor(wd.asserters.jsCondition('window.postDataToURL.running <= 0'), 30e3, 500)
18
- .eval('window.completedTestKeys || window._unhandledError');
19
- });
20
-};
perf/.eslintrc
deleted
-21
@@ -1,21 +0,0 @@
1
-globals:
2
- document: true
3
- window: true
4
- Benchmark: true
5
- React: true
6
- _rootNode: true
7
- todolist: true
8
- _app: true
9
- _todo1: true
10
- _todo2: true
11
- _todo3: true
12
- _timesToRun: true
13
- setState: true
14
-
15
-rules:
16
- strict: false
17
- no-undef: false
18
- no-unused-vars: false
19
- block-scoped-var: false
20
- consistent-return: false
21
- no-shadow: false
perf/index.html
deleted
-67
@@ -1,67 +0,0 @@
1
-<!doctype html>
2
-<meta charset=utf-8>
3
-<title>Perf Tests</title>
4
-
5
-<script>
6
-window.onerror = function(error){
7
- window._unhandledError = error;
8
- window.isDone = true;
9
-}
10
-</script>
11
-
12
-<script src="./lib/perf-test-runner.browser.js"></script>
13
-<script> perfRunner.Polyfill(); </script>
14
-<script src="../build/react.js"></script>
15
-<script src="../build/JSXTransformer.js"></script>
16
-<script src="../test/lib/postDataToURL.browser.js"></script>
17
-<script src="./lib/BrowserPerfRunnerContext.react.js"></script>
18
-<script src="./lib/BrowserPerfRunnerApp.react.js"></script>
19
-
20
-<script>
21
-
22
-var tests = [
23
- "sanity.js",
24
- "todolist-mount.js",
25
- "todolist-edit.js",
26
- "todolist-add.js",
27
- "todolist-do-stuff.js",
28
- "setState-callback-5.js",
29
- "setState-callback.js",
30
- "basic-div.js",
31
- "basic-unmount.js",
32
- "propTypes.js",
33
- "renderComponent-basic.js",
34
- "shouldComponentUpdate.js",
35
-];
36
-
37
-var reactVersions = [
38
- 'edge',
39
- 'builds/master/latest'
40
-];
41
-
42
-window.onload = function(){
43
- window.isDone = false;
44
-
45
- React.render(
46
- BrowserPerfRunnerApp({
47
- headless: perfRunner.getQueryParamArrayOrDefault('headless', [false])[0],
48
- react: perfRunner.getQueryParamArrayOrDefault('react', reactVersions),
49
- tests: perfRunner.getQueryParamArrayOrDefault('test', tests),
50
- maxTime: perfRunner.getQueryParamArrayOrDefault('maxTime', [5])[0],
51
- onCompleteEach: function(results){
52
- console.log('onCompleteEach', results);
53
- postDataToURL({type:'perf', message:results}, '/reportTestResults');
54
- },
55
- onError: function(error){
56
- window._unhandledError = error;
57
- },
58
- onComplete: function(results){
59
- window.completedTestKeys = Object.keys(results);
60
- window.isDone = true;
61
- }
62
- }),
63
- document.body
64
- );
65
-}
66
-
67
-</script>
perf/lib/BrowserPerfRunnerApp.react.js
deleted
-219
@@ -1,219 +0,0 @@
1
-var BrowserPerfRunnerApp = React.createClass({
2
-
3
- propTypes: {
4
- tests: React.PropTypes.array.isRequired,
5
- react: React.PropTypes.array.isRequired,
6
- maxTime: React.PropTypes.number,
7
- onCompleteEach: React.PropTypes.func,
8
- onComplete: React.PropTypes.func,
9
- onError: React.PropTypes.func,
10
- headless: React.PropTypes.bool
11
- },
12
-
13
- getInitialState: function() {
14
- var queue = [];
15
- this.props.tests.forEach(function(testName) {
16
- this.props.react.forEach(function(version) {
17
- queue.push({
18
- test: testName,
19
- react: version
20
- });
21
- }, this);
22
- }, this);
23
- return {
24
- queue: queue,
25
- results: {}
26
- };
27
- },
28
-
29
- handleResults: function(results) {
30
- this.state.results[results.test + '@' + results.react] = results;
31
- this.replaceState(this.state);
32
- },
33
-
34
- handleComplete: function(queueItem) {
35
- queueItem.completed = true;
36
-
37
- if (!this.props.onCompleteEach) {
38
- return;
39
- }
40
- // Can't get the resultsForAllVersions if there are still some queued
41
- var incompleteCount = 0;
42
- for (var index = this.state.queue.length; --index >= 0;) {
43
- if (this.state.queue[index].completed) {
44
- continue;
45
- }
46
- if (this.state.queue[index].test === queueItem.test) {
47
- return;
48
- }
49
- incompleteCount++;
50
- }
51
- var resultsForAllVersions = Object.keys(this.state.results)
52
- .filter(function(key) {
53
- return key.indexOf(queueItem.test) === 0;
54
- })
55
- .map(function(key) {
56
- return this.state.results[key];
57
- }, this);
58
- this.props.onCompleteEach(resultsForAllVersions);
59
-
60
- if (this.props.onComplete && incompleteCount === 0) {
61
- this.props.onComplete(this.state.results);
62
- }
63
- },
64
-
65
- render: function() {
66
- var grid = null;
67
-
68
- if (!this.props.headless) {
69
- grid = GridViewTable({
70
- rows: this.props.tests,
71
- cols: this.props.react,
72
- renderCell: BrowserPerfRunnerApp.renderBenchmarkCell,
73
- value: this.state.results
74
- });
75
- }
76
-
77
- return React.DOM.div(null,
78
- BenchmarkQueue({
79
- initialQueue: this.state.queue,
80
- onChange: this.handleResults,
81
- maxTime: this.props.maxTime,
82
- onCompleteEach: this.handleComplete,
83
- onError: this.props.onError
84
- }),
85
- grid
86
- );
87
- }
88
-});
89
-
90
-BrowserPerfRunnerApp.renderBenchmarkCell = function(props, row, col) {
91
- if (col == null && row == null) {
92
- return React.DOM.th(null);
93
- }
94
- if (row == null) {
95
- return React.DOM.th({style:{verticalAlign:'top', textAlign:'center'}}, col);
96
- }
97
-
98
- var benchmarks = Object.keys(props.value)
99
- .filter(function(key) {
100
- return key.indexOf(row) === 0;
101
- })
102
- .map(function(key) {
103
- return props.value[key];
104
- })
105
- .filter(function(benchmark) {
106
- return benchmark && !benchmark.isRunning && benchmark.stats;
107
- });
108
-
109
- if (col == null) {
110
- return React.DOM.th({style:{verticalAlign:'top', textAlign:'right'}},
111
- React.DOM.a({href:'?test=' + row}, benchmarks[0] && benchmarks[0].name || row)
112
- );
113
- }
114
-
115
- var key = row + '@' + col;
116
- var benchmark = props.value[key];
117
- if (!(benchmark && benchmark.stats)) {
118
- return React.DOM.td({key:key});
119
- }
120
-
121
-
122
- var colors = [
123
- '000000',
124
- 'AA0000',
125
- '00AA00',
126
- 'AA5500',
127
- '0000AA',
128
- 'AA00AA',
129
- '00AAAA',
130
- 'AAAAAA',
131
-
132
- '555555',
133
- 'FF5555',
134
- '55FF55',
135
- 'FFFF55',
136
- '5555FF',
137
- 'FF55FF',
138
- '55FFFF',
139
- 'FFFFFF'
140
- ];
141
-
142
- function chartValue(value) {
143
- return Math.round(valueFromRangeToRange(value, chartValue.min, chartValue.max, 0, 100));
144
- }
145
- chartValue.min = Math.min.apply(Math, benchmarks.map(function(benchmark) {
146
- return Math.min.apply(Math, benchmark.stats.sample);
147
- }));
148
- chartValue.max = Math.max.apply(Math, benchmarks.map(function(benchmark) {
149
- return Math.max.apply(Math, benchmark.stats.sample);
150
- }));
151
-
152
- var means = benchmarks.map(function(benchmark) {
153
- return benchmark.stats.mean;
154
- });
155
- benchmarks.forEach(function(benchmark) {
156
- benchmark.isTheWinner = benchmark.stats.mean <= Math.min.apply(Math, means);
157
- });
158
-
159
- var chartValues = benchmarks.map(function(benchmark) {
160
- // benchmark.stats.sample.sort(function(a,b) {return b - a;});
161
- return benchmark.stats.sample.map(chartValue).join(',');
162
- }).join('|');
163
-
164
- return (
165
- React.DOM.td({key:key, style:{textAlign:'center', width:234, verticalAlign:'top'}},
166
- benchmark.error && benchmark.error.message || '',
167
- React.DOM.div({style: benchmark.isTheWinner ? {backgroundColor:'#0A5', color:'#AFA'} : {backgroundColor:'transparent', color:'inherit'}},
168
- Math.round(1 / benchmark.stats.mean * 100) / 100, ' op/s ',
169
- React.DOM.strong(null, Math.round(benchmark.stats.mean * 1000 * 100) / 100, ' ms/op '),
170
- React.DOM.small(null, '(±' + (Math.round(benchmark.stats.rme * 10) / 10) + '%)')
171
- ),
172
- benchmark.isRunning && 'Running' || React.DOM.img({
173
- style: {
174
- borderWidth: 2,
175
- borderStyle: 'solid',
176
- color: '#' + colors[benchmarks.indexOf(benchmark)]
177
- },
178
- width: 230,
179
- height: 50,
180
- src: 'https://chart.googleapis.com/chart?cht=ls&chs=460x100&chd=t:' + chartValues + '&chco=' + colors.join(',')
181
- })
182
- )
183
- );
184
-};
185
-
186
-function valueFromRangeToRange(value, fromMin, fromMax, toMin, toMax) {
187
- var fromRange = fromMax - fromMin;
188
- var toRange = toMax - toMin;
189
- return (((value - fromMin) * toRange) / fromRange) + toMin;
190
-}
191
-
192
-var GridViewTable = React.createClass({
193
-
194
- propTypes: {
195
- rows: React.PropTypes.array.isRequired,
196
- cols: React.PropTypes.array.isRequired,
197
- renderCell: React.PropTypes.func.isRequired
198
- },
199
-
200
- _renderCell: function(col) {
201
- return this.props.renderCell({value:this.props.value}, this._row, col);
202
- },
203
-
204
- _renderRow: function(row) {
205
- this._row = row;
206
- return React.DOM.tr({key:row},
207
- this._renderCell(null, 0),
208
- this.props.cols.map(this._renderCell, this)
209
- );
210
- },
211
-
212
- render: function() {
213
- return React.DOM.table(null,
214
- this._renderRow(null, 0),
215
- this.props.rows.map(this._renderRow, this)
216
- );
217
- }
218
-
219
-});
perf/lib/BrowserPerfRunnerContext.react.js
deleted
-201
@@ -1,201 +0,0 @@
1
-var BenchmarkQueue = React.createClass({
2
- propTypes: {
3
- debug: React.PropTypes.bool,
4
- onChange: React.PropTypes.func.isRequired,
5
- initialQueue: React.PropTypes.array.isRequired,
6
- maxTime: React.PropTypes.number,
7
- onCompleteEach: React.PropTypes.func,
8
- onError: React.PropTypes.func
9
- },
10
-
11
- getDefaultProps: function() {
12
- return {
13
- maxTime: 5
14
- };
15
- },
16
-
17
- getInitialState: function() {
18
- return {
19
- queue: this.props.initialQueue.slice()
20
- };
21
- },
22
-
23
- setItemState: function(state) {
24
- state.test = this.state.queue[0].test;
25
- state.react = this.state.queue[0].react;
26
- this.props.onChange(state);
27
- },
28
-
29
- handleContextReady: function(window) {
30
- var benchmark = window.Benchmark(window.exports);
31
- benchmark.options.maxTime = this.props.maxTime; //DEBUG
32
-
33
- var itemState = {
34
- testRunnerURL: window.location.href,
35
-
36
- name: window.exports.name,
37
- platform: window.Benchmark.platform.description,
38
- reactVersion: window.React.version,
39
-
40
- isMinified: (function() {
41
- var code = window.React.render.toString();
42
- return code.indexOf(',') - code.indexOf('(') <= 2;
43
- }())
44
- };
45
-
46
- this.setItemState(itemState);
47
-
48
- var self = this;
49
- benchmark.on('start error cycle complete', function() {
50
- var stats = JSON.parse(JSON.stringify(benchmark.stats));
51
- itemState.stats = stats;
52
- itemState.isRunning = benchmark.running;
53
- itemState.error = benchmark.error;
54
- self.setItemState(itemState);
55
- });
56
- if (this.props.onError) {
57
- benchmark.on('error', this.props.onError);
58
- }
59
- benchmark.on('complete', function() {
60
- var queue = self.state.queue.slice();
61
- var queueItem = queue.shift();
62
- if (self.props.onCompleteEach) {
63
- self.props.onCompleteEach(queueItem);
64
- }
65
- self.setState({queue:queue});
66
- });
67
- benchmark.run({async:true});
68
- },
69
-
70
- shouldComponentUpdate: function(nextProps, nextState) {
71
- return nextState.queue.length < this.state.queue.length;
72
- },
73
-
74
- render: function() {
75
- if (!(this.state.queue && this.state.queue.length > 0)) {
76
- return React.DOM.div({style:{display:'none'}});
77
- }
78
- return BrowserPerfRunnerContext({
79
- debug: this.props.debug,
80
- test: this.state.queue[0].test,
81
- react: this.state.queue[0].react,
82
- onReady: this.handleContextReady
83
- });
84
- }
85
-});
86
-
87
-var BrowserPerfRunnerContext = React.createClass({
88
-
89
- propTypes: {
90
- debug: React.PropTypes.bool,
91
- test: function(object, key) {
92
- React.PropTypes.string.isRequired(object, key);
93
- if (/\.jsx?$/i.test(object[key])) {
94
- return;
95
- }
96
- throw Error('Expected `' + key + '` to be a test file name with extension `.js` or `.jsx`');
97
- },
98
- react: function(object, key) {
99
- React.PropTypes.string.isRequired(object, key);
100
- if (/^(?:builds\/.+|edge|previous|(?:\d+\.){2}\d+)$/.test(object[key])) {
101
- return;
102
- }
103
- throw Error('Expected `' + key + '` prop to be a valid react version string, build string or \'edge\' or \'previous\'');
104
- },
105
- onReady: React.PropTypes.func.isRequired
106
- },
107
-
108
- getInitialState: function() {
109
- return {
110
- testRunnerURL:'about:blank'
111
- };
112
- },
113
-
114
- // _handleFrameError: function(error) {
115
- // console.error('BrowserPerfRunnerContext', error);
116
- // },
117
- //
118
- // _handleFrameLoad: function(event) {
119
- // console.log('BrowserPerfRunnerContext', event);
120
- // },
121
- //
122
- _handleMessage: function(event) {
123
- if (location.href.indexOf(event.origin) !== 0) {
124
- return console.debug('BrowserPerfRunnerContext#_handleMessage ignored message from ' + event.origin);
125
- }
126
- if (event.source.location.href.indexOf(this.state.testRunnerURL) === -1) {
127
- return console.debug('BrowserPerfRunnerContext#_handleMessage ignored message from ' + event.source.location.href);
128
- }
129
- if (event.data !== 'Ready!') {
130
- return console.debug('BrowserPerfRunnerContext#_handleMessage ignored message ' + JSON.stringify(event.data));
131
- }
132
- this.props.onReady(event.source);
133
- },
134
-
135
- _getTestRunnerURL: function(props) {
136
- return 'runner.html' +
137
- '?' +
138
- 'debug=' + (props.debug ? 1 : 0) +
139
- '&' +
140
- 'react=' + encodeURIComponent(props.react) +
141
- '&' +
142
- 'test=' + encodeURIComponent(props.test);
143
- },
144
-
145
- _renderState: function(props) {
146
- return {
147
- testRunnerURL: this._getTestRunnerURL(props)
148
- };
149
- },
150
-
151
- componentDidMount: function() {
152
- var node = this.refs.iframe.getDOMNode();
153
- // node.onload = this._handleFrameLoad;
154
- // node.onerror = this._handleFrameError;
155
- if (window.addEventListener) {
156
- window.addEventListener('message', this._handleMessage, false);
157
- } else if (window.attachEvent) {
158
- window.attachEvent('onmessage', this._handleMessage);
159
- } else {
160
- throw Error('cannot attach onmessage listener');
161
- }
162
- this.setState(this._renderState(this.props));
163
- },
164
-
165
- componentWillUnmount: function() {
166
- if (window.removeEventListener) {
167
- window.removeEventListener('message', this._handleMessage);
168
- } else if (window.detachEvent) {
169
- window.detachEvent('onmessage', this._handleMessage);
170
- } else {
171
- throw Error('cannot detach onmessage listener');
172
- }
173
- this.refs.iframe.getDOMNode().src = '';
174
- },
175
-
176
- componentWillReceiveProps: function(nextProps) {
177
- this.setState(this._renderState(nextProps));
178
- },
179
-
180
- shouldComponentUpdate: function(nextProps, nextState) {
181
- return nextState.testRunnerURL !== this.state.testRunnerURL;
182
- },
183
-
184
- render: function() {
185
- return (
186
- React.DOM.iframe({
187
- ref: 'iframe',
188
- name: 'BrowserPerfRunnerContextFrame',
189
- style: this.style,
190
- src: this.state.testRunnerURL
191
- })
192
- );
193
- },
194
-
195
- style: {
196
- position: 'absolute',
197
- right: '100%',
198
- bottom: '100%'
199
- }
200
-
201
-});
perf/lib/perf-test-runner.browser.js
deleted
-224
@@ -1,224 +0,0 @@
1
-if (typeof console === 'undefined') {
2
- console = {
3
- log: function() {},
4
- warn: function() {},
5
- error: function() {},
6
- debug: function() {}
7
- };
8
-}
9
-
10
-var perfRunner;
11
-if (typeof exports === 'object') {
12
- perfRunner = exports;
13
-} else {
14
- perfRunner = {};
15
-}
16
-
17
-perfRunner.assert = function(test, message) {
18
- if (typeof test === 'function') {
19
- test = test();
20
- }
21
- if (test) {
22
- return;
23
- }
24
- throw Error(message);
25
-};
26
-
27
-perfRunner.WriteScript = function(props) {
28
- var type = '';
29
- if (props.jsx) {
30
- type = ' type=\'text/jsx\'';
31
- }
32
- var src = props.src;
33
- if (!props.cache) {
34
- src += src.indexOf('?') === -1 ? '?_' : '&_';
35
- src += perfRunner.WriteScript.cacheBust;
36
- }
37
- document.write('<script' + type + ' src=\'' + src + '\'><\/script>');
38
-};
39
-perfRunner.WriteScript.cacheBust = (+new Date()).toString(36);
40
-
41
-perfRunner.WriteReactLibScript = function(params) {
42
- var src;
43
- var minSuffix;
44
- if (params.debug) {
45
- minSuffix = '';
46
- } else {
47
- minSuffix = '.min';
48
- }
49
-
50
- if (params.version && typeof params.version !== 'string') {
51
- throw TypeError('Expected \'version\' to be a string');
52
- }
53
-
54
- if (params.version === 'edge' || !params.version) {
55
- console.log('React edge (local)');
56
- perfRunner.WriteScript({src:'../build/react' + minSuffix + '.js'});
57
- perfRunner.WriteScript({src:'../build/JSXTransformer.js'});
58
- } else if (params.version === 'previous') {
59
- console.log('React previous (local)');
60
- perfRunner.WriteScript({cache:true, src:'../build/react-previous' + minSuffix + '.js'});
61
- perfRunner.WriteScript({cache:true, src:'../build/JSXTransformer-previous.js'});
62
- } else if (params.version.indexOf('builds/') === 0) {
63
- perfRunner.WriteScript({cache:true, src:'http://react.zpao.com/' + params.version + '/react' + minSuffix + '.js'});
64
- perfRunner.WriteScript({cache:true, src:'http://react.zpao.com/' + params.version + '/JSXTransformer.js'});
65
- } else {
66
- console.log('React ' + params.version);
67
- perfRunner.WriteScript({cache:true, src:'http://fb.me/react-' + params.version + minSuffix + '.js'});
68
- perfRunner.WriteScript({cache:true, src:'http://fb.me/JSXTransformer-' + params.version + '.js'});
69
- }
70
- if (params.debug) {
71
- console.warn('Loading the unminified build of React, performance may suffer.');
72
- console.warn('Load \'' + location.href.replace(/\bdebug=\w+&?|&\bdebug=\w+/ig, '') + '\' for better perf.');
73
- } else {
74
- console.warn('Loading the minified build of React, debugging may be harder.');
75
- console.warn('Load \'' + location.href.replace(/\bdebug=\w+&?|&\bdebug=\w+/ig, '') + '&debug=1' + '\' for easier debugging.');
76
- }
77
-};
78
-
79
-perfRunner.WriteTestScript = function(params) {
80
- if (Array.isArray(params.test)) {
81
- return params.test
82
- .map(function(test) {
83
- return {
84
- test:test
85
- };
86
- })
87
- .map(perfRunner.WriteTestScript);
88
- }
89
- perfRunner.assert(params.test.indexOf('..') === -1, 'no relative paths allowed');
90
- return perfRunner.WriteScript({jsx:true, src: './tests/' + params.test});
91
-};
92
-
93
-perfRunner.getQueryParamArray = function(key) {
94
- var values;
95
- var queryString = location.search.substr(1);
96
- var _key = encodeURIComponent(key) + '=';
97
-
98
- if (queryString.indexOf(_key) > -1) {
99
- values = queryString
100
- .split(_key)
101
- .slice(1)
102
- .map(function(part) {
103
- return part.split('&')[0];
104
- })
105
- .map(decodeURIComponent)
106
- .map(function(string) {
107
- try {
108
- return JSON.parse(string);
109
- } catch(e) {}
110
- return string;
111
- });
112
- }
113
-
114
- perfRunner.assert(values && values.length && values[0], 'expected ' + key + ' query param');
115
- return values;
116
-};
117
-
118
-perfRunner.getQueryParamArrayOrDefault = function(key, defaultValue) {
119
- try {
120
- return perfRunner.getQueryParamArray(key);
121
- } catch (e) {}
122
- return defaultValue;
123
-};
124
-
125
-perfRunner.Polyfill = function() {
126
- if (typeof Function.prototype.bind !== 'undefined') {
127
- return;
128
- }
129
- perfRunner.WriteScript({src:'/node_modules/es5-shim/es5-shim.js', cache:true});
130
- perfRunner.WriteScript({src:'/node_modules/es5-shim/es5-sham.js', cache:true});
131
-};
132
-
133
-perfRunner.BenchmarkResults = function(props) {
134
- return perfRunner.roundNumberWithPrecision(props.stats.mean * 1000) + 'ms/op';
135
-};
136
-
137
-perfRunner.roundNumberWithPrecision = function(number, precision) {
138
- if (!precision) {
139
- precision = 1000;
140
- }
141
- return Math.round(number * precision) / precision;
142
-};
143
-
144
-perfRunner.quickBench = function(benchmarkOptions, onComplete, onBeforeStart) {
145
- var bench = new Benchmark(benchmarkOptions);
146
- if (onBeforeStart) {
147
- onBeforeStart(null, bench);
148
- }
149
-
150
- bench.on('error', function(event) {
151
- console.error(event.message);
152
- console.log(event.target.compiled.toString());
153
- onComplete(Error(event.error));
154
- });
155
-
156
- bench.on('start', function() {
157
- console.log('starting', bench.name);
158
- });
159
-
160
- bench.on('cycle', function() {
161
- var benchmark = this,
162
- size = benchmark.stats.size;
163
-
164
- if (!benchmark.aborted) {
165
- console.warn(benchmark.name + ' × ' + benchmark.count +
166
- ' (' + benchmark.stats.sample.length + ' samples)' +
167
- ' (' + Math.round(1 / benchmark.stats.mean) + ' ops/sec' + ')' +
168
- ' (' + (benchmark.stats.mean * 1000) + ' ms/op' + ')' +
169
- ' (±' + benchmark.stats.rme.toFixed(2) + '%)' +
170
- ' with ' + React.version
171
- );
172
- }
173
- });
174
-
175
- bench.on('complete', function() {
176
- var results = {
177
- platform: Benchmark.platform.description,
178
- react: React.version,
179
- name: bench.name
180
- // times: bench.times,
181
- // stats: bench.stats
182
- };
183
-
184
- results['s/op'] = bench.stats.mean;
185
- results['ms/op'] = results['s/op'] * 1000;
186
- results['op/s'] = 1 / results['s/op'];
187
- results['% frame 60'] = results['ms/op'] / (1000 / 60) * 100;
188
-
189
- console.log(results);
190
- onComplete(null, results);
191
- });
192
-
193
- bench.run();
194
-};
195
-
196
-perfRunner.singleTest = function(benchmarkOptions, onComplete) {
197
- var bench = Benchmark(exports);
198
- bench.on('complete', function() {
199
- var results = {
200
- platform: Benchmark.platform.description,
201
- react: React.version,
202
- name: bench.name,
203
- stats: bench.stats
204
- };
205
- onComplete(results);
206
- });
207
- bench.run();
208
-};
209
-
210
-perfRunner.ViewObject = function(props) {
211
- var value = props.value;
212
- delete props.value;
213
-
214
- if (typeof value !== 'object') {
215
- return React.DOM.span(props, [JSON.stringify(value), ' ', typeof value]);
216
- }
217
-
218
- return React.DOM.table(props, Object.keys(value).map(function(key) {
219
- return React.DOM.tr(null,
220
- React.DOM.th(null, key),
221
- React.DOM.td(null, perfRunner.ViewObject({key:key, value:value[key]}))
222
- );
223
- }));
224
-};
perf/lib/todolist.browser.js
deleted
-145
@@ -1,145 +0,0 @@
1
-todolist = {};
2
-
3
-todolist.ID = Date.now();
4
-
5
-todolist.now = window.performance && window.performance.now && window.performance.now.bind(window.performance) || Date.now.bind(Date);
6
-
7
-todolist.App = React.createClass({
8
- propTypes: {
9
- fakeDataCount: React.PropTypes.number
10
- },
11
-
12
- getInitialState: function() {
13
- var todos;
14
- if (this.props.fakeDataCount) {
15
- todos = Array(this.props.fakeDataCount + 1).join(',').split(',').map(function(ignore, index) {
16
- return {
17
- id: index,
18
- title: 'Title ' + index + ' ' + Math.random().toString(36).substring(2, 16),
19
- completed: !!(index % 2)
20
- };
21
- });
22
- }
23
- return {
24
- timerStart: todolist.now(),
25
- timerEnd: null,
26
- timerEvent: 'getInitialState',
27
- todos: todos || this.props.initialData || []
28
- };
29
- },
30
- componentWillUpdate: function(props, state) {
31
- state.todos = state.todos.filter(function(todo) {
32
- return !todo.deleted;
33
- });
34
- },
35
- addItem: function(title, callback) {
36
- if (title == null || title === '') {
37
- var error = Error('invalid title');
38
- if (!callback) {
39
- throw error;
40
- }
41
- return callback(error);
42
- }
43
- var todos = this.state.todos.slice();
44
- var todo = {
45
- id: ++todolist.ID,
46
- title: title,
47
- completed: false
48
- };
49
- todos.push(todo);
50
- if (callback) {
51
- callback = callback.bind(this, todo);
52
- }
53
- this.setState({timerEvent:'addItem', timerStart:todolist.now(), timerEnd:null, todos:todos}, callback);
54
- return todo;
55
- },
56
- deleteItemById: function(id, callback) {
57
- var todo = this._getById(id);
58
- if (!todo) {
59
- return callback && callback(Error('todo with id ' + id + ' not found'));
60
- }
61
- todo.deleted = true;
62
- this.setState({timerEvent:'deleteItemById', timerStart:todolist.now(), timerEnd:null, todos:this.state.todos}, callback);
63
- },
64
- setItemCompleted: function(id, completed, callback) {
65
- var todo = this._getById(id);
66
- if (!todo) {
67
- return callback && callback(Error('todo with id ' + id + ' not found'));
68
- }
69
- todo.completed = completed;
70
- this.setState({timerEvent:'setItemCompleted', timerStart:todolist.now(), timerEnd:null, todos:this.state.todos}, callback);
71
- },
72
- _getById: function(id) {
73
- id = +id;
74
- var todos = this.state.todos;
75
- for (var index = todos.length; --index >= 0;) {
76
- if (todos[index].id === id) {
77
- return todos[index];
78
- }
79
- }
80
- return null;
81
- },
82
- _handleItemCompletedCheckboxChange: function(event) {
83
- var node = event.target;
84
- this.setItemCompleted(node.value, node.checked);
85
- },
86
- _handleItemDeletedButton: function(event) {
87
- var node = event.target;
88
- this.deleteItemById(node.value);
89
- },
90
- _renderTodoItem: function(todo, index) {
91
- return (
92
- React.DOM.li({key:todo.id},
93
- React.DOM.button({value:todo.id, onClick:this._handleItemDeletedButton}, 'x'),
94
- React.DOM.input({type:'checkbox', value:todo.id, checked:todo.completed, onChange:this._handleItemCompletedCheckboxChange}),
95
- ' ',
96
- React.DOM.span({style:{'text-decoration':todo.completed ? 'line-through' : ''}}, todo.title)
97
- )
98
- );
99
- },
100
- render: function() {
101
- if (!this.state.timerEnd) {
102
- this.state.timerEnd = todolist.now();
103
- }
104
- if (this.props.onRender) {
105
- this.props.onRender();
106
- }
107
- return (
108
- React.DOM.div(null,
109
- React.DOM.h1(null, 'TODO'),
110
- React.DOM.h3(null, this.state.timerEvent, ' ', this.state.timerEnd - this.state.timerStart, 'ms'),
111
- todolist.NewItemForm({onEnter:this.addItem, autoFocus:true}),
112
- React.DOM.ol(null, this.state.todos.map(this._renderTodoItem))
113
- )
114
- );
115
- },
116
- componentDidMount: function(rootNode) {
117
- if (this.props.onDidMount) {
118
- this.props.onDidMount(rootNode);
119
- }
120
- }
121
-});
122
-
123
-todolist.NewItemForm = React.createClass({
124
- _handleNewItemKeyDown: function(event) {
125
- if (event.which !== 13/*enter key*/) {
126
- return;
127
- }
128
- var node = this.refs.text.getDOMNode();
129
- var value = node.value;
130
- node.value = '';
131
- this.props.onEnter(value);
132
- return false;
133
- },
134
- render: function() {
135
- var props = {};
136
- for (var key in this.props) {
137
- if (key !== 'onEnter') {
138
- props[key] = this.props[key];
139
- }
140
- }
141
- props.ref = 'text';
142
- props.onKeyDown = this.props.onEnter && this._handleNewItemKeyDown;
143
- return React.DOM.input(props);
144
- }
145
-});
perf/lib/todolist.html
deleted
-16
@@ -1,16 +0,0 @@
1
-<!doctype html>
2
-<meta charset=utf-8>
3
-<title>todolist</title>
4
-
5
-<script src="perf-test-runner.browser.js"></script>
6
-<script> perfRunner.Polyfill(); </script>
7
-<script src="../../build/react.min.js"></script>
8
-<script src="todolist.browser.js"></script>
9
-
10
-<script>
11
-function main(){
12
- var app = todolist.App({ fakeDataCount:333 });
13
- React.render(app, document.body);
14
-}
15
-window.onload = main;
16
-</script>
perf/runner.html
deleted
-59
@@ -1,59 +0,0 @@
1
-<!doctype html>
2
-<meta charset=utf-8>
3
-<title>Perf Test Runner</title>
4
-
5
-<script src="../node_modules/platform/platform.js"></script>
6
-<script src="../node_modules/benchmark/benchmark.js"></script>
7
-<script src="lib/perf-test-runner.browser.js"></script>
8
-
9
-<script> perfRunner.Polyfill(); </script>
10
-
11
-<script>
12
-
13
-perfRunner.WriteReactLibScript({
14
- version: perfRunner.getQueryParamArrayOrDefault('react', [null])[0],
15
- debug: perfRunner.getQueryParamArrayOrDefault('debug', [false])[0]
16
-});
17
-
18
-perfRunner.WriteScript({src:"lib/todolist.browser.js"});
19
-
20
-perfRunner.WriteTestScript({ test:perfRunner.getQueryParamArray('test') });
21
-
22
-</script>
23
-
24
-<script>
25
-
26
-function checkIfReady(){
27
- if (!window.exports) return setTimeout(checkIfReady, 50);
28
-
29
- console.timeStamp && console.timeStamp(perfRunner.getQueryParamArray('test'));
30
- if (typeof gc == 'function') gc();
31
- window.parent.postMessage(perfRunner.getQueryParamArrayOrDefault('callback', ['Ready!'])[0], '*');
32
-}
33
-checkIfReady();
34
-
35
-function main(callback){
36
- perfRunner.singleTest(exports, function(results){
37
- document.getElementById('results').textContent = JSON.stringify(results, null, 2);
38
- callback();
39
- });
40
-}
41
-
42
-function runOnce(callback){
43
- setTimeout(function(){
44
- exports.fn({resolve: function(){
45
- setTimeout(callback, 0);
46
- }});
47
- },0);
48
-}
49
-
50
-</script>
51
-<button autofocus onclick="if (disabled) return false; main(function(){ disabled=false; textContent='Run again!'; }); textContent='Running!'; disabled=true">Run!</button>
52
-<div>
53
- <button onclick="exports.setup();">Setup!</button>
54
- <button onclick="if (disabled) return false; runOnce(function(){ disabled=false; textContent='Run again!'; }); textContent='Running!'; disabled=true">Run once!</button>
55
- <button onclick="exports.teardown();">Teardown!</button>
56
-</div>
57
-
58
-<pre id=results style="font-size:9px"></pre>
59
-
perf/tests/basic-div.js
deleted
-11
@@ -1,11 +0,0 @@
1
-if (typeof exports === 'undefined') {
2
- exports = {};
3
-}
4
-
5
-/*http://benchmarkjs.com/docs#options*/
6
-
7
-exports.name = 'React.DOM.div, no props';
8
-
9
-exports.fn = function() {
10
- React.DOM.div(null, 'lol, perf testing ', this.count);
11
-};
perf/tests/basic-unmount.js
deleted
-21
@@ -1,21 +0,0 @@
1
-if (typeof exports === 'undefined') {
2
- exports = {};
3
-}
4
-
5
-/*http://benchmarkjs.com/docs#options*/
6
-
7
-exports.name = 'unmountComponentAtNode';
8
-
9
-exports.setup = function() {
10
- _rootNode = document.createElement('div');
11
- document.body.appendChild(_rootNode);
12
- var _firstChild = React.DOM.div(null, 'lol, perf testing ', this.count);
13
- React.render(_firstChild, _rootNode);
14
-};
15
-exports.fn = function() {
16
- if (React.unmountAndReleaseReactRootNode) {
17
- React.unmountAndReleaseReactRootNode(_rootNode);
18
- } else {
19
- React.unmountComponentAtNode(_rootNode);
20
- }
21
-};
perf/tests/propTypes.js
deleted
-91
@@ -1,91 +0,0 @@
1
-if (typeof exports === 'undefined') {
2
- exports = {};
3
-}
4
-
5
-/*http://benchmarkjs.com/docs#options*/
6
-
7
-exports.name = 'propTypes';
8
-
9
-var Thing = function() {};
10
-var List;
11
-var ListItem;
12
-var MyReactComponent;
13
-var _rootNode;
14
-
15
-function func() {
16
- return 'this is a function';
17
-}
18
-
19
-exports.setup = function() {
20
- List = React.createClass({
21
- propTypes: {
22
- array: React.PropTypes.array,
23
- bool: React.PropTypes.bool.isRequired,
24
- number: React.PropTypes.number,
25
- string: React.PropTypes.string.isRequired,
26
- func: React.PropTypes.func.isRequired,
27
- node: React.PropTypes.node.isRequired,
28
- instanceOf: React.PropTypes.instanceOf(Thing).isRequired
29
- },
30
- render: function() {
31
- return React.DOM.ul(null, this.props.children);
32
- }
33
- });
34
-
35
- ListItem = React.createClass({
36
- propTypes: {
37
- array: React.PropTypes.array,
38
- bool: React.PropTypes.bool.isRequired,
39
- number: React.PropTypes.number,
40
- string: React.PropTypes.string.isRequired,
41
- func: React.PropTypes.func.isRequired,
42
- node: React.PropTypes.node.isRequired,
43
- node2: React.PropTypes.node.isRequired,
44
- instanceOf: React.PropTypes.instanceOf(Thing).isRequired,
45
- element: React.PropTypes.element.isRequired
46
- },
47
- render: function() {
48
- return React.DOM.li(null,
49
- this.props.number + this.props.string + this.props.node
50
- );
51
- }
52
- });
53
-
54
- MyReactComponent = React.createClass({
55
- render: function() {
56
- return React.DOM.span();
57
- }
58
- });
59
-
60
- _rootNode = document.createElement('div');
61
- document.body.appendChild(_rootNode);
62
-};
63
-exports.fn = function() {
64
- var items = [];
65
- for (var i = 0; i < 1000; i++) {
66
- items.push(ListItem({
67
- array: [11, 12, 13, 14, 15, 16, 17, 18, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
68
- bool: false,
69
- number: Math.random(),
70
- string: 'banana banana banana',
71
- func: func,
72
- node: 'renderable string',
73
- node2: [MyReactComponent(), 'a string'],
74
- instanceOf: new Thing(),
75
- element: MyReactComponent()
76
- }));
77
- }
78
-
79
- React.render(List({
80
- array: [11, 12, 13, 14, 15, 16, 17, 18, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
81
- bool: false,
82
- number: Math.random(),
83
- string: 'banana banana banana',
84
- func: func,
85
- renderable: 'renderable string',
86
- instanceOf: new Thing()
87
- }, items), _rootNode);
88
-};
89
-exports.teardown = function() {
90
- React.unmountComponentAtNode(_rootNode);
91
-};
perf/tests/renderComponent-basic.js
deleted
-22
@@ -1,22 +0,0 @@
1
-if (typeof exports === 'undefined') {
2
- exports = {};
3
-}
4
-
5
-/*http://benchmarkjs.com/docs#options*/
6
-
7
-exports.name = 'React.render single div';
8
-
9
-exports.setup = function() {
10
- _rootNode = document.createElement('div');
11
- document.body.appendChild(_rootNode);
12
-};
13
-exports.fn = function() {
14
- React.render(React.DOM.div(null, 'lol, perf testing ', this.count), _rootNode);
15
-};
16
-exports.teardown = function() {
17
- if (React.unmountAndReleaseReactRootNode) {
18
- React.unmountAndReleaseReactRootNode(_rootNode);
19
- } else {
20
- React.unmountComponentAtNode(_rootNode);
21
- }
22
-};
perf/tests/sanity.js
deleted
-17
@@ -1,17 +0,0 @@
1
-if (typeof exports === 'undefined') {
2
- exports = {};
3
-}
4
-
5
-/*http://benchmarkjs.com/docs#options*/
6
-
7
-exports.name = 'Trivial benchmark to verify that everything works';
8
-
9
-exports.setup = function() {
10
- var foo;
11
-};
12
-exports.fn = function() {
13
- foo = Array(999).join('Howdy!\n');
14
-};
15
-exports.teardown = function() {
16
- foo = null;
17
-};
perf/tests/setState-callback-5.js
deleted
-45
@@ -1,45 +0,0 @@
1
-if (typeof exports === 'undefined') {
2
- exports = {};
3
-}
4
-
5
-/*http://benchmarkjs.com/docs#options*/
6
-
7
-exports.name = 'From setState to callback (x5)';
8
-
9
-exports.defer = true;
10
-
11
-exports.setup = function() {
12
- _rootNode = document.createElement('div');
13
- document.body.appendChild(_rootNode);
14
- setState = null;
15
-
16
- var AwesomeComponent = React.createClass({
17
- getInitialState: function() {
18
- return {random:null};
19
- },
20
- render: function() {
21
- if (!setState) {
22
- setState = this.setState.bind(this);
23
- }
24
- return React.DOM.div(null, this.state.random);
25
- }
26
- });
27
-
28
- React.render(AwesomeComponent(null), _rootNode);
29
-};
30
-exports.fn = function(deferred) {
31
- setState({random: Date.now() + Math.random()}, function() {
32
- setState({random: Date.now() + Math.random()}, function() {
33
- setState({random: Date.now() + Math.random()}, function() {
34
- setState({random: Date.now() + Math.random()}, function() {
35
- setState({random: Date.now() + Math.random()}, function() {
36
- deferred.resolve();
37
- });
38
- });
39
- });
40
- });
41
- });
42
-};
43
-exports.teardown = function() {
44
- React.unmountComponentAtNode(_rootNode);
45
-};
perf/tests/setState-callback.js
deleted
-37
@@ -1,37 +0,0 @@
1
-if (typeof exports === 'undefined') {
2
- exports = {};
3
-}
4
-
5
-/*http://benchmarkjs.com/docs#options*/
6
-
7
-exports.name = 'From setState to callback';
8
-
9
-exports.defer = true;
10
-
11
-exports.setup = function() {
12
- _rootNode = document.createElement('div');
13
- document.body.appendChild(_rootNode);
14
- setState = null;
15
-
16
- var AwesomeComponent = React.createClass({
17
- getInitialState: function() {
18
- return {random:null};
19
- },
20
- render: function() {
21
- if (!setState) {
22
- setState = this.setState.bind(this);
23
- }
24
- return React.DOM.div(null, this.state.random);
25
- }
26
- });
27
-
28
- React.render(AwesomeComponent(null), _rootNode);
29
-};
30
-exports.fn = function(deferred) {
31
- setState({random: Date.now() + Math.random()}, function() {
32
- deferred.resolve();
33
- });
34
-};
35
-exports.teardown = function() {
36
- React.unmountComponentAtNode(_rootNode);
37
-};
perf/tests/shouldComponentUpdate.js
deleted
-27
@@ -1,27 +0,0 @@
1
-if (typeof exports === 'undefined') {
2
- exports = {};
3
-}
4
-
5
-/*http://benchmarkjs.com/docs#options*/
6
-
7
-exports.name = 'shouldComponentUpdate';
8
-
9
-exports.setup = function() {
10
- var AwesomeComponent = React.createClass({
11
- shouldComponentUpdate: function() {
12
- return false;
13
- },
14
- render: function() {
15
- return React.DOM.div({});
16
- }
17
- });
18
-
19
- var _rootNode = document.createElement('div');
20
- document.body.appendChild(_rootNode);
21
-};
22
-exports.fn = function() {
23
- React.render(AwesomeComponent(null), _rootNode);
24
-};
25
-exports.teardown = function() {
26
- React.unmountComponentAtNode(_rootNode);
27
-};
perf/tests/todolist-add.js
deleted
-31
@@ -1,31 +0,0 @@
1
-if (typeof exports === 'undefined') {
2
- exports = {};
3
-}
4
-
5
-/*http://benchmarkjs.com/docs#options*/
6
-
7
-exports.name = 'todolist from addItem to callback';
8
-
9
-exports.defer = true;
10
-
11
-exports.setup = function() {
12
- _rootNode = document.createElement('div');
13
- document.body.appendChild(_rootNode);
14
- var appDescriptor = todolist.App({fakeDataCount: 333});
15
- _app = React.render(appDescriptor, _rootNode);
16
-};
17
-exports.fn = function(deferred) {
18
- var liCount = document.getElementsByTagName('li').length;
19
- _app.addItem(Math.random(), function() {
20
- if (document.getElementsByTagName('li').length <= liCount) {
21
- throw Error('expected a list item to be added to the dom');
22
- }
23
- deferred.resolve();
24
- });
25
-};
26
-exports.teardown = function() {
27
- React.unmountComponentAtNode(_rootNode);
28
- _rootNode.parentNode.removeChild(_rootNode);
29
- _rootNode = null;
30
- _app = null;
31
-};
perf/tests/todolist-do-stuff.js
deleted
-58
@@ -1,58 +0,0 @@
1
-if (typeof exports === 'undefined') {
2
- exports = {};
3
-}
4
-
5
-/*http://benchmarkjs.com/docs#options*/
6
-
7
-_timesToRun = 2;
8
-
9
-exports.name = 'todolist add, complete, remove (x' + _timesToRun + ')';
10
-
11
-exports.defer = true;
12
-
13
-exports.setup = function() {
14
- _rootNode = document.createElement('div');
15
- document.body.appendChild(_rootNode);
16
- var appDescriptor = todolist.App({fakeDataCount: 333});
17
- _app = React.render(appDescriptor, _rootNode);
18
-};
19
-
20
-exports.fn = function(deferred) {
21
- var originalLiCount = document.getElementsByTagName('li').length;
22
-
23
- var todos = [];
24
- var times = _timesToRun;
25
- while (times-- >= 0) {
26
- todos.push(_app.addItem(times + 1));
27
- }
28
-
29
- todos.forEach(function(todo) {
30
- _app.setItemCompleted(todo.id);
31
- });
32
-
33
- todos.forEach(function(todo) {
34
- _app.deleteItemById(todo.id);
35
- });
36
-
37
- todos = null;
38
-
39
- _app.addItem(Math.random(), function(todo) {
40
- if (document.getElementsByTagName('li').length <= originalLiCount) {
41
- throw Error('expected a list item to be added to the dom');
42
- }
43
-
44
- _app.deleteItemById(todo.id, function() {
45
- if (document.getElementsByTagName('li').length !== originalLiCount) {
46
- throw Error('expected everything to be done by now');
47
- }
48
- deferred.resolve();
49
- });
50
- });
51
-};
52
-
53
-exports.teardown = function() {
54
- React.unmountComponentAtNode(_rootNode);
55
- _rootNode.parentNode.removeChild(_rootNode);
56
- _rootNode = null;
57
- _app = null;
58
-};
perf/tests/todolist-edit.js
deleted
-34
@@ -1,34 +0,0 @@
1
-if (typeof exports === 'undefined') {
2
- exports = {};
3
-}
4
-
5
-/*http://benchmarkjs.com/docs#options*/
6
-
7
-exports.name = 'todolist setItemCompleted';
8
-
9
-exports.defer = true;
10
-
11
-exports.setup = function() {
12
- _rootNode = document.createElement('div');
13
- document.body.appendChild(_rootNode);
14
- var appDescriptor = todolist.App({fakeDataCount: 333});
15
- _app = React.render(appDescriptor, _rootNode);
16
- _todo1 = _app.addItem('Howdy 1!');
17
- _todo2 = _app.addItem('Howdy 2!');
18
- _todo3 = _app.addItem('Howdy 3!');
19
-};
20
-
21
-exports.fn = function(deferred) {
22
- _app.setItemCompleted(_todo1.id, !_todo1.completed);
23
- _app.setItemCompleted(_todo2.id, !_todo2.completed);
24
- _app.setItemCompleted(_todo3.id, !_todo3.completed, function() {
25
- deferred.resolve();
26
- });
27
-};
28
-
29
-exports.teardown = function() {
30
- React.unmountComponentAtNode(_rootNode);
31
- _rootNode.parentNode.removeChild(_rootNode);
32
- _rootNode = null;
33
- _app = null;
34
-};
perf/tests/todolist-mount.js
deleted
-30
@@ -1,30 +0,0 @@
1
-if (typeof exports === 'undefined') {
2
- exports = {};
3
-}
4
-
5
-/*http://benchmarkjs.com/docs#options*/
6
-
7
-exports.name =
8
- 'todolist from renderComponent to renderComponent callback (333 rows)';
9
-
10
-exports.defer = true;
11
-
12
-exports.setup = function() {
13
- if (typeof _rootNode !== 'undefined') {
14
- throw Error('should teardown before running setup again');
15
- }
16
- _rootNode = document.createElement('div');
17
- document.body.appendChild(_rootNode);
18
-};
19
-
20
-exports.fn = function(deferred) {
21
- React.render(todolist.App({fakeDataCount: 333}), _rootNode, function() {
22
- deferred.resolve();
23
- });
24
-};
25
-
26
-exports.teardown = function() {
27
- React.unmountComponentAtNode(_rootNode);
28
- _rootNode.parentNode.removeChild(_rootNode);
29
- _rootNode = undefined;
30
-};