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

176 lines
4.7 KiB
JavaScript
Raw Normal View History

2024-06-24 11:28:18 +08:00
'use strict';
var tui = {};
tui.util = require('../src/js/inheritance');
describe('inheritance', function() {
describe('#createObject()', function() {
it('전달된 객체를 prototype으로 가지는 새 객체를 생성할 수 있다', function() {
var obj = {
say: function() {
alert('hello');
},
arr: [1, 2, 3]
};
var newObj = tui.util.createObject(obj);
expect(newObj.say).toBeDefined();
});
it('prototype으로 사용하는 객체는 얇은 복사를 하기 때문에 주의해야 한다', function() {
var obj = {
arr: [1, 3, 4]
};
var newObj = tui.util.createObject(obj);
obj.arr.push(5);
expect(newObj.arr.length).toBe(4);
});
});
describe('#inherit()', function() {
it('기본적인 프로토타입 상속을 지원한다', function() {
var adam;
/* Animal */
function Animal(leg) {
this.leg = leg;
this.position = 0;
}
Animal.prototype.move = function(to) {
this.position = to;
};
/* Person */
function Person(leg) {
Animal.call(this, leg);
}
tui.util.inherit(Person, Animal);
Person.prototype.say = function(word) {
return '"' + word + '"';
};
adam = new Person(2);
adam.move(3);
expect(adam.position).toBe(3);
expect(adam.leg).toBe(2);
expect(adam.say('good')).toBe('"good"');
});
it('상속관계라도 부모의 생성자를 자동 호출하지는 않는다', function() {
var person;
/* Animal */
function Animal(leg) {
this.leg = leg;
this.position = 0;
}
Animal.prototype.move = function(to) {
this.position = to;
};
/* Person */
function Person(leg) { // eslint-disable-line no-unused-vars
// Animal.call(this, leg); 주석처리함
}
tui.util.inherit(Person, Animal);
Person.prototype.say = function(word) {
return '"' + word + '"';
};
person = new Person(2);
expect(person.leg).toBeUndefined();
});
it('2단계 이상 상속도 지원한다', function() {
var resig;
/* Animal */
function Animal(leg) {
this.leg = leg;
this.position = 0;
}
Animal.prototype.move = function(to) {
this.position = to;
};
/* Person */
function Person(leg) {
Animal.call(this, leg);
}
tui.util.inherit(Person, Animal);
Person.prototype.say = function(word) {
return '"' + word + '"';
};
/* Programmer */
function Programmer(name) {
Person.call(this, 2);
this.name = name;
}
tui.util.inherit(Programmer, Person);
Programmer.prototype.coding = function(language) {
return this.name + ' coding with ' + language;
};
resig = new Programmer('john resig');
expect(resig.coding('JS')).toBe('john resig coding with JS');
expect(resig.leg).toBe(2);
expect(resig.say('good')).toBe('"good"');
});
it('당연한 이야기지만 상속관계더라도 인스턴스 프로퍼티는 공유하지 않는다', function() {
var ant, person;
/* Animal */
function Animal(leg) {
this.leg = leg;
this.position = 0;
}
Animal.prototype.move = function(to) {
this.position = to;
};
/* Person */
function Person(leg) {
Animal.call(this, leg);
}
tui.util.inherit(Person, Animal);
Person.prototype.say = function(word) {
return '"' + word + '"';
};
ant = new Animal(6);
ant.move(10);
person = new Person(2);
tui.util.inherit(Person, Animal);
expect(ant.leg).toBe(6);
expect(person.leg).toBe(2);
expect(ant.say).toBeUndefined();
expect(person.say).toBeDefined();
expect(person.say('good')).toBe('"good"');
});
});
});