From 9a135a064c1477dd29a769522345ce6bddeb5ae7 Mon Sep 17 00:00:00 2001 From: Mike Gerwitz Date: Sun, 13 Mar 2011 22:08:08 -0400 Subject: [PATCH] Added pre-ES5 test to ensure we can catch fallback bugs quickly between browser tests (preferably, before even committing) --- test/test-combine-pre-es5.js | 77 ++++++++++++++++++++++++++++++++++++ tools/combine | 2 +- 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 test/test-combine-pre-es5.js diff --git a/test/test-combine-pre-es5.js b/test/test-combine-pre-es5.js new file mode 100644 index 0000000..cbca10e --- /dev/null +++ b/test/test-combine-pre-es5.js @@ -0,0 +1,77 @@ +/** + * Tests combined file, attempting to emulate a pre-ECMAScript5 environment. + * This will ensure fallbacks will work properly on older browsers, such as IE6. + * + * This is /not/ an alternative to running the test suite in the browser of your + * choice. It is intended to catch errors early, to ensure bugs are not + * committed between browser tests. + * + * Copyright (C) 2010 Mike Gerwitz + * + * This file is part of ease.js. + * + * ease.js is free software: you can redistribute it and/or modify it under the + * terms of the GNU Lesser General Public License as published by the Free + * Software Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * @author Mike Gerwitz + * @package test + */ + +var common = require( './common' ), + assert = require( 'assert' ), + Class = common.require( 'class' ), + Script = process.binding( 'evals' ).Script, + + // sandbox in which combined script will be run + sandbox = { + // stub document.write() so we don't blow up + document: { write: function() {} }, + }; + + +var file = 'ease-full.js'; + +// attempt to read the combined file +try +{ + var data = require( 'fs' ) + .readFileSync( ( __dirname + '/../build/' + file ), 'ascii' ); +} +catch ( e ) +{ + // if the file doesn't exit, just skip the test + console.log( + "Combined file not found. Test skipped. Please run `make combined`." + ); + process.exit( 0 ); +} + +// Let's take this bitch back in time (this is not a complete list, but +// satisfies what we need). +// +// It is important to note that we prepend this to the script that we'll be +// executing, because the script will be executed within a new scope. Any +// clobbering we do in our scope will not affect it, nor will any clobbering we +// do to it affect us. +data = "delete Object.defineProperty;" + + "delete Array.prototype.forEach;" + + data +; + +// run the script (if this fails to compile, the generated code is invalid) +var cmb_script = new Script( data ); +cmb_script.runInNewContext( sandbox ); + +// cross your fingers +sandbox.easejs.runTests(); + diff --git a/tools/combine b/tools/combine index db82305..79b49b8 100755 --- a/tools/combine +++ b/tools/combine @@ -103,7 +103,7 @@ if [ "$INC_TEST" ]; then \) \ -exec basename {} \; \ | sort \ - | grep -v 'test-\(combine\|index\).js' \ + | grep -v 'test-\(combine\(-pre-es5\)\?\|index\).js' \ ) # include test combine template