Skip to content
This repository has been archived by the owner on Aug 12, 2019. It is now read-only.

Commit

Permalink
Run benchmark tests in selenium
Browse files Browse the repository at this point in the history
  • Loading branch information
PaulBGD committed Apr 20, 2017
1 parent 73c0c9c commit aba0dab
Show file tree
Hide file tree
Showing 7 changed files with 557 additions and 122 deletions.
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,10 @@
"uglify-js": "^2.8.12"
},
"dependencies": {
"chalk": "^1.1.3",
"chroma-js": "^1.2.2",
"express": "^4.15.2"
"express": "^4.15.2",
"minimist": "^1.2.0",
"selenium-webdriver": "^3.3.0"
}
}
116 changes: 116 additions & 0 deletions scripts/build-tools.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
const path = require( 'path' );
const sander = require( 'sander' );
const { rollup } = require( 'rollup' );
const buble = require( 'rollup-plugin-buble' );
const UglifyJS = require( 'uglify-js' );
const zlib = require( 'zlib' );
const relative = require( 'require-relative' );

const benchmarks = sander.readdirSync( 'benchmarks' ).filter( d => d[0] !== '.' );

module.exports.build = function ( version, dir, custom ) {
const svelte = relative( 'svelte', dir );

let promise = Promise.resolve();
benchmarks.forEach( benchmark => {
promise = promise.then(() => {
const dest = `public/benchmarks/${benchmark}/${version}`;

return ( custom ? Promise.resolve( false ) : sander.exists( dest ) ).then( exists => {
if ( exists ) return;

return rollup({
entry: `benchmarks/${benchmark}/Main.html`,
plugins: [
{
name: 'svelte',

transform ( code, id ) {
if ( !/\.html$/.test( id ) ) { return null; }

const name = path.basename( id ).replace( /\.html$/, '' );

return svelte.compile( code, {
name,
filename: id,
format: 'es',
shared: custom ? path.join( dir, 'shared.js' ) : relative.resolve( 'svelte/shared.js', dir ),

onerror ( err ) {
let message = ( err.loc ? `(${err.loc.line}:${err.loc.column}) ` : '' ) + err.message;
if ( err.frame ) message += `\n${err.frame}`;

const err2 = new Error( message );
err2.stack = err.stack;

throw err2;
}
});
}
},
buble()
]
}).then( bundle => {
return bundle.generate({
format: 'iife',
moduleName: 'Component'
}).code;
}, err => {
console.error( err.message );
return `window.error = ${JSON.stringify( err.message )};`;
})
.then( code => {
const minified = UglifyJS.minify( code, { fromString: true });
const zipped = zlib.gzipSync( minified.code );

return Promise.all([
sander.writeFile( `${dest}/component.js`, code ),
sander.writeFile( `${dest}/index.html`, `
<!doctype html>
<html>
<head>
<meta charset='utf-8'>
<meta name='viewport' content='width=device-width'>
<title>${benchmark}/${version}</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
}
</style>
</head>
<body>
<h1>${benchmark}/${version}</h1>
<button>run</button>
<main></main>
<script src='component.js'></script>
<script>
var component = new Component({
target: document.querySelector( 'main' )
});
var button = document.querySelector( 'button' );
if ( component.run ) {
button.addEventListener( 'click', function () {
component.run();
});
} else {
button.disabled = true;
}
</script>
</body>
</html>` ),
sander.writeFile( `${dest}/component.json`, JSON.stringify({
code,
size: zipped.length
}))
]);
});
});
});
});

return promise;
};
115 changes: 2 additions & 113 deletions scripts/build.js
Original file line number Diff line number Diff line change
@@ -1,119 +1,8 @@
const path = require( 'path' );
const sander = require( 'sander' );
const relative = require( 'require-relative' );
const { rollup } = require( 'rollup' );
const buble = require( 'rollup-plugin-buble' );
const UglifyJS = require( 'uglify-js' );
const zlib = require( 'zlib' );
const { build } = require('./build-tools');

const versions = require( '../versions.json' );
const benchmarks = sander.readdirSync( 'benchmarks' ).filter( d => d[0] !== '.' );

let promise = Promise.resolve();

versions.forEach( version => {
const dir = `versions/${version}`;
const svelte = relative( 'svelte', dir );

benchmarks.forEach( benchmark => {
promise = promise.then( () => {
const dest = `public/benchmarks/${benchmark}/${version}`;

return sander.exists( dest ).then( exists => {
if ( exists ) return;

console.log( `creating ${dest}` );

return rollup({
entry: `benchmarks/${benchmark}/Main.html`,
plugins: [
{
name: 'svelte',

transform ( code, id ) {
if ( !/\.html$/.test( id ) ) { return null; }

const name = path.basename( id ).replace( /\.html$/, '' );

return svelte.compile( code, {
name,
filename: id,
format: 'es',
shared: relative.resolve( 'svelte/shared.js', dir ),

onerror ( err ) {
let message = ( err.loc ? `(${err.loc.line}:${err.loc.column}) ` : '' ) + err.message;
if ( err.frame ) message += `\n${err.frame}`;

const err2 = new Error( message );
err2.stack = err.stack;

throw err2;
}
});
}
},
buble()
]
}).then( bundle => {
return bundle.generate({
format: 'iife',
moduleName: 'Component'
}).code;
}, err => {
console.error( err.message );
return `window.error = ${JSON.stringify( err.message )};`;
})
.then( code => {
const minified = UglifyJS.minify( code, { fromString: true });
const zipped = zlib.gzipSync( minified.code );

return Promise.all([
sander.writeFile( `${dest}/component.js`, code ),
sander.writeFile( `${dest}/index.html`, `
<!doctype html>
<html>
<head>
<meta charset='utf-8'>
<meta name='viewport' content='width=device-width'>
<title>${benchmark}/${version}</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
}
</style>
</head>
<body>
<h1>${benchmark}/${version}</h1>
<button>run</button>
<main></main>
<script src='component.js'></script>
<script>
var component = new Component({
target: document.querySelector( 'main' )
});
var button = document.querySelector( 'button' );
if ( component.run ) {
button.addEventListener( 'click', function () {
component.run();
});
} else {
button.disabled = true;
}
</script>
</body>
</html>` ),
sander.writeFile( `${dest}/component.json`, JSON.stringify({
code,
size: zipped.length
}))
]);
});
});
});
});
build( version, dir );
});
20 changes: 20 additions & 0 deletions selenium/measurements.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
module.exports = [
{
id: 'create:cold'
},
{
id: 'create:warm'
},
{
id: 'run:cold'
},
{
id: 'run:warm'
},
{
id: 'destroy:cold'
},
{
id: 'destroy:warm'
}
];
Loading

0 comments on commit aba0dab

Please sign in to comment.