forked from pkrumins/node-rfb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
rects.js
103 lines (88 loc) · 3.35 KB
/
rects.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
var assert = require('assert');
var qemu = require('./lib/qemu');
var RFB = require('rfb');
var Seq = require('seq');
var Hash = require('hashish');
exports.rects = function () {
var port = Math.floor(Math.random() * (Math.pow(2,16) - 10000)) + 10000;
var q = qemu({ port : port });
// console.log('gvncviewer :' + (port - 5900));
var to = 'dimensions keys mouse'
.split(' ')
.reduce(function (acc, name) {
acc[name] = setTimeout(function () {
assert.fail('never reached ' + name);
}, 60000);
return acc;
}, {})
;
setTimeout(function () {
var r = new RFB({ port : port });
r.requestRedraw();
r.dimensions(function (dims) {
clearTimeout(to.dimensions);
assert.eql(dims, { width : 720, height : 400 });
setTimeout(sendKeys, 5000, r);
});
}, 10000);
function sendKeys (r) {
Seq.ap('xinit'.split(''))
.seqEach_(function (next, key) {
r.once('raw', function (rect) {
assert.ok(
rect.width <= 32 && rect.height <= 32,
'rect at (' + rect.x + ',' + rect.y + ') '
+ 'is too big: ' + rect.width + 'x' + rect.height
);
setTimeout(next, 250);
});
setTimeout(function () {
r.sendKeyDown(key.charCodeAt(0));
r.sendKeyUp(key.charCodeAt(0));
}, 50);
})
.seq_(function (next) {
clearTimeout(to.keys);
// send a newline
r.sendKeyDown(65293);
r.sendKeyUp(65293);
var toResize = setTimeout(function () {
assert.fail('never resized');
}, 8000);
r.on('desktopSize', function fn (rect) {
if (rect.width === 640 && rect.height === 480) {
clearTimeout(toResize);
setTimeout(next, 3000);
}
});
})
.seq_(function (next) {
var x = 300;
var y = 300;
var toMouse = setTimeout(function () {
assert.fail('mouse never moved');
}, 15000);
setTimeout(function () {
r.once('raw', function (ref) {
setTimeout(function () {
r.sendPointer(x + 100, y, 0);
r.on('raw', function fn (rect) {
clearTimeout(toMouse);
next();
});
}, 200);
});
r.sendPointer(x, y, 0);
}, 100);
r.sendPointer(x-2, y, 0);
r.sendPointer(x-1, y, 0);
})
.seq(function () {
clearTimeout(to.mouse);
setTimeout(function () {
q.stdin.write('quit\n');
}, 500);
})
;
}
};