Outlook_Addin_LLM/node_modules/@fluentui/utilities/lib-amd/merge.test.js

82 lines
3.2 KiB
JavaScript

define(["require", "exports", "./merge"], function (require, exports, merge_1) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
describe('merge', function () {
it('can merge', function () {
expect((0, merge_1.merge)({}, { a: 1, b: 0 }, { b: 2 })).toEqual({
a: 1,
b: 2,
});
});
it('can handle falsey', function () {
expect((0, merge_1.merge)({}, null, undefined, false, { a: '1' }, { b: '2' }, { b: undefined })).toEqual({
a: '1',
b: undefined,
});
});
it('can handle null values', function () {
expect((0, merge_1.merge)({}, { a: null })).toEqual({
a: null,
});
});
it('can handle array values', function () {
expect((0, merge_1.merge)({}, { a: [1, 2] })).toEqual({ a: [1, 2] });
});
it('can merge deeply', function () {
expect((0, merge_1.merge)({}, { b: 0 }, { a: { c: 1 } }, { a: { c: 2 } })).toEqual({
a: { c: 2 },
b: 0,
});
});
it('can handle cycles', function () {
var obj = {
foo: undefined,
};
obj.foo = obj;
expect((0, merge_1.merge)({}, obj)).toEqual({ foo: obj });
});
it('can handle deep cycles', function () {
var obj = {
foo: {
bar: {
baz: undefined,
},
},
};
obj.foo.bar.baz = obj;
var result = (0, merge_1.merge)({}, obj);
expect(result).toEqual({ foo: { bar: { baz: obj } } });
expect(result.foo).not.toBe(obj.foo);
expect(result.foo.bar.baz).toBe(obj);
});
it('can handle prototype pollution', function () {
var obj1 = {
__proto__: { payload: 'malicious value' },
constructor: { foo: 'malicious value' },
};
// used to check it keeps other properties
var obj2 = {
__proto__: { payload: 'malicious value' },
prototype: { payload: 'malicious value' },
constructor: { foo: 'malicious value' },
foo: { bar: 'baz' },
};
// used to check deep cycles
var obj3 = {
__proto__: { payload: 'malicious value' },
constructor: { foo: 'malicious value' },
a: { b: 'baz', __proto__: { payload: 'malicious value' } },
};
expect((0, merge_1.merge)({}, obj1)).toEqual({});
expect((0, merge_1.merge)({}, obj2)).toEqual({ foo: { bar: 'baz' } });
expect((0, merge_1.merge)({}, obj1, obj2)).toEqual({ foo: { bar: 'baz' } });
// Checking that merge keeps target properties but doesn't merge malicious properties
expect((0, merge_1.merge)(obj1, obj2, obj3)).toEqual({
a: { b: 'baz' },
constructor: { foo: 'malicious value' },
foo: { bar: 'baz' },
});
});
});
});
//# sourceMappingURL=merge.test.js.map