@seanox/aspect-js
Version:
full stack JavaScript framework for SPAs incl. reactivity rendering, mvc / mvvm, models, expression language, datasource, routing, paths, unit test and some more
169 lines (165 loc) • 5.6 kB
HTML
<html>
<head>
<meta charset="ISO-8859-1">
<title>Seanox aspect-js test environment</title>
<style>
body {
font-family: monospace;
white-space: pre;
}
</style>
<script src="aspect-js.js"></script>
<script type="text/javascript">
Test.activate();
const TestModel = {};
TestModel.ticks = 0;
TestModel.ping = () => {
return ++TestModel.ticks;
};
TestModel.events = [];
TestModel.onEvent = (event) => {
if (TestModel.events[event] === undefined)
TestModel.events[event] = 0;
TestModel.events[event]++;
};
Composite.listen(Composite.EVENT_RENDER_START, TestModel.onEvent);
Composite.listen(Composite.EVENT_RENDER_NEXT, TestModel.onEvent);
Composite.listen(Composite.EVENT_RENDER_END, TestModel.onEvent);
Test.create({test() {
const events = TestModel.events[Composite.EVENT_RENDER_START];
Assert.assertTrue(events !== undefined);
Assert.assertEquals(1, events);
}});
Test.create({test() {
const events = TestModel.events[Composite.EVENT_RENDER_NEXT];
Assert.assertTrue(events !== undefined);
// 73 initial elements + text
// +63 text dynamic (added by renderer)
// +84 text static (added by renderer)
Assert.assertEquals(220, events);
}});
Test.create({test() {
const events = TestModel.events[Composite.EVENT_RENDER_END];
Assert.assertTrue(events !== undefined);
Assert.assertEquals(1, events);
}});
Composite.listen(Composite.EVENT_RENDER_END, () => {
Test.start();
});
</script>
</head>
<body>
<span>
A-1:{{TestModel.ping()}}
A-2:{{TestModel.ping()}}
A-3:{{TestModel.ping()}}
<span>
<span>
A-A-A-1:{{TestModel.ping()}}
A-A-A-2:{{TestModel.ping()}}
A-A-A-3:{{TestModel.ping()}}
<span>
A-A-A-A-1:{{TestModel.ping()}}
A-A-A-A-2:{{TestModel.ping()}}
A-A-A-A-3:{{TestModel.ping()}}
<span>
A-A-A-A-A-1:{{TestModel.ping()}}
A-A-A-A-A-2:{{TestModel.ping()}}
A-A-A-A-A-3:{{TestModel.ping()}}
</span>
<span>
A-A-A-A-B-1:{{TestModel.ping()}}
A-A-A-A-B-2:{{TestModel.ping()}}
A-A-A-A-B-3:{{TestModel.ping()}}
</span>
</span>
<span>
A-A-A-B-1:{{TestModel.ping()}}
A-A-A-B-2:{{TestModel.ping()}}
A-A-A-B-3:{{TestModel.ping()}}
</span>
<span>
A-A-A-C-1:{{TestModel.ping()}}
A-A-A-C-2:{{TestModel.ping()}}
A-A-A-C-3:{{TestModel.ping()}}
</span>
</span>
</span>
</span>
<span>
B-1:{{TestModel.ping()}}
B-2:{{TestModel.ping()}}
B-3:{{TestModel.ping()}}
<span>
<span>
B-A-A-1:{{TestModel.ping()}}
B-A-A-2:{{TestModel.ping()}}
B-A-A-3:{{TestModel.ping()}}
<span>
B-A-A-A-1:{{TestModel.ping()}}
B-A-A-A-2:{{TestModel.ping()}}
B-A-A-A-3:{{TestModel.ping()}}
<span>
B-A-A-A-A-1:{{TestModel.ping()}}
B-A-A-A-A-2:{{TestModel.ping()}}
B-A-A-A-A-3:{{TestModel.ping()}}
</span>
<span>
B-A-A-A-B-1:{{TestModel.ping()}}
B-A-A-A-B-2:{{TestModel.ping()}}
B-A-A-A-B-3:{{TestModel.ping()}}
</span>
</span>
<span>
B-A-A-B-1:{{TestModel.ping()}}
B-A-A-B-2:{{TestModel.ping()}}
B-A-A-B-3:{{TestModel.ping()}}
</span>
<span>
B-A-A-C-1:{{TestModel.ping()}}
B-A-A-C-2:{{TestModel.ping()}}
B-A-A-C-3:{{TestModel.ping()}}
</span>
</span>
</span>
</span>
<span>
C-1:{{TestModel.ping()}}
C-2:{{TestModel.ping()}}
C-3:{{TestModel.ping()}}
<span>
<span>
C-A-A-1:{{TestModel.ping()}}
C-A-A-2:{{TestModel.ping()}}
C-A-A-3:{{TestModel.ping()}}
<span>
C-A-A-A-1:{{TestModel.ping()}}
C-A-A-A-2:{{TestModel.ping()}}
C-A-A-A-3:{{TestModel.ping()}}
<span>
C-A-A-A-A-1:{{TestModel.ping()}}
C-A-A-A-A-2:{{TestModel.ping()}}
C-A-A-A-A-3:{{TestModel.ping()}}
</span>
<span>
C-A-A-A-B-1:{{TestModel.ping()}}
C-A-A-A-B-2:{{TestModel.ping()}}
C-A-A-A-B-3:{{TestModel.ping()}}
</span>
</span>
<span>
C-A-A-B-1:{{TestModel.ping()}}
C-A-A-B-2:{{TestModel.ping()}}
C-A-A-B-3:{{TestModel.ping()}}
</span>
<span>
C-A-A-C-1:{{TestModel.ping()}}
C-A-A-C-2:{{TestModel.ping()}}
C-A-A-C-3:{{TestModel.ping()}}
</span>
</span>
</span>
</span>
</body>
</html>