-
Notifications
You must be signed in to change notification settings - Fork 62
/
Copy pathdom.spec.ts
67 lines (66 loc) · 1.99 KB
/
dom.spec.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
import { Slim } from '../dist/index';
import '../src/directives/all.directives.js';
import { strictEqual } from 'assert';
import { processDOM } from '../src/dom.js';
describe('dom', () => {
it('should update attributes correctly', () => {
const div = document.createElement('div');
const model = {
myColor: 'red',
myName: 'avichay',
};
const assertFollowsModel = (/** @type {any} */ div) =>
strictEqual(
div.innerHTML,
`<h1 color="${model.myColor}">Hello there ${model.myName}</h1>`
);
div.innerHTML = /*html*/ `<h1 color="{{this.myColor}}">Hello there {{this.myName}}</h1>`;
const { flush } = processDOM(model, div);
flush();
assertFollowsModel(div);
model.myColor = 'bye';
assertFollowsModel(div);
model.myName = 'moishe';
assertFollowsModel(div);
});
it('should update with function calls', () => {
const stub = {
reverse: (/** @type {string} */ str) => str.split('').reverse().join(''),
value: {
name: 'avichay',
},
};
const div = document.createElement('div');
div.innerHTML = /*html*/ `<div>Hello {{this.reverse(this.value.name)}}</div><span>My mame is <span>{{this.value.name}}</span></span>`;
const { flush } = processDOM(stub, div);
flush();
strictEqual(
div.innerHTML,
`<div>Hello ${stub.reverse(
stub.value.name
)}</div><span>My mame is <span>${stub.value.name}</span></span>`
);
stub.value.name = "slim-js"
flush();
strictEqual(
div.innerHTML,
`<div>Hello ${stub.reverse(
stub.value.name
)}</div><span>My mame is <span>${stub.value.name}</span></span>`
);
// @ts-expect-error
stub.value = undefined;
flush();
strictEqual(
div.innerHTML,
`<div>Hello </div><span>My mame is <span></span></span>`
);
// @ts-expect-error
delete stub.value;
flush();
strictEqual(
div.innerHTML,
`<div>Hello </div><span>My mame is <span></span></span>`
);
});
});