'use strict'; var object = require('../src/js/object'); var tui = { util: object }; describe('object', function() { beforeEach(function() { tui.util.resetLastId(); }); it('compareJSON()은 json객체가 같은지 비교한다.', function() { var obj1 = {url: 'http://119.205.249.132/ac', st: 1, rLt: 1, rEnc: 'UTF-8', qEnc: 'UTF-8'}, obj2 = {url: 'http://119.205.249.132/ac', st: 1, rLt: 1, rEnc: 'UTF-8', qEnc: 'UTF-8'}, obj3 = {url: 'http://119.205.249.132/ac', st: 1, rLt: 1, rEnc: 'UTF-8', qEnc: 'UTF-8'}, obj4 = {url: 'http://119.205.249.132/ac', st: 1, rLt: 1, rEnc: 'UTF-8', qEnc: 'UTF-8'}; var objA = {url: 'http://119.205.249.132/ac', st: 1, rLt: 1, rEnc: 'UTF-8', qEnc: 'UTF-8'}, objB = {url: 'http://120.120.266.1/', st: 11, rLt: 2, rEnc: 'UTF-8', qEnc: 'UTF-8'}; var objC = {a: 100, b: [1, 2, 3], dt: {age: 12}}, objD = {a: 100, b: [1, 2, 3], dt: {age: 1222}}, objE = {a: 100, b: [1, 2, 3], dt: {age: 12}}; expect(tui.util.compareJSON(obj1, obj2, obj3, obj4)).toBe(true); expect(tui.util.compareJSON(objA, objB)).toBe(false); expect(tui.util.compareJSON(objC, objD)).toBe(false); expect(tui.util.compareJSON(objC, objE)).toBe(true); }); it('extend()는 객체를 확장한다', function() { var target = { firstName: 'MinHyeong', lastName: 'Kang' }; var source = { lastName: 'Kim', middleName: '-', myprop: { test: 'good', testFunc: function(x) { return x + 2; } } }; tui.util.extend(target, source); expect(target.middleName).toEqual('-'); expect(target.lastName).toEqual('Kim'); expect(target.myprop.test).toEqual('good'); expect(target.myprop.testFunc(3)).toEqual(5); }); it('stamp() 메서드로 특정 객체에 unique 한 ID를 부여할 수 있다', function() { var myFn = function() {}; var myObj = {}; tui.util.stamp(myFn); tui.util.stamp(myObj); expect(tui.util.stamp(myFn)).toBeDefined(); expect(tui.util.stamp(myFn)).toBe(1); expect(tui.util.stamp(myObj)).toBe(2); }); it('hasStamp() 는 stamp()로 ID부여 여부를 확인가능', function() { var myFn = function() {}; expect(tui.util.hasStamp(myFn)).not.toBe(true); tui.util.stamp(myFn); expect(tui.util.hasStamp(myFn)).toBe(true); }); describe('keys', function() { it('객체를 전달받아 키만 따로 배열로 만들어 리턴해준다.', function() { var result = tui.util.keys({'key1': 1, 'key2': 2}); expect(result.length).toEqual(2); expect(result[0]).toEqual('key1'); expect(result[1]).toEqual('key2'); }); }); describe('pick', function() { it('기본 검증', function() { var o1, o2 = null; expect(tui.util.pick(o1)).toBeUndefined(); expect(tui.util.pick(o1, 'key1')).toBeUndefined(); expect(tui.util.pick(o2)).toBeNull(); expect(tui.util.pick(o2, 'key1')).toBeUndefined(); expect(tui.util.pick(o2, 'key1', 'key2')).toBeUndefined(); expect(tui.util.pick(o2, 'valueOf')).toBeUndefined(); expect(tui.util.pick(o2, 'toString')).toBeUndefined(); expect(tui.util.pick(1)).toBe(1); expect(tui.util.pick('key1')).toBe('key1'); expect(tui.util.pick('key1', 'key2')).toBeUndefined(); }); it('Object 인 경우', function() { var obj = { 'key1': 1, 'key2': null, 'nested': { 'key1': 11, 'key2': null, 'nested': { 'key1': 21 } } }; expect(tui.util.pick(obj, 'key1')).toBe(1); expect(tui.util.pick(obj, 'key1', 'notFound')).toBeUndefined(); expect(tui.util.pick(obj, 'nested')).toEqual(obj.nested); expect(tui.util.pick(obj, 'nested', 'key1')).toBe(11); expect(tui.util.pick(obj, 'nested', 'nested')).toBe(obj.nested.nested); expect(tui.util.pick(obj, 'nested', 'nested', 'key1')).toBe(21); expect(tui.util.pick(obj, 'notFound')).toBeUndefined(); expect(tui.util.pick(obj, 'notFound', 'notFound')).toBeUndefined(); expect(tui.util.pick(obj, 'key2')).toBeNull(); expect(tui.util.pick(obj, 'key2', 'key2')).toBeUndefined(); expect(tui.util.pick(obj, 'key2', 'valueOf')).toBeUndefined(); expect(tui.util.pick(obj, 'nested', 'key2')).toBeNull(); }); it('배열인 경우', function() { var arr = [1, [2], {'key1': 3}]; expect(tui.util.pick(arr, 0)).toBe(1); expect(tui.util.pick(arr, 1)).toBe(arr[1]); expect(tui.util.pick(arr, 1, 0)).toBe(2); expect(tui.util.pick(arr, 2, 'key1')).toBe(3); expect(tui.util.pick(arr, 5)).toBeUndefined(); }); }); });