293 lines
9.2 KiB
JavaScript
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();
|
|
});
|
|
});
|
|
});
|