@samitouri / QOS-React-2 / commits / 7291942550

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 -};