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('AnalyzeChangedTask', function() {
20
21
var AnalyzeChangedTask = require('../lib/AnalyzeChangedTask');
22
var ConfigurationTrie = require('../lib/ConfigurationTrie');
23
var loaders = require('../lib/loaders');
24
var ProjectConfiguration = require('../lib/resource/ProjectConfiguration');
25
describe('serialize', function() {
26
27
it('should serialize loaders', function() {
28
var task = new AnalyzeChangedTask(
29
[
30
new loaders.JSLoader({
31
extractSpecialRequires: true,
32
networkSize: true
33
}),
34
new loaders.CSSLoader({
35
networkSize: true
36
}),
37
new loaders.ImageLoader(),
38
new loaders.ProjectConfigurationLoader(),
39
new loaders.ResourceLoader()
40
],
41
new ConfigurationTrie([]));
42
43
var task2 = AnalyzeChangedTask.fromObject(task.toObject());
44
45
expect(task2.loaders.length).toBe(5);
46
expect(task2.loaders[0].options).toEqual({
47
extractSpecialRequires: true,
48
networkSize: true
49
});
50
});
51
52
it('should serialize ConfigurationTrie', function() {
53
var task = new AnalyzeChangedTask(
54
[],
55
new ConfigurationTrie([
56
new ProjectConfiguration('a/package.json', { foo: 'bar' }),
57
new ProjectConfiguration('b/c/package.json', {})
58
]));
59
60
var task2 = AnalyzeChangedTask.fromObject(task.toObject());
61
expect(task2.configurationTrie.configurations.length).toBe(2);
62
63
});
64
});
65
66
describe('Loading', function() {
67
var path = require('path');
68
var waitsForCallback = require('../lib/test_helpers/waitsForCallback');
69
var MessageList = require('../lib/MessageList');
70
var Resource = require('../lib/resource/Resource');
71
var testData = path.join(__dirname, '..', '__test_data__', 'JS');
72
73
it('should aggregate messages from loaders', function() {
74
var loader = new loaders.ResourceLoader();
75
var task = new AnalyzeChangedTask([loader], new ConfigurationTrie([]));
76
spyOn(loader, 'loadFromPath')
77
.andCallFake(function(path, configuration, callback) {
78
var messages = new MessageList();
79
messages.addError(path, 'foo', 'bar');
80
callback(messages, new Resource(path));
81
});
82
83
waitsForCallback(
84
function(callback) {
85
task.run(['a/b.js', 'a/c.js'], callback);
86
},
87
function(messages) {
88
expect(messages.length).toBe(2);
89
}
90
);
91
});
92
93
it('should load resource when changed', function() {
94
var loader = new loaders.ResourceLoader();
95
var task = new AnalyzeChangedTask([loader], new ConfigurationTrie([]));
96
spyOn(loader, 'loadFromPath')
97
.andCallFake(function(path, configuration, callback) {
98
expect(path).toBe('sub/added.js');
99
expect(configuration).toBe(undefined);
100
callback(new MessageList(), new Resource('sub/added.js'));
101
});
102
103
waitsForCallback(
104
function(callback) {
105
task.run(['sub/added.js'], callback);
106
},
107
function() {}
108
);
109
});
110
111
it('should load resource with matching configuration', function() {
112
var loader = new loaders.ResourceLoader();
113
var config = new ProjectConfiguration('sub/project.json', {});
114
var task = new AnalyzeChangedTask(
115
[loader],
116
new ConfigurationTrie([config]));
117
spyOn(loader, 'loadFromPath')
118
.andCallFake(function(path, configuration, callback) {
119
expect(path).toBe('sub/added.js');
120
expect(configuration).toBe(config);
121
callback(new MessageList(), new Resource('sub/added.js'));
122
});
123
124
waitsForCallback(
125
function(callback) {
126
task.run(['sub/added.js'], callback);
127
},
128
function() {}
129
);
130
});
131
132
it('should load resource in a subprocess', function() {
133
var loader = new loaders.JSLoader();
134
var task = new AnalyzeChangedTask([loader], new ConfigurationTrie([]));
135
136
waitsForCallback(
137
function(callback) {
138
task.runInForks(1, [path.join(testData, 'module.js')], callback);
139
},
140
function(messages, resources, skipped) {
141
expect(resources.length).toBe(1);
142
expect(resources[0])
143
.toEqual(jasmine.any(require('../lib/resource/JS')));
144
}
145
);
146
});
147
148
it('should load resource in a subprocess with messages', function() {
149
var loader = new loaders.JSLoader();
150
var task = new AnalyzeChangedTask([loader], new ConfigurationTrie([]));
151
152
waitsForCallback(
153
function(callback) {
154
task.runInForks(
155
1,
156
[path.join(testData, 'deprecated.js')],
157
callback);
158
},
159
function(messages, resources, skipped) {
160
expect(messages.length).toBe(1);
161
expect(messages.render()).toContain('@suggests is deprecated');
162
}
163
);
164
});
165
});
166
});
167
168