Code coverage report for lang/clone.js

Statements: 100% (35 / 35)      Branches: 72.73% (8 / 11)      Functions: 100% (8 / 8)      Lines: 100% (34 / 34)     

All files » lang/ » clone.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 651           1 70 70   19 19   6 6   1 1   1 1   43   70     1 19 19 19     1 36     1 1 1 1 1 1     1 1     1 6       6 14   6     1        
define(['../object/forOwn', './kindOf'], function (forOwn, kindOf) {
 
    /**
     * Clone native types.
     * @version 0.1.0 (2012/07/13)
     */
    function clone(val){
        var result;
        switch ( kindOf(val) ) {
            case 'Object':
                result = cloneObject(val);
                break;
            case 'Array':
                result = deepCloneArray(val);
                break;
            case 'RegExp':
                result = cloneRegExp(val);
                break;
            case 'Date':
                result = cloneDate(val);
                break;
            default:
                result = val;
        }
        return result;
    }
 
    function cloneObject(source) {
        var out = {};
        forOwn(source, copyProperty, out);
        return out;
    }
 
    function copyProperty(val, key){
        this[key] = clone(val);
    }
 
    function cloneRegExp(r){
        var flags = '';
        flags += r.multiline? 'm' : '';
        flags += r.global? 'g' : '';
        flags += r.ignoreCase? 'i' : '';
        return new RegExp(r.source, flags);
    }
 
    function cloneDate(date){
        return new Date( date.getTime() );
    }
 
    function deepCloneArray(arr){
        var out = [],
            i = -1,
            n = arr.length,
            val;
        while (++i < n) {
            out[i] = clone(arr[i]);
        }
        return out;
    }
 
    return clone;
 
});