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

193 lines
6.9 KiB
JavaScript

'use strict';
var defineClass = require('../src/js/defineClass');
describe('module:def', function() {
describe('def()', function() {
var props1,
propsWithinit,
propsWithinit2,
propsWithStatic;
props1 = {
var1: 1,
method1: function() {}
};
propsWithinit = {
var3: 3,
init: function() {
this.instanceVar = 3;
},
method3: function() {}
};
propsWithinit2 = {
var4: 4,
init: function() {
this.instanceVar = 4;
},
method4: function() {}
};
propsWithStatic = {
var2: 2,
method2: function() {},
static: {
staticMethod1: function() {},
staticMethod2: function() {}
}
};
describe('생성자를 생성할수있다', function() {
var MyObject;
beforeEach(function() {
MyObject = defineClass(props1);
});
it('MyObject.prototype에 method1이 있다.', function() {
expect(MyObject.prototype.method1).toBeDefined();
expect(MyObject.prototype.method1).toBe(props1.method1);
});
it('MyObject.prototype에 var1가 있고 값이 정확하다..', function() {
expect(MyObject.prototype.var1).toBeDefined();
expect(MyObject.prototype.var1).toEqual(props1.var1);
});
it('MyObject으로 생성한 인스턴스에서 va1과 method1를 참조할수있다.', function() {
var instance = new MyObject();
expect(instance.var1).toBeDefined();
expect(instance.var1).toBe(MyObject.prototype.var1);
expect(instance.method1).toBeDefined();
expect(instance.method1).toBe(MyObject.prototype.method1);
});
});
describe('init을 넘겨 생성자를 지정할수있다.', function() {
var MyObject;
beforeEach(function() {
MyObject = defineClass(propsWithinit);
});
it('MyObject.prototype에 method3가 있다.', function() {
expect(MyObject.prototype.method3).toBeDefined();
expect(MyObject.prototype.method3).toBe(propsWithinit.method3);
});
it('MyObject.prototype에 var3가 있고 값이 정확하다..', function() {
expect(MyObject.prototype.var3).toBeDefined();
expect(MyObject.prototype.var3).toEqual(propsWithinit.var3);
});
it('MyObject으로 생성한 인스턴스에서 var3과 method3를 참조할수있다.', function() {
var instance = new MyObject();
expect(instance.var3).toBeDefined();
expect(instance.var3).toBe(MyObject.prototype.var3);
expect(instance.method3).toBeDefined();
expect(instance.method3).toBe(MyObject.prototype.method3);
});
it('MyObject으로 생성한 인스턴스에서 인스턴스맴버가 존재한다.', function() {
var instance = new MyObject();
expect(instance.instanceVar).toBeDefined();
expect(instance.instanceVar).toEqual(3);
});
});
describe('static키로 클래스 멤버를 할당할수있다', function() {
var MyObject;
beforeEach(function() {
MyObject = defineClass(propsWithStatic);
});
it('MyObject에 스테틱멤버가 존재한다.', function() {
expect(MyObject.staticMethod1).toBeDefined();
expect(MyObject.staticMethod2).toBeDefined();
expect(propsWithStatic['static']).not.toBeDefined();
});
});
describe('생성자를 상속받아 또다른 생성자를 만들수있다.', function() {
var Parent,
Child;
beforeEach(function() {
Parent = defineClass(propsWithinit);
Child = defineClass(Parent, propsWithinit2);
});
it('Child.prototype에 method4가 있다.', function() {
expect(Child.prototype.method4).toBeDefined();
expect(Child.prototype.method4).toBe(propsWithinit2.method4);
});
it('Child.prototype에 var4가 있고 값이 정확하다..', function() {
expect(Child.prototype.var4).toBeDefined();
expect(Child.prototype.var4).toEqual(propsWithinit2.var4);
});
it('Child로 생성한 인스턴스에서 프로토타입멤버를 참조할수있다.', function() {
var instance = new Child();
expect(instance.var4).toBeDefined();
expect(instance.var4).toBe(Child.prototype.var4);
expect(instance.method4).toBeDefined();
expect(instance.method4).toBe(Child.prototype.method4);
});
it('Child로 생성한 인스턴스에서 Parent에서 상속받은 멤버를 참조할수있다.', function() {
var instance = new Child();
expect(instance.var3).toBeDefined();
expect(instance.var3).toBe(Parent.prototype.var3);
expect(instance.method3).toBeDefined();
expect(instance.method3).toBe(Parent.prototype.method3);
});
it('Child로 생성한 인스턴스에서 인스턴스멤버를 참조할수있다.', function() {
var instance = new Child();
expect(instance.instanceVar).toBeDefined();
expect(instance.instanceVar).toEqual(4);
});
});
describe('init안에서 def로 만들어진 생성자를 빌려쓸수있다.', function() {
var Parent,
Child;
beforeEach(function() {
Parent = defineClass(propsWithinit);
Child = defineClass(Parent, {
init: function() {
Parent.call(this);
}
});
});
it('Child로 생성한 인스턴스에서 Parent에서 상속받은 멤버를 참조할수있다.', function() {
var instance = new Child();
expect(instance.var3).toBeDefined();
expect(instance.var3).toBe(Parent.prototype.var3);
expect(instance.method3).toBeDefined();
expect(instance.method3).toBe(Parent.prototype.method3);
});
it('Child로 생성한 인스턴스에서 인스턴스멤버를 참조할수있다.', function() {
var instance = new Child();
expect(instance.instanceVar).toBeDefined();
expect(instance.instanceVar).toEqual(3);
});
});
});
});