From ed0a784d9ad35cc47ef61ffa2167a4c8e7fe3e6c Mon Sep 17 00:00:00 2001 From: Mike Gerwitz Date: Mon, 20 Jan 2014 02:18:55 -0500 Subject: [PATCH] Moved final test test-combine-pre-es5 into suite as CombinedPreES5Test Holy hell that was a long and tedious process. It's nice to finally have everything in the new test suite. Still plenty of work to be done with refactoring (both the library and test cases), though. --- test/CombinePreEs5Test.js | 90 ++++++++++++++++++++++++++++++++++++ test/test-combine-pre-es5.js | 74 ----------------------------- 2 files changed, 90 insertions(+), 74 deletions(-) create mode 100644 test/CombinePreEs5Test.js delete mode 100644 test/test-combine-pre-es5.js diff --git a/test/CombinePreEs5Test.js b/test/CombinePreEs5Test.js new file mode 100644 index 0000000..ab672e1 --- /dev/null +++ b/test/CombinePreEs5Test.js @@ -0,0 +1,90 @@ +/** + * Tests combined file, attempting to emulate a pre-ECMAScript5 environment. + * + * Copyright (C) 2011, 2013 Mike Gerwitz + * + * This file is part of GNU ease.js. + * + * ease.js is free software: you can redistribute it and/or modify + * it under the terms of the GNU 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Node.js is required to run this case. + */ + +require( 'common' ).testCase( +{ + caseSetUp: function() + { + this.fs = require( 'fs' ); + this.vm = require( 'vm' ); + }, + + + setUp: function() + { + // sandbox in which combined script will be run + this.sandbox = this.vm.createContext( { + // stub document.write() so we don't blow up + document: { write: function() {} }, + runTests: null, + } ); + }, + + + /** + * This will ensure fallbacks will work properly on older browsers, such + * as IE6--8. + * + * 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. + */ + 'All test cases run in a poorly-emulated pre-ES5 environment': + function() + { + var file = 'ease-full.js'; + + // attempt to read the combined file + try + { + var data = this.fs.readFileSync( + ( __dirname + '/../build/' + file ), + 'ascii' + ); + } + catch ( e ) + { + this.skip(); + } + + // 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) + this.vm.runInNewContext( data, this.sandbox ); + + // cross your fingers + this.sandbox.easejs.runTests(); + this.assertOk( true ); + }, +} ); diff --git a/test/test-combine-pre-es5.js b/test/test-combine-pre-es5.js deleted file mode 100644 index ea21066..0000000 --- a/test/test-combine-pre-es5.js +++ /dev/null @@ -1,74 +0,0 @@ -/** - * 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) 2011, 2013 Mike Gerwitz - * - * This file is part of GNU ease.js. - * - * ease.js is free software: you can redistribute it and/or modify - * it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -var common = require( './common' ), - assert = require( 'assert' ), - vm = require( 'vm' ), - Class = common.require( 'class' ), - - // sandbox in which combined script will be run - sandbox = vm.createContext( { - // stub document.write() so we don't blow up - document: { write: function() {} }, - runTests: null, - } ); - - -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) -vm.runInNewContext( data, sandbox ); - -// cross your fingers -sandbox.easejs.runTests(); -