diff --git a/test/Util/CopyTest.js b/test/Util/CopyTest.js
new file mode 100644
index 0000000..6c4454a
--- /dev/null
+++ b/test/Util/CopyTest.js
@@ -0,0 +1,163 @@
+/**
+ * Tests util.copy
+ *
+ * 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 .
+ */
+
+require( 'common' ).testCase(
+{
+ caseSetUp: function()
+ {
+ this.Sut = this.require( 'util' );
+
+ // are getters/setters supported?
+ this.hasGetSet = !( this.Sut.definePropertyFallback() );
+ },
+
+
+ /**
+ * Just a basic copy test: ensure the values are copied by reference.
+ */
+ 'Values are copied to destination object by reference': function()
+ {
+ var src = {
+ a: 'a',
+ b: 2,
+ c: true,
+ d: false,
+ e: undefined,
+ d: null,
+ f: function() {},
+ },
+ dest = {}
+ ;
+
+ this.Sut.copyTo( dest, src );
+
+ for ( var key in src )
+ {
+ this.assertStrictEqual( src[ key ], dest[ key ] );
+ }
+ },
+
+
+ /**
+ * Same concept as above, but with getters/setters
+ */
+ 'Getters and setters are copied to destination object by reference':
+ function()
+ {
+ // no use in performing the test if the engine doesn't support it
+ if ( !( this.hasGetSet ) )
+ {
+ this.skip();
+ }
+
+ var get = function() {},
+ set = function() {},
+ src = {},
+ dest = {},
+
+ result = null
+ ;
+
+ Object.defineProperty( src, 'foo', {
+ get: get,
+ set: set,
+
+ // so copy can actually see the property
+ enumerable: true,
+ } );
+
+ this.Sut.copyTo( dest, src );
+
+ // look up the getter/setter in dest
+ result = Object.getOwnPropertyDescriptor( dest, 'foo' );
+
+ // check getter
+ this.assertStrictEqual( result.get, get,
+ "Getter is copied by reference by default"
+ );
+
+ // check setter
+ this.assertDeepEqual( result.set, set,
+ "Setter is copied by reference by default"
+ );
+ },
+
+
+ /**
+ * For convenience (and a convention familar to uses of, notably, C
+ * APIs).
+ */
+ 'Copy operation returns destination object': function()
+ {
+ var dest = {};
+ this.assertStrictEqual( this.Sut.copyTo( dest, {} ), dest );
+ },
+
+
+ /**
+ * This is pretty self-explanatory.
+ */
+ 'Throws error if source or dest are not provided': function()
+ {
+ var copyTo = this.Sut.copyTo;
+
+ this.assertThrows( function()
+ {
+ copyTo();
+ }, TypeError, "Dest parameter is required" );
+
+ this.assertThrows( function()
+ {
+ copyTo( 'bla', {} );
+ }, TypeError, "Dest parameter is required to be an object" );
+
+ this.assertThrows( function()
+ {
+ copyTo( {} );
+ }, TypeError, "Src parameter is required" );
+
+ this.assertThrows( function()
+ {
+ copyTo( {}, 'foo' );
+ }, TypeError, "Src parameter is required to be an object" );
+ },
+
+
+ /**
+ * For convenience, let's support a deep copy as well, just in case they
+ * don't want to copy everything by reference.
+ */
+ 'Deep copies are supported': function()
+ {
+ var src = { foo: [ 1, 2, 3 ] },
+ dest = this.Sut.copyTo( {}, src, true );
+
+ // copied values should be equal by value...
+ this.assertDeepEqual( src.val, dest.val,
+ "Copied values should be comparitively equal with deep copy"
+ );
+
+ // ...but not by reference
+ this.assertNotStrictEqual( src.foo, dest.foo,
+ "Copied values should not be the same object after deep copy"
+ );
+ },
+} );
diff --git a/test/test-util-copy.js b/test/test-util-copy.js
deleted file mode 100644
index fac502a..0000000
--- a/test/test-util-copy.js
+++ /dev/null
@@ -1,162 +0,0 @@
-/**
- * Tests util.copy
- *
- * 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' ),
- util = common.require( 'util' ),
-
- copyTo = util.copyTo,
- get_set = !( util.definePropertyFallback() )
-;
-
-
-/**
- * Just a basic copy test. Ensure the values are copied by reference.
- */
-( function testCopiesReferencesToDestinationObject()
-{
- var src = {
- a: 'a',
- b: 2,
- c: true,
- d: false,
- e: undefined,
- d: null,
- f: function() {},
- },
- dest = {}
- ;
-
- copyTo( dest, src );
-
- for ( var key in src )
- {
- assert.deepEqual( src[ key ], dest[ key ],
- "Copies by reference by default"
- );
- }
-} )();
-
-
-/**
- * Same concept as above, but with getters/setters
- */
-( function testGettersAndSettersAreCopiedByReferenceToDestinationObject()
-{
- // no use in performing the test if the engine doesn't support it
- if ( !get_set )
- {
- return;
- }
-
- var get = function() {},
- set = function() {},
- src = {},
- dest = {},
-
- result = null
- ;
-
- Object.defineProperty( src, 'foo', {
- get: get,
- set: set,
-
- // so copy can actually see the property
- enumerable: true,
- } );
-
- copyTo( dest, src );
-
- // look up the getter/setter in dest
- result = Object.getOwnPropertyDescriptor( dest, 'foo' );
-
- // check getter
- assert.deepEqual( result.get, get,
- "Getter is copied by reference by default"
- );
-
- // check setter
- assert.deepEqual( result.set, set,
- "Setter is copied by reference by default"
- )
-} )();
-
-
-/**
- * For convenience
- */
-( function testOperationReturnsDest()
-{
- var dest = {};
-
- assert.deepEqual( copyTo( dest, {} ), dest,
- "Copy operation returns dest"
- );
-} )();
-
-
-/**
- * Just one of those tests you feel silly for making but is required
- */
-( function testThrowsErrorIfSourceOrDestAreNotGiven()
-{
- assert['throws']( function()
- {
- copyTo();
- }, TypeError, "Dest parameter is required" );
-
- assert['throws']( function()
- {
- copyTo( 'bla', {} );
- }, TypeError, "Dest parameter is required to be an object" );
-
- assert['throws']( function()
- {
- copyTo( {} );
- }, TypeError, "Src parameter is required" );
-
- assert['throws']( function()
- {
- copyTo( {}, 'foo' );
- }, TypeError, "Src parameter is required to be an object" );
-} )();
-
-
-/**
- * For convenience, let's support a deep copy as well, just in case they don't
- * want to copy everything by reference.
- */
-( function testCanDeepCopy()
-{
- var src = { foo: [ 1, 2, 3 ] },
- dest = copyTo( {}, src, true );
-
- // copied values should be equal by value...
- assert.deepEqual( src.val, dest.val,
- "Copied values should be comparitively equal with deep copy"
- );
-
- // ...but not by reference
- assert.ok( src.foo !== dest.foo,
- "Copied values should not be the same object after deep copy"
- );
-} )();
-