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

293 lines
9.2 KiB
JavaScript

'use strict';
var HashMap = require('../src/js/hashMap');
describe('module:hashMap', function() {
var hashMap;
beforeEach(function() {
hashMap = new HashMap();
});
describe('HashMap이 존재한다.', function() {
it('HashMap은 정의되어있다.', function() {
expect(HashMap).toBeDefined();
});
it('hashMap의 인스턴스가 존재한다.', function() {
expect(hashMap).toBeDefined();
});
});
describe('setKeyValue()', function() {
it('key와 value를 전달하여 데이터를 저장한다..', function() {
hashMap.setKeyValue('dataKey', 'data');
hashMap.setKeyValue('dataKey2', 'data');
expect(hashMap.get('dataKey')).toEqual('data');
expect(hashMap.length).toEqual(2);
});
it('같은 key에 값을 두번 셋팅하면 length에 변함이 없다.', function() {
hashMap.setKeyValue('dataKey', 'data');
hashMap.setKeyValue('dataKey', 'data2');
expect(hashMap.get('dataKey')).toEqual('data2');
expect(hashMap.length).toEqual(1);
});
});
describe('setObject()', function() {
it('객체를 전달하여 데이터를 저장한다..', function() {
hashMap.setObject({
'dataKey': 'data',
'dataKey2': 'data'
});
expect(hashMap.get('dataKey')).toEqual('data');
expect(hashMap.length).toEqual(2);
});
});
describe('merge()', function() {
it('해쉬맵을 인자로 받아 병합한다.', function() {
var mergedHashMap = new HashMap();
hashMap.setObject({
'dataKey': 'data',
'dataKey2': 'data'
});
mergedHashMap.merge(hashMap);
expect(mergedHashMap.get('dataKey')).toEqual('data');
expect(mergedHashMap.length).toEqual(2);
});
});
describe('set()', function() {
it('key와 value를 전달하여 데이터를 저장한다..', function() {
hashMap.set('dataKey', 'data');
expect(hashMap.get('dataKey')).toEqual('data');
});
it('객체를 전달하여 데이터를 저장한다..', function() {
hashMap.set({
'dataKey': 'data'
});
expect(hashMap.get('dataKey')).toEqual('data');
});
});
describe('get()', function() {
beforeEach(function() {
hashMap.set('dataKey', 'data');
});
it('키를 넘겨 값을 가져온다.', function() {
var v = hashMap.get('dataKey');
expect(v).toEqual('data');
});
});
describe('has()', function() {
beforeEach(function() {
hashMap.set('dataKey', 'data');
});
it('존재하는 키에대해 true를 리턴한다.', function() {
var v = hashMap.has('dataKey');
expect(v).toEqual(true);
});
it('존재하지 않는 키에대해 false를 리턴한다.', function() {
var v = hashMap.has('notAKey');
expect(v).toEqual(false);
});
});
describe('encodeKey()', function() {
it('키로 사용할 문자열을 넘기면 프리픽스를 인코딩해 리턴한다.', function() {
var encodedKey = hashMap.encodeKey('dataKey');
expect(encodedKey).toEqual('ådataKey');
});
});
describe('decodeKey()', function() {
it('키를 넘기면 프리픽스를 제거해 리턴한다.', function() {
var encodedKey = hashMap.decodeKey('ådataKey');
expect(encodedKey).toEqual('dataKey');
});
});
describe('remove()', function() {
beforeEach(function() {
hashMap.set('dataKey', 'data');
hashMap.set('dataKey2', 'data');
});
it('키를 넘겨 데이터를 삭제한다.', function() {
hashMap.remove('dataKey');
expect(hashMap.has('dataKey')).toEqual(false);
expect(hashMap.length).toEqual(1);
});
it('키를 여러개 넘겨 데이터를 삭제한다.', function() {
var v = hashMap.remove('dataKey', 'dataKey2');
expect(v).toEqual(['data', 'data']);
expect(hashMap.length).toEqual(0);
});
it('키의 배열을 넘겨 데이터를 삭제한다.', function() {
var v = hashMap.remove(['dataKey', 'dataKey2']);
expect(v).toEqual(['data', 'data']);
expect(hashMap.length).toEqual(0);
});
it('삭제된 데이터가 리턴된다.', function() {
var v = hashMap.remove('dataKey');
expect(v).toEqual('data');
});
it('없는키를 삭제하면 null이 리턴되고 length는 변함이 없다.', function() {
var v = hashMap.remove('dataKey1');
expect(v).toBe(null);
expect(hashMap.length).toEqual(2);
});
});
describe('removeByKey()', function() {
beforeEach(function() {
hashMap.set('dataKey', 'data');
});
it('키를 넘겨 데이터를 삭제한다.', function() {
var v;
hashMap.removeByKey('dataKey');
v = hashMap.has('dataKey');
expect(v).toEqual(false);
expect(hashMap.length).toEqual(0);
});
it('삭제된 데이터가 리턴된다.', function() {
var v = hashMap.removeByKey('dataKey');
expect(v).toEqual('data');
});
it('없는키를 삭제하면 null이 리턴되고 length는 변함이 없다.', function() {
var v = hashMap.removeByKey('dataKey1');
expect(v).toBe(null);
expect(hashMap.length).toEqual(1);
});
});
describe('removeByKeyArray()', function() {
beforeEach(function() {
hashMap.set('key', 'data');
hashMap.set('key2', 'data');
});
it('키의 목록을 넘겨 데이터를 삭제한다.', function() {
hashMap.removeByKeyArray(['key', 'key2']);
expect(hashMap.has('key')).toEqual(false);
expect(hashMap.has('key2')).toEqual(false);
expect(hashMap.length).toEqual(0);
});
it('삭제된 데이터가 리턴된다.', function() {
var v = hashMap.removeByKeyArray(['key', 'key2']);
expect(v).toEqual(['data', 'data']);
});
});
describe('removeAll()', function() {
beforeEach(function() {
hashMap.set('key1', 'data1');
hashMap.set('key2', 'data2');
hashMap.set('key3', 'data3');
});
it('모든 값을 지운다.', function() {
hashMap.removeAll();
expect(hashMap.get('key1')).not.toBeDefined();
expect(hashMap.get('key2')).not.toBeDefined();
expect(hashMap.get('key3')).not.toBeDefined();
expect(hashMap.length).toEqual(0);
});
});
describe('each()', function() {
beforeEach(function() {
hashMap.set('key1', 'data1');
hashMap.set('key2', 'data2');
hashMap.set('key3', 'data3');
});
it('데이터를 순회하여 넘겨받은 콜백에 넘겨준다.', function() {
var sumValue = '';
var sumKey = '';
hashMap.each(function(value, key) {
sumValue += value;
sumKey += key;
});
expect(sumValue).toEqual('data1data2data3');
expect(sumKey).toEqual('key1key2key3');
});
});
describe('keys()', function() {
beforeEach(function() {
hashMap.set('key1', 'data1');
hashMap.set('key2', 'data2');
hashMap.set('key3', 'data3');
});
it('저장되어있는 Key를 모와서 배열로 리턴해준다.', function() {
var keys;
keys = hashMap.keys();
expect(keys).toEqual(['key1', 'key2', 'key3']);
});
});
describe('find()', function() {
beforeEach(function() {
hashMap.set('key1', 'data1');
hashMap.set('key2', 'data');
hashMap.set('key3', 'data');
});
it('조건을 체크하는 펑션을 넘겨 데이터의 배열을 구할수있다.', function() {
var dataByValue, dataByKey;
dataByValue = hashMap.find(function(value) {
return value === 'data';
});
dataByKey = hashMap.find(function(value, key) {
return key === 'key1';
});
expect(dataByValue).toEqual(['data', 'data']);
expect(dataByKey).toEqual(['data1']);
});
});
describe('toArray()', function() {
var obj = {};
beforeEach(function() {
hashMap.set('key1', 'good');
hashMap.set('key2', obj);
});
it('내부의 값들을 순서에 상관없이 배열로 반환한다', function() {
var arr = hashMap.toArray();
expect(arr.length).toBe(2);
expect(arr[0]).toBe('good');
expect(arr[1]).toBe(obj);
expect(arr[3]).toBeUndefined();
});
});
});