From 6efaba7fc58f1f65eef3c00ef2084bbf3b0c0de3 Mon Sep 17 00:00:00 2001 From: Mike Gerwitz Date: Thu, 16 Dec 2010 23:15:42 -0500 Subject: [PATCH] Added util.clone(); does not yet support deep cloning --- lib/util.js | 35 ++++++++++++++++++++++ test/test-util-clone.js | 65 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100644 test/test-util-clone.js diff --git a/lib/util.js b/lib/util.js index 971c000..543ea3e 100644 --- a/lib/util.js +++ b/lib/util.js @@ -85,6 +85,41 @@ exports.defineSecureProp = function( obj, prop, value ) } +/** + * Clones an object + * + * @param {Object} data object to clone + * + * @return {Object} cloned object + */ +exports.clone = function( data ) +{ + if ( data instanceof Array ) + { + // return a copy of the array + return data.slice( 0 ); + } + else if ( data instanceof Object ) + { + var newobj = {}; + + // copy data to the new object + for ( prop in data ) + { + if ( data.hasOwnProperty( prop ) ) + { + newobj[ prop ] = data[ prop ]; + } + } + + return newobj; + } + + // primitive type; cloning unnecessary + return data; +}; + + /** * Parses object properties to determine how they should be interpreted in an * Object Oriented manner diff --git a/test/test-util-clone.js b/test/test-util-clone.js new file mode 100644 index 0000000..c9f704b --- /dev/null +++ b/test/test-util-clone.js @@ -0,0 +1,65 @@ +/** + * Tests util.clone + * + * 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 + */ + +require( './common' ); + +var assert = require( 'assert' ), + util = require( '../lib/util' ); + +var arr = [ 1, 2, 3 ], + obj = { a: 1, b: 2 }; + +var arr2 = util.clone( arr ), + obj2 = util.clone( obj ); + +assert.ok( + ( arr !== arr2 ), + "Cloned array is not the same object as the original" +); + +assert.ok( + ( obj !== obj2 ), + "Cloned object is not the same object as the original" +); + +// ensure array was properly cloned +for ( var i = 0, len = arr.length; i < len; i++ ) +{ + assert.equal( + arr2[ i ], + arr[ i ], + "Array data is properly cloned" + ); +} + +// ensure object was properly cloned +for ( prop in obj ) +{ + assert.equal( + obj2[ prop ], + obj[ prop ], + "Object data is properly cloned" + ); +} +