-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtests.js
121 lines (116 loc) · 2.82 KB
/
tests.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
console.log("persistent-harmony tests");
var module = require("./lib/persistent-harmony.js");
var PH = module.LoggedPH; // ... or module.PHProxy;
var MONGO_ARGS = {};
var mongoPH = null; // to be initialized
var mongoTests = [
["mongo lazy", function(cb){
var mymap = mongoPH.wrap("mymap", {}, function(){
console.log("mymap is now fully loaded from DB")
});
console.log("myapp", mymap);
mymap.first = "coucou";
console.log("myapp", mymap);
delete mymap.first;
console.log("myapp", mymap);
setTimeout(function(){
// for some reason, this call requires getOwnPropertyDescriptor to be set
console.log("myapp", mymap);
cb(true)
}, 2000);
}],
["mongo async", function(cb){
var mymap = mongoPH.wrap("mymap", {}, function(){
// TODO: add one field in db
console.log("mymap is now fully loaded from DB")
console.log("myapp", mymap);
mymap.first = "coucou";
console.log("myapp", mymap);
delete mymap.first;
console.log("myapp", mymap);
// TODO: chack that field is still there
cb(true)
});
}],
];
var tests = [
["typeof proxy", function(cb){
var proxy = PH({});
cb(typeof proxy === "object");
}],
["typeof new proxy", function(cb){
var proxy = new PH({});
cb(typeof proxy === "object");
}],
["get field", function(cb){
var o = {a:1}, proxy = PH(o);
cb(o.a === proxy.a);
}],
["set field", function(cb){
var o = {a:1}, proxy = PH(o);
proxy.a = 2;
cb(o.a === 2 && 2 === proxy.a);
}],
["++field", function(cb){
var o = {a:1}, proxy = PH(o);
++proxy.a;
cb(o.a === 2 && 2 === proxy.a);
}],
["field++", function(cb){
var o = {a:1}, proxy = PH(o);
proxy.a++;
cb(o.a === 2 && 2 === proxy.a);
}],
["delete field", function(cb){
var o = {a:1}, proxy = PH(o);
delete proxy.a;
cb(proxy.a === undefined && o.a === undefined);
}],
["Object.keys()", function(cb){
var o = {a:1}, proxy = PH(o);
var k1 = Object.keys(o), k2 = Object.keys(proxy);
cb(k1.length === k2.length && k1[0] === k2[0]);
}],
["for(i in proxy)", function(cb){
var o = {a:1}, proxy = PH(o), fields = [];
for (var i in proxy)
fields.push(i);
cb(fields.length === 1 && fields[0] === "a");
}],
["sort", function(cb){
var o = {a:[2,3,1]}, proxy = PH(o);
proxy.a.sort();
cb(proxy.a[0] === 1 && proxy.a[2] === 3);
}],
["*** loading mongo tests ***", function(cb){
try {
new mongo.MongoPH(MONGO_ARGS, function(instance){
mongoPH = instance;
tests = tests.concat(mongoTests);
cb(true);
});
}
catch (e) {
cb(false)
}
}]
];
(function next(){
var test = tests.shift();
if (!test)
console.log("***end of tests ***");
else {
function check(r){
console.log ("\t\t\t\t\t\t\t=>", !!r ? "ok" : "NOK");
process.nextTick(next);
}
console.log(test[0], "...");
try {
test[1](check);
}
catch (e) {
console.error("/!\\ exception:", e);
check();
}
}
})();