-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest.js
89 lines (76 loc) · 1.65 KB
/
test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
const test = require("baretest")("Multi-class inheritance");
const assert = require("assert");
const multiclass = require("./index");
class HasAge {
constructor({age}) {
this._age = age;
}
set age(age) {
this._age = age;
}
get age() {
return this._age;
}
}
class HasName {
constructor({name}) {
this.name = name;
}
getName() {
return this.name;
}
}
class Person extends multiclass(HasAge, HasName) {
getNameAndAge() {
return `${this.name} is ${this.age} years old.`;
}
}
class Element {
constructor({element}) {
this.element = element;
}
static elements = ["earth", "fire", "water", "air"];
static isElement(element) {
return this.elements.includes(element);
}
static listElements() {
return this.elements.join(", ");
}
}
class FifthElement extends multiclass(Person, Element) {
static listElements() {
return `${super.listElements()}, leeloo`;
}
}
let leeloo = {};
test.before(() => {
leeloo = new FifthElement({
name: "Leeloo",
age: 22,
element: "fifth",
});
});
test(
"Test multi-class inheritance",
() => {
assert.strictEqual(leeloo.getName(), "Leeloo");
assert.strictEqual(leeloo.age, 22);
assert.strictEqual(leeloo.getNameAndAge(), "Leeloo is 22 years old.");
assert.strictEqual(leeloo.element, "fifth");
// getters and setters
leeloo.age = 23;
assert.strictEqual(leeloo.age, 23);
// static inheritance
assert.ok(FifthElement.isElement("air"));
assert.throws(() => leeloo.isElement("air"));
assert.deepStrictEqual(
FifthElement.elements,
["earth", "fire", "water", "air"],
);
assert.strictEqual(
FifthElement.listElements(),
"earth, fire, water, air, leeloo",
);
},
);
test.run();