travel/admin/node_modules/tui-code-snippet/test/object.test.js

180 lines
5.7 KiB
JavaScript

'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();
});
});
});