diff --git a/test/CombineTest.js b/test/CombineTest.js
new file mode 100644
index 0000000..f43773d
--- /dev/null
+++ b/test/CombineTest.js
@@ -0,0 +1,115 @@
+/**
+ * Tests combined file (basic evaluation)
+ *
+ * Copyright (C) 2010, 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 .
+ *
+ * This test case requires node.js.
+ */
+
+require( 'common' ).testCase(
+{
+ caseSetUp: function()
+ {
+ // this is why we require node.js
+ this.fs = require( 'fs' );
+ this.vm = require( 'vm' );
+
+ this.files = [ 'ease.js', 'ease-full.js' ];
+ },
+
+
+ setUp: function()
+ {
+ // sandbox in which combined script will be run
+ this.sandbox = {
+ // stub document.write() so we don't blow up
+ document: { write: function() {} },
+ };
+ },
+
+
+ /**
+ * Each combined file contains all of the test cases. To ensure their
+ * integrity, run them all in each file.
+ */
+ '@each(files) Tests pass in combined file': function( file )
+ {
+ var _self = this;
+
+ // attempt to read the combined file
+ try
+ {
+ var data = this.fs.readFileSync(
+ ( __dirname + '/../build/' + file ),
+ 'ascii'
+ );
+ }
+ catch ( e )
+ {
+ // if the file doesn't exit, just skip the test
+ this.skip();
+ }
+
+ // run the script (if this fails to compile, the generated code is
+ // invalid)
+ this.vm.runInNewContext( data, this.sandbox );
+
+ this.assertEqual(
+ this.sandbox.require,
+ undefined,
+ "require() function is not in the global scope"
+ );
+
+ this.assertEqual(
+ this.sandbox.exports,
+ undefined,
+ "exports are not in the global scope"
+ );
+
+ this.assertOk(
+ ( this.sandbox.easejs !== undefined ),
+ "'easejs' namespace is defined within combined file"
+ );
+
+ [
+ 'Class',
+ 'AbstractClass',
+ 'FinalClass',
+ 'Interface',
+ 'version'
+ ] .forEach( function( item )
+ {
+ _self.assertOk(
+ _self.sandbox.easejs[ item ],
+ "Combined file exports exposes " + item
+ );
+ } );
+
+ // the full file has tests included to be run client-side
+ if ( file.match( /ease-full/ ) )
+ {
+ this.assertOk(
+ ( typeof this.sandbox.easejs.runTests === 'function' ),
+ "Full ease.js file contains test runner"
+ );
+
+ // cross your fingers
+ this.sandbox.easejs.runTests();
+ }
+ },
+} );
diff --git a/test/test-combine.js b/test/test-combine.js
deleted file mode 100644
index f585ab7..0000000
--- a/test/test-combine.js
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * Tests combined file (basic evaluation)
- *
- * Copyright (C) 2010, 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 = {
- // stub document.write() so we don't blow up
- document: { write: function() {} },
- };
-
-
-// test all combined files, including minified files
-var files = [ 'ease.js', 'ease-full.js'],
- file = '',
- i = files.length;
-
-while ( i-- )
-{
- file = files[ i ];
-
- // 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/minified file not found. Test skipped. Please run " +
- "`make min`."
- );
- process.exit( 0 );
- }
-
- // run the script (if this fails to compile, the generated code is invalid)
- vm.runInNewContext( data, sandbox );
-
- assert.equal(
- sandbox.require,
- undefined,
- "require() function is not in the global scope"
- );
-
- assert.equal(
- sandbox.exports,
- undefined,
- "exports are not in the global scope"
- );
-
- assert.ok(
- ( sandbox.easejs !== undefined ),
- "'easejs' namespace is defined within combined file"
- );
-
- [
- 'Class',
- 'AbstractClass',
- 'FinalClass',
- 'Interface',
- 'version'
- ] .forEach( function( item )
- {
- assert.ok(
- sandbox.easejs[ item ],
- "Combined file exports exposes " + item
- );
- } );
-
- // the full file has tests included to be run client-side
- if ( file.match( /ease-full/ ) )
- {
- assert.ok(
- ( typeof sandbox.easejs.runTests === 'function' ),
- "Full ease.js file contains test runner"
- );
-
- // cross your fingers
- sandbox.easejs.runTests();
- }
-}
-