-
-
Notifications
You must be signed in to change notification settings - Fork 6
/
test8.ts
105 lines (66 loc) 路 1.78 KB
/
test8.ts
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import { Evt } from "../lib/index.ts";
export interface Person {
name: string;
age: number;
[prom: string]: any;
}
export interface TypedPerson extends Person {
sex: "male" | "female";
}
export function isTyped(p: Person): p is TypedPerson {
return p.sex ? true: false;
}
let testCount= 0;
export class TypedPersonIntro {
private intro= "this person is ";
public introduce( tp: TypedPerson): void{
console.assert(this.intro + tp.sex === "this person is female", "m1");
testCount++;
}
}
let tpi= new TypedPersonIntro();
let evt = new Evt<Person>();
evt.attach(isTyped, Evt.getCtx(tpi), person=> tpi.introduce(person));
console.assert(evt.getHandlers().length === 1,"m2");
evt.post({
"name": "Sienna",
"age": 22,
"sex": "female"
});
evt.detach(Evt.getCtx(tpi));
console.assert( evt.getHandlers().length === 0, "m3");
evt.post({
"name": "Antonin",
"age": 21,
"sex": "male"
});
evt.attach(isTyped, Evt.getCtx(tpi), person => tpi.introduce(person));
console.assert(evt.getHandlers().length === 1,"m4");
evt.post({
"name": "Sienna",
"age": 22,
"sex": "female"
});
evt.getHandlers().find(({ op })=> op === isTyped )!.detach();
console.assert( evt.getHandlers().length === 0, "m5");
evt.post({
"name": "Antonin",
"age": 21,
"sex": "male"
});
evt.attach(isTyped, Evt.getCtx(tpi), person=> tpi.introduce(person));
console.assert(evt.getHandlers().length === 1, "m6");
evt.post({
"name": "Sienna",
"age": 22,
"sex": "female"
});
evt.getHandlers().find(({ ctx })=> ctx === Evt.getCtx(tpi) )!.detach();
console.assert( evt.getHandlers().length === 0, "m7");
evt.post({
"name": "Antonin",
"age": 21,
"sex": "male"
});
console.assert(testCount === 3, "m8");
console.log("PASS");