mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-01-29 06:27:49 +00:00
Add non-enumerable symbol tests.
This commit is contained in:
125
test/test.js
125
test/test.js
@@ -2925,7 +2925,7 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
QUnit.test('`_.' + methodName + '` should clone symbol properties', function(assert) {
|
QUnit.test('`_.' + methodName + '` should clone symbol properties', function(assert) {
|
||||||
assert.expect(3);
|
assert.expect(7);
|
||||||
|
|
||||||
function Foo() {
|
function Foo() {
|
||||||
this[symbol] = { 'c': 1 };
|
this[symbol] = { 'c': 1 };
|
||||||
@@ -2935,24 +2935,33 @@
|
|||||||
var symbol2 = Symbol('b');
|
var symbol2 = Symbol('b');
|
||||||
Foo.prototype[symbol2] = 2;
|
Foo.prototype[symbol2] = 2;
|
||||||
|
|
||||||
|
var symbol3 = Symbol('c');
|
||||||
|
defineProperty(Foo.prototype, symbol3, {
|
||||||
|
'configurable': true,
|
||||||
|
'enumerable': false,
|
||||||
|
'writable': true,
|
||||||
|
'value': 3
|
||||||
|
});
|
||||||
|
|
||||||
var object = { 'a': { 'b': new Foo } };
|
var object = { 'a': { 'b': new Foo } };
|
||||||
object[symbol] = { 'b': 1 };
|
object[symbol] = { 'b': 1 };
|
||||||
|
|
||||||
var actual = func(object);
|
var actual = func(object);
|
||||||
|
|
||||||
assert.deepEqual(getSymbols(actual.a.b), [symbol]);
|
|
||||||
|
|
||||||
if (isDeep) {
|
if (isDeep) {
|
||||||
assert.deepEqual(actual[symbol], object[symbol]);
|
assert.notStrictEqual(actual[symbol], object[symbol]);
|
||||||
assert.deepEqual(actual.a.b[symbol], object.a.b[symbol]);
|
assert.notStrictEqual(actual.a, object.a);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
assert.strictEqual(actual[symbol], object[symbol]);
|
assert.strictEqual(actual[symbol], object[symbol]);
|
||||||
assert.strictEqual(actual.a, object.a);
|
assert.strictEqual(actual.a, object.a);
|
||||||
}
|
}
|
||||||
|
assert.deepEqual(actual[symbol], object[symbol]);
|
||||||
|
assert.deepEqual(getSymbols(actual.a.b), [symbol]);
|
||||||
|
assert.deepEqual(actual.a.b[symbol], object.a.b[symbol]);
|
||||||
|
assert.deepEqual(actual.a.b[symbol2], object.a.b[symbol2]);
|
||||||
|
assert.deepEqual(actual.a.b[symbol3], object.a.b[symbol3])
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
skipAssert(assert, 3);
|
skipAssert(assert, 7);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -7363,8 +7372,8 @@
|
|||||||
pass = true;
|
pass = true;
|
||||||
|
|
||||||
defineProperty(object, 'a', {
|
defineProperty(object, 'a', {
|
||||||
'enumerable': true,
|
|
||||||
'configurable': true,
|
'configurable': true,
|
||||||
|
'enumerable': true,
|
||||||
'get': lodashStable.constant(value),
|
'get': lodashStable.constant(value),
|
||||||
'set': function() { pass = false; }
|
'set': function() { pass = false; }
|
||||||
});
|
});
|
||||||
@@ -7846,21 +7855,27 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
QUnit.test('`_.' + methodName + '` should work with a symbol `path`', function(assert) {
|
QUnit.test('`_.' + methodName + '` should work with a symbol `path`', function(assert) {
|
||||||
assert.expect(1);
|
assert.expect(2);
|
||||||
|
|
||||||
function Foo() {
|
function Foo() {}
|
||||||
this[symbol] = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Symbol) {
|
if (Symbol) {
|
||||||
var symbol2 = Symbol('b');
|
Foo.prototype[symbol] = 1;
|
||||||
Foo.prototype[symbol2] = 2;
|
|
||||||
var path = isHas ? symbol : symbol2;
|
|
||||||
|
|
||||||
assert.strictEqual(func(new Foo, path), true);
|
var symbol2 = Symbol('b');
|
||||||
|
defineProperty(Foo.prototype, symbol2, {
|
||||||
|
'configurable': true,
|
||||||
|
'enumerable': false,
|
||||||
|
'writable': true,
|
||||||
|
'value': 2
|
||||||
|
});
|
||||||
|
|
||||||
|
var object = isHas ? Foo.prototype : new Foo;
|
||||||
|
assert.strictEqual(func(object, symbol), true);
|
||||||
|
assert.strictEqual(func(object, symbol2), true);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
skipAssert(assert);
|
skipAssert(assert, 2);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -10114,14 +10129,22 @@
|
|||||||
var object1 = { 'a': 1 },
|
var object1 = { 'a': 1 },
|
||||||
object2 = { 'a': 1 };
|
object2 = { 'a': 1 };
|
||||||
|
|
||||||
object1[symbol] = { 'a': { 'b': 2 } };
|
object1[symbol1] = { 'a': { 'b': 2 } };
|
||||||
object2[symbol] = { 'a': { 'b': 2 } };
|
object2[symbol1] = { 'a': { 'b': 2 } };
|
||||||
|
|
||||||
|
defineProperty(object2, symbol2, {
|
||||||
|
'configurable': true,
|
||||||
|
'enumerable': false,
|
||||||
|
'writable': true,
|
||||||
|
'value': 2
|
||||||
|
});
|
||||||
|
|
||||||
assert.strictEqual(_.isEqual(object1, object2), true);
|
assert.strictEqual(_.isEqual(object1, object2), true);
|
||||||
|
|
||||||
object2[symbol] = { 'a': 1 };
|
object2[symbol1] = { 'a': 1 };
|
||||||
assert.strictEqual(_.isEqual(object1, object2), false);
|
assert.strictEqual(_.isEqual(object1, object2), false);
|
||||||
|
|
||||||
delete object2[symbol];
|
delete object2[symbol1];
|
||||||
object2[Symbol('a')] = { 'a': { 'b': 2 } };
|
object2[Symbol('a')] = { 'a': { 'b': 2 } };
|
||||||
assert.strictEqual(_.isEqual(object1, object2), false);
|
assert.strictEqual(_.isEqual(object1, object2), false);
|
||||||
}
|
}
|
||||||
@@ -15108,8 +15131,8 @@
|
|||||||
pass = true;
|
pass = true;
|
||||||
|
|
||||||
defineProperty(object, 'a', {
|
defineProperty(object, 'a', {
|
||||||
'enumerable': true,
|
|
||||||
'configurable': true,
|
'configurable': true,
|
||||||
|
'enumerable': true,
|
||||||
'get': function() { pass = false; },
|
'get': function() { pass = false; },
|
||||||
'set': function() { pass = false; }
|
'set': function() { pass = false; }
|
||||||
});
|
});
|
||||||
@@ -16499,7 +16522,7 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
QUnit.test('`_.' + methodName + '` should include symbols', function(assert) {
|
QUnit.test('`_.' + methodName + '` should include symbols', function(assert) {
|
||||||
assert.expect(2);
|
assert.expect(3);
|
||||||
|
|
||||||
function Foo() {
|
function Foo() {
|
||||||
this.a = 0;
|
this.a = 0;
|
||||||
@@ -16510,19 +16533,28 @@
|
|||||||
var symbol2 = Symbol('b');
|
var symbol2 = Symbol('b');
|
||||||
Foo.prototype[symbol2] = 2;
|
Foo.prototype[symbol2] = 2;
|
||||||
|
|
||||||
|
var symbol3 = Symbol('c');
|
||||||
|
defineProperty(Foo.prototype, symbol3, {
|
||||||
|
'configurable': true,
|
||||||
|
'enumerable': false,
|
||||||
|
'writable': true,
|
||||||
|
'value': 3
|
||||||
|
});
|
||||||
|
|
||||||
var foo = new Foo,
|
var foo = new Foo,
|
||||||
actual = func(foo, resolve(foo, 'a'));
|
actual = func(foo, resolve(foo, 'a'));
|
||||||
|
|
||||||
assert.strictEqual(actual[symbol], 1);
|
assert.strictEqual(actual[symbol], 1);
|
||||||
assert.strictEqual(actual[symbol2], 2);
|
assert.strictEqual(actual[symbol2], 2);
|
||||||
|
assert.notOk(symbol3 in actual);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
skipAssert(assert, 2);
|
skipAssert(assert, 3);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
QUnit.test('`_.' + methodName + '` should create an object with omitted symbols', function(assert) {
|
QUnit.test('`_.' + methodName + '` should create an object with omitted symbols', function(assert) {
|
||||||
assert.expect(6);
|
assert.expect(8);
|
||||||
|
|
||||||
function Foo() {
|
function Foo() {
|
||||||
this.a = 0;
|
this.a = 0;
|
||||||
@@ -16533,21 +16565,31 @@
|
|||||||
var symbol2 = Symbol('b');
|
var symbol2 = Symbol('b');
|
||||||
Foo.prototype[symbol2] = 2;
|
Foo.prototype[symbol2] = 2;
|
||||||
|
|
||||||
|
var symbol3 = Symbol('c');
|
||||||
|
defineProperty(Foo.prototype, symbol3, {
|
||||||
|
'configurable': true,
|
||||||
|
'enumerable': false,
|
||||||
|
'writable': true,
|
||||||
|
'value': 3
|
||||||
|
});
|
||||||
|
|
||||||
var foo = new Foo,
|
var foo = new Foo,
|
||||||
actual = func(foo, resolve(foo, symbol));
|
actual = func(foo, resolve(foo, symbol));
|
||||||
|
|
||||||
assert.strictEqual(actual.a, 0);
|
assert.strictEqual(actual.a, 0);
|
||||||
assert.strictEqual(actual[symbol], undefined);
|
assert.notOk(symbol in actual);
|
||||||
assert.strictEqual(actual[symbol2], 2);
|
assert.strictEqual(actual[symbol2], 2);
|
||||||
|
assert.notOk(symbol3 in actual);
|
||||||
|
|
||||||
actual = func(foo, resolve(foo, symbol2));
|
actual = func(foo, resolve(foo, symbol2));
|
||||||
|
|
||||||
assert.strictEqual(actual.a, 0);
|
assert.strictEqual(actual.a, 0);
|
||||||
assert.strictEqual(actual[symbol], 1);
|
assert.strictEqual(actual[symbol], 1);
|
||||||
assert.strictEqual(actual[symbol2], undefined);
|
assert.notOk(symbol2 in actual);
|
||||||
|
assert.notOk(symbol3 in actual);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
skipAssert(assert, 6);
|
skipAssert(assert, 8);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -17711,6 +17753,7 @@
|
|||||||
lodashStable.each(['pick', 'pickBy'], function(methodName) {
|
lodashStable.each(['pick', 'pickBy'], function(methodName) {
|
||||||
var expected = { 'a': 1, 'c': 3 },
|
var expected = { 'a': 1, 'c': 3 },
|
||||||
func = _[methodName],
|
func = _[methodName],
|
||||||
|
isPick = methodName == 'pick',
|
||||||
object = { 'a': 1, 'b': 2, 'c': 3, 'd': 4 },
|
object = { 'a': 1, 'b': 2, 'c': 3, 'd': 4 },
|
||||||
resolve = lodashStable.nthArg(1);
|
resolve = lodashStable.nthArg(1);
|
||||||
|
|
||||||
@@ -17757,7 +17800,7 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
QUnit.test('`_.' + methodName + '` should pick symbols', function(assert) {
|
QUnit.test('`_.' + methodName + '` should pick symbols', function(assert) {
|
||||||
assert.expect(2);
|
assert.expect(3);
|
||||||
|
|
||||||
function Foo() {
|
function Foo() {
|
||||||
this[symbol] = 1;
|
this[symbol] = 1;
|
||||||
@@ -17767,14 +17810,28 @@
|
|||||||
var symbol2 = Symbol('b');
|
var symbol2 = Symbol('b');
|
||||||
Foo.prototype[symbol2] = 2;
|
Foo.prototype[symbol2] = 2;
|
||||||
|
|
||||||
|
var symbol3 = Symbol('c');
|
||||||
|
defineProperty(Foo.prototype, symbol3, {
|
||||||
|
'configurable': true,
|
||||||
|
'enumerable': false,
|
||||||
|
'writable': true,
|
||||||
|
'value': 3
|
||||||
|
});
|
||||||
|
|
||||||
var foo = new Foo,
|
var foo = new Foo,
|
||||||
actual = func(foo, resolve(foo, [symbol, symbol2]));
|
actual = func(foo, resolve(foo, [symbol, symbol2, symbol3]));
|
||||||
|
|
||||||
assert.strictEqual(actual[symbol], 1);
|
assert.strictEqual(actual[symbol], 1);
|
||||||
assert.strictEqual(actual[symbol2], 2);
|
assert.strictEqual(actual[symbol2], 2);
|
||||||
|
|
||||||
|
if (isPick) {
|
||||||
|
assert.strictEqual(actual[symbol3], 3);
|
||||||
|
} else {
|
||||||
|
assert.notOk(symbol3 in actual);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
skipAssert(assert, 2);
|
skipAssert(assert, 3);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -20065,8 +20122,8 @@
|
|||||||
updater = isUpdate ? lodashStable.constant(value) : value;
|
updater = isUpdate ? lodashStable.constant(value) : value;
|
||||||
|
|
||||||
defineProperty(object, 'a', {
|
defineProperty(object, 'a', {
|
||||||
'enumerable': true,
|
|
||||||
'configurable': true,
|
'configurable': true,
|
||||||
|
'enumerable': true,
|
||||||
'get': lodashStable.constant(value),
|
'get': lodashStable.constant(value),
|
||||||
'set': function() { pass = false; }
|
'set': function() { pass = false; }
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user