Ai
6 Star 0 Fork 2

src-openEuler/nodejs-extend

Create your Gitee Account
Explore and code with more than 13.5 million developers,Free private repositories !:)
Sign up
文件
This repository doesn't specify license. Please pay attention to the specific project description and its upstream code dependency when using it.
Clone or Download
test-index.js 14.93 KB
Copy Edit Raw Blame History
fwx913451 authored 2020-08-28 18:01 +08:00 . fuanan add package
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637
'use strict';
var extend = require('../index');
var test = require('tape');
var str = 'me a test';
var integer = 10;
var arr = [1, 'what', new Date(81, 8, 4)];
var date = new Date(81, 4, 13);
var Foo = function () {};
var obj = {
str: str,
integer: integer,
arr: arr,
date: date,
constructor: 'fake',
isPrototypeOf: 'not a function',
foo: new Foo()
};
var deep = {
ori: obj,
layer: {
integer: 10,
str: 'str',
date: new Date(84, 5, 12),
arr: [101, 'dude', new Date(82, 10, 4)],
deep: {
str: obj.str,
integer: integer,
arr: obj.arr,
date: new Date(81, 7, 4)
}
}
};
test('missing arguments', function (t) {
t.deepEqual(extend(undefined, { a: 1 }), { a: 1 }, 'missing first argument is second argument');
t.deepEqual(extend({ a: 1 }), { a: 1 }, 'missing second argument is first argument');
t.deepEqual(extend(true, undefined, { a: 1 }), { a: 1 }, 'deep: missing first argument is second argument');
t.deepEqual(extend(true, { a: 1 }), { a: 1 }, 'deep: missing second argument is first argument');
t.deepEqual(extend(), {}, 'no arguments is object');
t.end();
});
test('merge string with string', function (t) {
var ori = 'what u gonna say';
var target = extend(ori, str);
var expectedTarget = {
0: 'm',
1: 'e',
2: ' ',
3: 'a',
4: ' ',
5: 't',
6: 'e',
7: 's',
8: 't'
};
t.equal(ori, 'what u gonna say', 'original string 1 is unchanged');
t.equal(str, 'me a test', 'original string 2 is unchanged');
t.deepEqual(target, expectedTarget, 'string + string is merged object form of string');
t.end();
});
test('merge string with number', function (t) {
var ori = 'what u gonna say';
var target = extend(ori, 10);
t.equal(ori, 'what u gonna say', 'original string is unchanged');
t.deepEqual(target, {}, 'string + number is empty object');
t.end();
});
test('merge string with array', function (t) {
var ori = 'what u gonna say';
var target = extend(ori, arr);
t.equal(ori, 'what u gonna say', 'original string is unchanged');
t.deepEqual(arr, [1, 'what', new Date(81, 8, 4)], 'array is unchanged');
t.deepEqual(target, {
0: 1,
1: 'what',
2: new Date(81, 8, 4)
}, 'string + array is array');
t.end();
});
test('merge string with date', function (t) {
var ori = 'what u gonna say';
var target = extend(ori, date);
var testDate = new Date(81, 4, 13);
t.equal(ori, 'what u gonna say', 'original string is unchanged');
t.deepEqual(date, testDate, 'date is unchanged');
t.deepEqual(target, testDate, 'string + date is date');
t.end();
});
test('merge string with obj', function (t) {
var ori = 'what u gonna say';
var target = extend(ori, obj);
t.equal(ori, 'what u gonna say', 'original string is unchanged');
var testObj = {
str: 'me a test',
integer: 10,
arr: [1, 'what', new Date(81, 8, 4)],
date: new Date(81, 4, 13),
constructor: 'fake',
isPrototypeOf: 'not a function',
foo: new Foo()
};
t.deepEqual(obj, testObj, 'original obj is unchanged');
t.deepEqual(target, testObj, 'string + obj is obj');
t.end();
});
test('merge number with string', function (t) {
var ori = 20;
var target = extend(ori, str);
t.equal(ori, 20, 'number is unchanged');
t.equal(str, 'me a test', 'string is unchanged');
t.deepEqual(target, {
0: 'm',
1: 'e',
2: ' ',
3: 'a',
4: ' ',
5: 't',
6: 'e',
7: 's',
8: 't'
}, 'number + string is object form of string');
t.end();
});
test('merge number with number', function (t) {
t.deepEqual(extend(20, 10), {}, 'number + number is empty object');
t.end();
});
test('merge number with array', function (t) {
var target = extend(20, arr);
t.deepEqual(arr, [1, 'what', new Date(81, 8, 4)], 'array is unchanged');
t.deepEqual(target, {
0: 1,
1: 'what',
2: new Date(81, 8, 4)
}, 'number + arr is object with array contents');
t.end();
});
test('merge number with date', function (t) {
var target = extend(20, date);
var testDate = new Date(81, 4, 13);
t.deepEqual(date, testDate, 'original date is unchanged');
t.deepEqual(target, testDate, 'number + date is date');
t.end();
});
test('merge number with object', function (t) {
var target = extend(20, obj);
var testObj = {
str: 'me a test',
integer: 10,
arr: [1, 'what', new Date(81, 8, 4)],
date: new Date(81, 4, 13),
constructor: 'fake',
isPrototypeOf: 'not a function',
foo: new Foo()
};
t.deepEqual(obj, testObj, 'obj is unchanged');
t.deepEqual(target, testObj, 'number + obj is obj');
t.end();
});
test('merge array with string', function (t) {
var ori = [1, 2, 3, 4, 5, 6];
var target = extend(ori, str);
t.deepEqual(ori, str.split(''), 'array is changed to be an array of string chars');
t.equal(str, 'me a test', 'string is unchanged');
t.deepEqual(target, {
0: 'm',
1: 'e',
2: ' ',
3: 'a',
4: ' ',
5: 't',
6: 'e',
7: 's',
8: 't'
}, 'array + string is object form of string');
t.end();
});
test('merge array with number', function (t) {
var ori = [1, 2, 3, 4, 5, 6];
var target = extend(ori, 10);
t.deepEqual(ori, [1, 2, 3, 4, 5, 6], 'array is unchanged');
t.deepEqual(target, ori, 'array + number is array');
t.end();
});
test('merge array with array', function (t) {
var ori = [1, 2, 3, 4, 5, 6];
var target = extend(ori, arr);
var testDate = new Date(81, 8, 4);
var expectedTarget = [1, 'what', testDate, 4, 5, 6];
t.deepEqual(ori, expectedTarget, 'array + array merges arrays; changes first array');
t.deepEqual(arr, [1, 'what', testDate], 'second array is unchanged');
t.deepEqual(target, expectedTarget, 'array + array is merged array');
t.end();
});
test('merge array with date', function (t) {
var ori = [1, 2, 3, 4, 5, 6];
var target = extend(ori, date);
var testDate = new Date(81, 4, 13);
var testArray = [1, 2, 3, 4, 5, 6];
t.deepEqual(ori, testArray, 'array is unchanged');
t.deepEqual(date, testDate, 'date is unchanged');
t.deepEqual(target, testArray, 'array + date is array');
t.end();
});
test('merge array with object', function (t) {
var ori = [1, 2, 3, 4, 5, 6];
var target = extend(ori, obj);
var testObject = {
str: 'me a test',
integer: 10,
arr: [1, 'what', new Date(81, 8, 4)],
date: new Date(81, 4, 13),
constructor: 'fake',
isPrototypeOf: 'not a function',
foo: new Foo()
};
t.deepEqual(obj, testObject, 'obj is unchanged');
t.equal(ori.length, 6, 'array has proper length');
t.equal(ori.str, obj.str, 'array has obj.str property');
t.equal(ori.integer, obj.integer, 'array has obj.integer property');
t.deepEqual(ori.arr, obj.arr, 'array has obj.arr property');
t.equal(ori.date, obj.date, 'array has obj.date property');
t.equal(target.length, 6, 'target has proper length');
t.equal(target.str, obj.str, 'target has obj.str property');
t.equal(target.integer, obj.integer, 'target has obj.integer property');
t.deepEqual(target.arr, obj.arr, 'target has obj.arr property');
t.equal(target.date, obj.date, 'target has obj.date property');
t.end();
});
test('merge date with string', function (t) {
var ori = new Date(81, 9, 20);
var target = extend(ori, str);
var testObject = {
0: 'm',
1: 'e',
2: ' ',
3: 'a',
4: ' ',
5: 't',
6: 'e',
7: 's',
8: 't'
};
t.deepEqual(ori, testObject, 'date is changed to object form of string');
t.equal(str, 'me a test', 'string is unchanged');
t.deepEqual(target, testObject, 'date + string is object form of string');
t.end();
});
test('merge date with number', function (t) {
var ori = new Date(81, 9, 20);
var target = extend(ori, 10);
t.deepEqual(ori, {}, 'date is changed to empty object');
t.deepEqual(target, {}, 'date + number is empty object');
t.end();
});
test('merge date with array', function (t) {
var ori = new Date(81, 9, 20);
var target = extend(ori, arr);
var testDate = new Date(81, 9, 20);
var testArray = [1, 'what', new Date(81, 8, 4)];
t.deepEqual(ori, testDate, 'date is unchanged');
t.deepEqual(arr, testArray, 'array is unchanged');
t.deepEqual(target, testDate, 'date + array is date');
t.end();
});
test('merge date with date', function (t) {
var ori = new Date(81, 9, 20);
var target = extend(ori, date);
t.deepEqual(ori, {}, 'date is empty object');
t.deepEqual(target, {}, 'date + date is empty object');
t.end();
});
test('merge date with object', function (t) {
var ori = new Date(81, 9, 20);
var target = extend(ori, obj);
var testDate = new Date(81, 8, 4);
var testObject = {
str: 'me a test',
integer: 10,
arr: [1, 'what', testDate],
date: new Date(81, 4, 13),
constructor: 'fake',
isPrototypeOf: 'not a function',
foo: new Foo()
};
t.deepEqual(obj, testObject, 'original object is unchanged');
t.deepEqual(ori, testObject, 'date becomes original object');
t.deepEqual(target, testObject, 'date + object is object');
t.end();
});
test('merge object with string', function (t) {
var testDate = new Date(81, 7, 26);
var ori = {
str: 'no shit',
integer: 76,
arr: [1, 2, 3, 4],
date: testDate
};
var target = extend(ori, str);
var testObj = {
0: 'm',
1: 'e',
2: ' ',
3: 'a',
4: ' ',
5: 't',
6: 'e',
7: 's',
8: 't',
str: 'no shit',
integer: 76,
arr: [1, 2, 3, 4],
date: testDate
};
t.deepEqual(ori, testObj, 'original object updated');
t.equal(str, 'me a test', 'string is unchanged');
t.deepEqual(target, testObj, 'object + string is object + object form of string');
t.end();
});
test('merge object with number', function (t) {
var ori = {
str: 'no shit',
integer: 76,
arr: [1, 2, 3, 4],
date: new Date(81, 7, 26)
};
var testObject = {
str: 'no shit',
integer: 76,
arr: [1, 2, 3, 4],
date: new Date(81, 7, 26)
};
var target = extend(ori, 10);
t.deepEqual(ori, testObject, 'object is unchanged');
t.deepEqual(target, testObject, 'object + number is object');
t.end();
});
test('merge object with array', function (t) {
var ori = {
str: 'no shit',
integer: 76,
arr: [1, 2, 3, 4],
date: new Date(81, 7, 26)
};
var target = extend(ori, arr);
var testObject = {
0: 1,
1: 'what',
2: new Date(81, 8, 4),
str: 'no shit',
integer: 76,
arr: [1, 2, 3, 4],
date: new Date(81, 7, 26)
};
t.deepEqual(ori, testObject, 'original object is merged');
t.deepEqual(arr, [1, 'what', testObject[2]], 'array is unchanged');
t.deepEqual(target, testObject, 'object + array is merged object');
t.end();
});
test('merge object with date', function (t) {
var ori = {
str: 'no shit',
integer: 76,
arr: [1, 2, 3, 4],
date: new Date(81, 7, 26)
};
var target = extend(ori, date);
var testObject = {
str: 'no shit',
integer: 76,
arr: [1, 2, 3, 4],
date: new Date(81, 7, 26)
};
t.deepEqual(ori, testObject, 'original object is unchanged');
t.deepEqual(date, new Date(81, 4, 13), 'date is unchanged');
t.deepEqual(target, testObject, 'object + date is object');
t.end();
});
test('merge object with object', function (t) {
var ori = {
str: 'no shit',
integer: 76,
arr: [1, 2, 3, 4],
date: new Date(81, 7, 26),
foo: 'bar'
};
var target = extend(ori, obj);
var expectedObj = {
str: 'me a test',
integer: 10,
arr: [1, 'what', new Date(81, 8, 4)],
date: new Date(81, 4, 13),
constructor: 'fake',
isPrototypeOf: 'not a function',
foo: new Foo()
};
var expectedTarget = {
str: 'me a test',
integer: 10,
arr: [1, 'what', new Date(81, 8, 4)],
date: new Date(81, 4, 13),
constructor: 'fake',
isPrototypeOf: 'not a function',
foo: new Foo()
};
t.deepEqual(obj, expectedObj, 'obj is unchanged');
t.deepEqual(ori, expectedTarget, 'original has been merged');
t.deepEqual(target, expectedTarget, 'object + object is merged object');
t.end();
});
test('deep clone', function (t) {
var ori = {
str: 'no shit',
integer: 76,
arr: [1, 2, 3, 4],
date: new Date(81, 7, 26),
layer: {
deep: {
integer: 42
}
}
};
var target = extend(true, ori, deep);
t.deepEqual(ori, {
str: 'no shit',
integer: 76,
arr: [1, 2, 3, 4],
date: new Date(81, 7, 26),
ori: {
str: 'me a test',
integer: 10,
arr: [1, 'what', new Date(81, 8, 4)],
date: new Date(81, 4, 13),
constructor: 'fake',
isPrototypeOf: 'not a function',
foo: new Foo()
},
layer: {
integer: 10,
str: 'str',
date: new Date(84, 5, 12),
arr: [101, 'dude', new Date(82, 10, 4)],
deep: {
str: 'me a test',
integer: 10,
arr: [1, 'what', new Date(81, 8, 4)],
date: new Date(81, 7, 4)
}
}
}, 'original object is merged');
t.deepEqual(deep, {
ori: {
str: 'me a test',
integer: 10,
arr: [1, 'what', new Date(81, 8, 4)],
date: new Date(81, 4, 13),
constructor: 'fake',
isPrototypeOf: 'not a function',
foo: new Foo()
},
layer: {
integer: 10,
str: 'str',
date: new Date(84, 5, 12),
arr: [101, 'dude', new Date(82, 10, 4)],
deep: {
str: 'me a test',
integer: 10,
arr: [1, 'what', new Date(81, 8, 4)],
date: new Date(81, 7, 4)
}
}
}, 'deep is unchanged');
t.deepEqual(target, {
str: 'no shit',
integer: 76,
arr: [1, 2, 3, 4],
date: new Date(81, 7, 26),
ori: {
str: 'me a test',
integer: 10,
arr: [1, 'what', new Date(81, 8, 4)],
date: new Date(81, 4, 13),
constructor: 'fake',
isPrototypeOf: 'not a function',
foo: new Foo()
},
layer: {
integer: 10,
str: 'str',
date: new Date(84, 5, 12),
arr: [101, 'dude', new Date(82, 10, 4)],
deep: {
str: 'me a test',
integer: 10,
arr: [1, 'what', new Date(81, 8, 4)],
date: new Date(81, 7, 4)
}
}
}, 'deep + object + object is deeply merged object');
target.layer.deep = 339;
t.deepEqual(deep, {
ori: {
str: 'me a test',
integer: 10,
arr: [1, 'what', new Date(81, 8, 4)],
date: new Date(81, 4, 13),
constructor: 'fake',
isPrototypeOf: 'not a function',
foo: new Foo()
},
layer: {
integer: 10,
str: 'str',
date: new Date(84, 5, 12),
arr: [101, 'dude', new Date(82, 10, 4)],
deep: {
str: 'me a test',
integer: 10,
arr: [1, 'what', new Date(81, 8, 4)],
date: new Date(81, 7, 4)
}
}
}, 'deep is unchanged after setting target property');
// ----- NEVER USE EXTEND WITH THE ABOVE SITUATION ------------------------------
t.end();
});
test('deep clone; arrays are merged', function (t) {
var defaults = {
arr: [1, 2, 3]
};
var override = {
arr: ['x']
};
var expectedTarget = {
arr: ['x', 2, 3]
};
var target = extend(true, defaults, override);
t.deepEqual(target, expectedTarget, 'arrays are merged');
t.end();
});
test('deep clone === false; objects merged normally', function (t) {
var defaults = {
a: 1
};
var override = {
a: 2
};
var target = extend(false, defaults, override);
t.deepEqual(target, override, 'deep === false handled normally');
t.end();
});
test('pass in null; should create a valid object', function (t) {
var override = {
a: 1
};
var target = extend(null, override);
t.deepEqual(target, override, 'null object handled normally');
t.end();
});
test('works without Array.isArray', function (t) {
var savedIsArray = Array.isArray;
Array.isArray = false; // don't delete, to preserve enumerability
var target = [];
var source = [1, [2], { 3: true }];
t.deepEqual(
extend(true, target, source),
[1, [2], { 3: true }],
'It works without Array.isArray'
);
Array.isArray = savedIsArray;
t.end();
});
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/src-openeuler/nodejs-extend.git
git@gitee.com:src-openeuler/nodejs-extend.git
src-openeuler
nodejs-extend
nodejs-extend
openEuler-23.09

Search