Skip to content

Commit 6a6b2c1

Browse files
committed
Making subscribe tests
1 parent eece377 commit 6a6b2c1

File tree

5 files changed

+146
-16
lines changed

5 files changed

+146
-16
lines changed

src/api/isProxy.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
dop.isProxy = function (object) {
3+
return (dop.isRegistered(object) && dop.getObjectProxy(object)===object);
4+
};

src/api/isTarget.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
dop.isTarget = function (object) {
3+
return (dop.isRegistered(object) && dop.getObjectTarget(object)===object);
4+
};

src/protocol/onsubscribe.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,16 @@ dop.protocol.onsubscribe = function(node, request_id, request) {
1717
dop.core.sendResponse(node, response);
1818
return object;
1919
}
20-
else
21-
dop.util.invariant(false, 'dop.onsubscribe callback must return or resolve a regular object');
20+
else {
21+
// http://www.2ality.com/2016/03/promise-rejections-vs-exceptions.html
22+
try {
23+
dop.util.invariant(false, 'dop.onsubscribe callback must return or resolve a regular object');
24+
} catch(err) {
25+
console.log( 123,err );
26+
return reject(err);
27+
}
28+
// reject()
29+
}
2230

2331

2432
}, function reject(error) {

src/util/alias.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
1+
// Private alias
22
function isFunction(func) {
33
return typeof func == 'function';
44
}

test/transports/subscribe.js

Lines changed: 127 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,146 @@
11
var test = require('tape');
22
var dopServer = require('../../dist/nodejs').create();
33
var dopClient = require('../../dist/nodejs').create();
4-
4+
dopServer.env = 'SERVER';
5+
dopClient.env = 'CLIENT';
56

67
var transportName = process.argv[2] || 'local';
78
var transportListen = require('dop-transports').listen[transportName];
89
var transportConnect = require('dop-transports').connect[transportName];
910

10-
var server = dopServer.listen({transport:transportListen, timeout:1});
11+
var server = dopServer.listen({transport:transportListen});
1112
var client = dopClient.connect({transport:transportConnect, listener:server});
1213

1314

1415

15-
// test('Subscribe', function(t) {
16+
test('Client subscribe synchronously', function(t) {
17+
18+
var DATA = {
19+
string: 'string',
20+
boolean: true,
21+
number: -123,
22+
Infinity: -Infinity,
23+
float: 1.234153454354341,
24+
long: 12313214234312324353454534534,
25+
undefined: undefined,
26+
null: null,
27+
regexp: /molamazo/g,
28+
date: new Date(),
29+
"~DOP": [],
30+
und: "~U",
31+
inf: '~I',
32+
fun: '~F',
33+
nan: '~N',
34+
reg: '~R',
35+
deep:{
36+
deeper:{the:'end'}
37+
}
38+
};
39+
var nodeClient;
40+
dopServer.onsubscribe(function(name, req) {
41+
if (name === 'DATA') {
42+
nodeClient = req.node;
43+
t.equal(dopServer.isTarget(DATA), false, 'Is not registered yet');
44+
return DATA;
45+
}
46+
else if (name === 'DATA_DEEP') {
47+
t.equal(dopServer.isRegistered(DATA), true, 'Is registered');
48+
t.equal(dopServer.isTarget(DATA), true, 'Is target');
49+
t.equal(dopServer.isProxy(DATA.deep), true, 'Is proxy');
50+
return DATA.deep;
51+
}
52+
else if (name === 'DATA_DEEPER') {
53+
return dopServer.getObjectTarget(DATA.deep.deeper);
54+
}
55+
else if (name === 'ASYNC') {
56+
setTimeout(function(){
57+
req.resolve(dopServer.getObjectProxy(DATA));
58+
},10)
59+
return req;
60+
}
61+
else if (name === 'INNER-COPY') {
62+
return [Math.random(), DATA];
63+
}
64+
else if (name === 'REJECT') {
65+
req.reject({message:'Subscription rejected'})
66+
}
67+
else if (name === 'RESOLVING STRING') {
68+
req.resolve('')
69+
}
1670

17-
server.on('connect', function(node){
18-
// node.subscribe('OBJCLIENT');
19-
})
20-
dopServer.onsubscribe(function(cuar){
21-
console.log( cuar );
22-
return {paco:'pil'};
2371
})
2472

25-
myobj = dopClient.register({mola:'mazo'})
26-
client.subscribe('PUBLIC').into(myobj).then(function(obj){
27-
console.log( obj===myobj );
73+
var objClient, objectDataServer, objectDataClient;
74+
client.subscribe('DATA').then(function(obj){
75+
objClient = obj;
76+
objectDataServer = dopServer.data.object[1];
77+
objectDataClient = dopClient.data.object[1];
78+
t.deepEqual(obj, DATA, 'deepEqual data received from server');
79+
t.deepEqual(objectDataServer.object, dopServer.getObjectProxy(DATA), 'Same object stored in server');
80+
t.deepEqual(objectDataServer.node[nodeClient.token].subscribed, true, 'Client subscribed');
81+
t.deepEqual(objectDataServer.node[nodeClient.token].owner, false, 'Client is not owner');
82+
t.deepEqual(objectDataClient.node[client.token].subscribed, false, 'Server is not subscribed');
83+
t.deepEqual(objectDataClient.node[client.token].owner, true, 'Server is owner');
84+
return client.subscribe('DATA_DEEP');
85+
})
86+
.then(function(obj_deep){
87+
t.equal(obj_deep, objClient.deep, 'DATA_DEEP is the same object');
88+
t.deepEqual(obj_deep, DATA.deep, 'DATA_DEEP is deepEqual to original data');
89+
return client.subscribe('DATA_DEEPER');
90+
})
91+
.then(function(obj_deeper){
92+
t.equal(obj_deeper, objClient.deep.deeper, 'DATA_DEEPER is the same object');
93+
t.deepEqual(obj_deeper, DATA.deep.deeper, 'DATA_DEEPER is deepEqual to original data');
94+
return client.subscribe('ASYNC');
95+
})
96+
.then(function(obj){
97+
t.equal(obj, objClient, 'DATA is the same object');
98+
t.deepEqual(obj, DATA, 'DATA is deepEqual to original data');
99+
return client.subscribe('INNER-COPY');
100+
})
101+
.then(function(obj){
102+
objectDataServer2 = dopServer.data.object[2];
103+
objectDataClient2 = dopClient.data.object[2];
104+
t.notEqual(objectDataServer.object, objectDataServer2.object[1], 'Not equal to DATA');
105+
t.deepEqual(objectDataServer.object, objectDataServer2.object[1], 'deepEqual to DATA');
106+
t.deepEqual(dopClient.getObjectId(obj), 2, 'Correct objectId');
107+
t.deepEqual(obj[1], DATA, 'deepEqual data received from server');
108+
t.deepEqual(objectDataServer2.node[nodeClient.token].subscribed, true, 'Client subscribed');
109+
t.deepEqual(objectDataServer2.node[nodeClient.token].owner, false, 'Client is not owner');
110+
t.deepEqual(objectDataClient2.node[client.token].subscribed, false, 'Server is not subscribed');
111+
t.deepEqual(objectDataClient2.node[client.token].owner, true, 'Server is owner');
112+
return client.subscribe('REJECT');
113+
})
114+
.catch(function(err){
115+
t.equal(err.message, 'Subscription rejected', 'Subscription rejected');
116+
t.end();
117+
return client.subscribe('RESOLVING STRING');
28118
})
119+
// .catch(function(err){
120+
// console.log( 123131, typeof err );
121+
// t.end();
122+
// })
123+
124+
});
125+
126+
127+
// test('Client subscribe asynchronously same object', function(t) {});
128+
// test('Client subscribe asynchronously different objects', function(t) {});
129+
// test('Multiple Clients subscribe Same object', function(t) {});
130+
// test('Multiple Clients subscribe different objects', function(t) {});
131+
132+
// test('Into...', function(t) {});
133+
134+
// test('Server subscribe...', function(t) {});
135+
136+
137+
29138

30139

31-
// });
140+
// dopClient.observeProperty(o, 'paco', function(mutation){
141+
// console.log( mutation );
142+
// })
32143

144+
// dopClient.observe(o, function(mutations){
145+
// console.log( mutations );
146+
// })

0 commit comments

Comments
 (0)