phaser
Version:
A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.
147 lines (118 loc) • 4.18 kB
JavaScript
var DeepCopy = require('../../../src/utils/object/DeepCopy');
describe('Phaser.Utils.Objects.DeepCopy', function ()
{
it('should return a number as-is', function ()
{
expect(DeepCopy(42)).toBe(42);
});
it('should return a string as-is', function ()
{
expect(DeepCopy('hello')).toBe('hello');
});
it('should return a boolean as-is', function ()
{
expect(DeepCopy(true)).toBe(true);
expect(DeepCopy(false)).toBe(false);
});
it('should return null as-is', function ()
{
expect(DeepCopy(null)).toBeNull();
});
it('should return undefined as-is', function ()
{
expect(DeepCopy(undefined)).toBe(undefined);
});
it('should deep copy a flat object', function ()
{
var original = { a: 1, b: 2, c: 3 };
var copy = DeepCopy(original);
expect(copy).toEqual(original);
expect(copy).not.toBe(original);
});
it('should deep copy a nested object', function ()
{
var original = { a: 1, b: { c: 2, d: 3 } };
var copy = DeepCopy(original);
expect(copy).toEqual(original);
expect(copy.b).not.toBe(original.b);
});
it('should not modify the original object when the copy is mutated', function ()
{
var original = { a: 1, b: { c: 2 } };
var copy = DeepCopy(original);
copy.a = 99;
copy.b.c = 99;
expect(original.a).toBe(1);
expect(original.b.c).toBe(2);
});
it('should deep copy a flat array', function ()
{
var original = [1, 2, 3];
var copy = DeepCopy(original);
expect(copy).toEqual(original);
expect(copy).not.toBe(original);
expect(Array.isArray(copy)).toBe(true);
});
it('should deep copy a nested array', function ()
{
var original = [1, [2, 3], [4, [5, 6]]];
var copy = DeepCopy(original);
expect(copy).toEqual(original);
expect(copy[1]).not.toBe(original[1]);
expect(copy[2][1]).not.toBe(original[2][1]);
});
it('should deep copy an object containing arrays', function ()
{
var original = { items: [1, 2, 3], nested: { values: [4, 5] } };
var copy = DeepCopy(original);
expect(copy).toEqual(original);
expect(copy.items).not.toBe(original.items);
expect(copy.nested.values).not.toBe(original.nested.values);
});
it('should deep copy an array containing objects', function ()
{
var original = [{ a: 1 }, { b: 2 }];
var copy = DeepCopy(original);
expect(copy).toEqual(original);
expect(copy[0]).not.toBe(original[0]);
expect(copy[1]).not.toBe(original[1]);
});
it('should handle an empty object', function ()
{
var original = {};
var copy = DeepCopy(original);
expect(copy).toEqual({});
expect(copy).not.toBe(original);
});
it('should handle an empty array', function ()
{
var original = [];
var copy = DeepCopy(original);
expect(copy).toEqual([]);
expect(copy).not.toBe(original);
expect(Array.isArray(copy)).toBe(true);
});
it('should deep copy objects with mixed value types', function ()
{
var original = { num: 1, str: 'hello', bool: true, nil: null, arr: [1, 2], obj: { x: 10 } };
var copy = DeepCopy(original);
expect(copy.num).toBe(1);
expect(copy.str).toBe('hello');
expect(copy.bool).toBe(true);
expect(copy.nil).toBeNull();
expect(copy.arr).toEqual([1, 2]);
expect(copy.arr).not.toBe(original.arr);
expect(copy.obj).toEqual({ x: 10 });
expect(copy.obj).not.toBe(original.obj);
});
it('should handle deeply nested structures', function ()
{
var original = { a: { b: { c: { d: { e: 42 } } } } };
var copy = DeepCopy(original);
expect(copy.a.b.c.d.e).toBe(42);
expect(copy.a).not.toBe(original.a);
expect(copy.a.b).not.toBe(original.a.b);
expect(copy.a.b.c).not.toBe(original.a.b.c);
expect(copy.a.b.c.d).not.toBe(original.a.b.c.d);
});
});