Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80668 views
1
/**
2
* Copyright 2013 Facebook, Inc.
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*
16
* @emails [email protected] [email protected]
17
*/
18
19
describe('ResourceMapSerializer', function() {
20
var ResourceMapSerializer = require('../lib/ResourceMapSerializer');
21
var ResourceMap = require('../lib/ResourceMap');
22
var JS = require('../lib/resource/JS');
23
var CSS = require('../lib/resource/CSS');
24
var JSLoader = require('../lib/loader/JSLoader');
25
var JSTestLoader = require('../lib/loader/JSTestLoader');
26
var CSSLoader = require('../lib/loader/CSSLoader');
27
28
it('should serialize resource map with a single object', function() {
29
var loaders = [new JSTestLoader(), new JSLoader(), new CSSLoader()];
30
var serializer = new ResourceMapSerializer(loaders);
31
var map = new ResourceMap([
32
JS.fromObject({
33
path: 'a/b.js',
34
id: 'b',
35
requiredModules: ['foo', 'bar']
36
})
37
]);
38
39
var map2 = serializer.fromObject(serializer.toObject(map));
40
expect(map2.getAllResources().length).toBe(1);
41
expect(map2.getResource('JS', 'b').requiredModules).toEqual(['foo', 'bar']);
42
});
43
44
it('should serialize resource map with multiple objects', function() {
45
var loaders = [new JSTestLoader(), new JSLoader(), new CSSLoader()];
46
var serializer = new ResourceMapSerializer(loaders);
47
var map = new ResourceMap([
48
JS.fromObject({
49
path: 'a/b.js',
50
id: 'b',
51
requiredModules: ['foo', 'bar']
52
}),
53
CSS.fromObject({
54
path: 'a/b.css',
55
id: 'b-css'
56
})
57
]);
58
59
var map2 = serializer.fromObject(serializer.toObject(map));
60
expect(map2.getAllResources().length).toBe(2);
61
expect(map2.getResource('JS', 'b') instanceof JS).toBe(true, 'JS');
62
expect(map2.getResource('CSS', 'b-css') instanceof CSS).toBe(true, 'CSS');
63
});
64
65
it('should serialize to a file', function() {
66
var fs = require('fs');
67
var data = null;
68
spyOn(fs, 'writeFile').andCallFake(function(path, d, enc, callback) {
69
data = d;
70
callback();
71
});
72
spyOn(fs, 'readFile').andCallFake(function(path, enc, callback) {
73
callback(null, data);
74
});
75
var loaders = [new JSTestLoader(), new JSLoader(), new CSSLoader()];
76
var serializer = new ResourceMapSerializer(loaders);
77
var map = new ResourceMap([
78
JS.fromObject({
79
path: 'a/b.js',
80
id: 'b',
81
requiredModules: ['foo', 'bar']
82
})
83
]);
84
85
var map2 = null;
86
runs(function() {
87
serializer.storeToPath('tmp', map, function() {
88
serializer.loadFromPath('tmp', function(err, m) {
89
map2 = m;
90
});
91
});
92
});
93
94
waitsFor(function() {
95
return map2;
96
}, 100);
97
98
runs(function() {
99
expect(fs.writeFile).toHaveBeenCalled();
100
expect(fs.readFile).toHaveBeenCalled();
101
expect(map2.getAllResources().length).toBe(1);
102
expect(map2.getResource('JS', 'b').requiredModules)
103
.toEqual(['foo', 'bar']);
104
});
105
});
106
107
it('should return null when version changes', function() {
108
var loaders = [new JSTestLoader(), new JSLoader(), new CSSLoader()];
109
var serializer1 = new ResourceMapSerializer(loaders, { version: '0.1' });
110
var serializer2 = new ResourceMapSerializer(loaders, { version: '0.2' });
111
var map = new ResourceMap([
112
JS.fromObject({
113
path: 'a/b.js',
114
id: 'b',
115
requiredModules: ['foo', 'bar']
116
}),
117
CSS.fromObject({
118
path: 'a/b.css',
119
id: 'b-css'
120
})
121
]);
122
123
var ser = serializer1.toObject(map);
124
var map2 = serializer2.fromObject(ser);
125
expect(map2).toBe(null);
126
});
127
});
128
129