Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80679 views
1
/**
2
* Copyright (c) 2014, Facebook, Inc. All rights reserved.
3
*
4
* This source code is licensed under the BSD-style license found in the
5
* LICENSE file in the root directory of this source tree. An additional grant
6
* of patent rights can be found in the PATENTS file in the same directory.
7
*/
8
'use strict';
9
10
jest.autoMockOff();
11
12
describe('nodeHasteModuleLoader', function() {
13
var HasteModuleLoader;
14
var mockEnvironment;
15
var resources;
16
var mockConfig = {
17
coverageCollector: '../IstanbulCollector'
18
};
19
20
var mockResourceMap = {
21
getResource: function(type, name) {
22
if (!resources.hasOwnProperty(name)) {
23
return undefined;
24
}
25
return resources[name];
26
}
27
};
28
29
function _generateResource(name, deps) {
30
deps = deps || [];
31
var resource = {
32
path: '/path/to/' + name + '.js',
33
id: name,
34
_requiredModuleMap: deps.reduce(function(prev, next) {
35
return prev[next] = true;
36
}, {})
37
};
38
if (deps.length) {
39
resource.requiredModules = deps;
40
}
41
return resource;
42
}
43
44
beforeEach(function() {
45
HasteModuleLoader = require('../HasteModuleLoader');
46
47
mockEnvironment = {
48
global: {
49
console: {},
50
mockClearTimers: jest.genMockFn()
51
},
52
runSourceText: jest.genMockFn().mockImplementation(function(codeStr) {
53
/* jshint evil: true */
54
return (new Function('return ' + codeStr))();
55
})
56
};
57
resources = {};
58
});
59
60
describe('hasDependency', function() {
61
it('properly calculates direct 1-way dependencies', function() {
62
resources.ModuleA = _generateResource('ModuleA', ['ModuleB']);
63
resources.ModuleB = _generateResource('ModuleB');
64
65
var loader = new HasteModuleLoader(mockConfig,
66
mockEnvironment, mockResourceMap);
67
var mockModules = loader.requireModule(__filename, 'mock-modules');
68
expect(mockModules.hasDependency('ModuleA', 'ModuleB')).toBe(true);
69
expect(mockModules.hasDependency('ModuleB', 'ModuleA')).toBe(false);
70
});
71
72
it('properly calculates direct cyclic dependencies', function() {
73
resources.ModuleA = _generateResource('ModuleA', ['ModuleB']);
74
resources.ModuleB = _generateResource('ModuleB', ['ModuleA']);
75
76
var loader = new HasteModuleLoader(mockConfig,
77
mockEnvironment, mockResourceMap);
78
var mockModules = loader.requireModule(__filename, 'mock-modules');
79
expect(mockModules.hasDependency('ModuleA', 'ModuleB')).toBe(true);
80
expect(mockModules.hasDependency('ModuleB', 'ModuleA')).toBe(true);
81
});
82
83
it('properly calculates indirect 1-way dependencies', function() {
84
resources.ModuleA = _generateResource('ModuleA', ['ModuleB']);
85
resources.ModuleB = _generateResource('ModuleB', ['ModuleC']);
86
resources.ModuleC = _generateResource('ModuleC');
87
88
var loader = new HasteModuleLoader(mockConfig,
89
mockEnvironment, mockResourceMap);
90
var mockModules = loader.requireModule(__filename, 'mock-modules');
91
expect(mockModules.hasDependency('ModuleA', 'ModuleC')).toBe(true);
92
});
93
94
it('properly calculates indirect cyclic dependencies', function() {
95
resources.ModuleA = _generateResource('ModuleA', ['ModuleB']);
96
resources.ModuleB = _generateResource('ModuleB', ['ModuleC']);
97
resources.ModuleC = _generateResource('ModuleC', ['ModuleA']);
98
99
var loader = new HasteModuleLoader(mockConfig,
100
mockEnvironment, mockResourceMap);
101
var mockModules = loader.requireModule(__filename, 'mock-modules');
102
expect(mockModules.hasDependency('ModuleA', 'ModuleC')).toBe(true);
103
expect(mockModules.hasDependency('ModuleC', 'ModuleA')).toBe(true);
104
});
105
});
106
});
107
108