-
Notifications
You must be signed in to change notification settings - Fork 31
/
Copy pathhandlers.js
80 lines (69 loc) · 2.68 KB
/
handlers.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
/* eslint-env mocha */
var shared = require("./shared");
var expect = shared.expect;
var samples = shared.samples;
var expectImmutableEqual = shared.expectImmutableEqual;
var transitJS = require('transit-js');
var handlers = require('../').handlers;
var reader = transitJS.reader('json', { handlers: handlers.read });
var writer = transitJS.writer('json', { handlers: handlers.write });
describe("direct handlers usage", function() {
samples.get('Immutable').forEach(function(data, desc) {
describe(desc + " - " + data.inspect(), function() {
it('should encode to JSON', function() {
var json = writer.write(data);
expect(json).to.be.a('string');
expect(JSON.parse(json)).to.not.eql(null);
});
it('should round-trip', function() {
var roundTrip = reader.read(writer.write(data));
expect(roundTrip).to.be.an('object');
expectImmutableEqual(roundTrip, data);
expect(roundTrip).to.be.an.instanceOf(data.constructor);
});
});
});
describe("extending handlers", function() {
function Blah(x) { this.x = x; }
var extendedRead = {
blah: function(v) { return new Blah(v); }
};
Object.keys(handlers.read).forEach(function(tag) {
extendedRead[tag] = handlers.read[tag];
});
var extendedWrite = handlers.write.clone();
extendedWrite.set(Blah, transitJS.makeWriteHandler({
tag: function() { return 'blah'; },
rep: function(v) { return v.x; }
}));
var readerX = transitJS.reader('json', {handlers: extendedRead});
var writerX = transitJS.writer('json', {handlers: extendedWrite});
describe("extended type", function() {
it('should encode to JSON', function() {
var json = writerX.write(new Blah(123));
expect(json).to.be.a('string');
expect(JSON.parse(json)).to.not.eql(null);
});
it('should round-trip', function() {
var roundTrip = readerX.read(writerX.write(new Blah(456)));
expect(roundTrip).to.be.an.instanceOf(Blah);
expect(roundTrip).to.have.property("x", 456);
});
});
samples.get('Immutable').forEach(function(data, desc) {
describe(desc + " - " + data.inspect(), function() {
it('should encode to JSON', function() {
var json = writerX.write(data);
expect(json).to.be.a('string');
expect(JSON.parse(json)).to.not.eql(null);
});
it('should round-trip', function() {
var roundTrip = readerX.read(writerX.write(data));
expect(roundTrip).to.be.an('object');
expectImmutableEqual(roundTrip, data);
expect(roundTrip).to.be.an.instanceOf(data.constructor);
});
});
});
});
});