This repository was archived by the owner on Apr 12, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 27.4k
/
Copy pathfixture.js
79 lines (69 loc) · 2.1 KB
/
fixture.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
'use strict';
var fs = require('fs');
var path = require('path');
var $ = require('cheerio');
var util = require('./util');
var root = path.resolve(__dirname, '..');
var fixtures = path.resolve(root, 'fixtures');
var projectRoot = path.resolve(__dirname, '../../..');
var build = path.resolve(projectRoot, 'build');
function rewriteAngularSrc(src, query) {
if (query) {
if (query.build) {
return query.build + '/' + src;
} else if (query.cdn) {
return '//ajax.googleapis.com/ajax/libs/angularjs/' + query.cdn + '/' + src;
}
}
return '/build/' + src;
}
function generateFixture(test, query) {
var indexFile = path.resolve(fixtures, test, 'index.html');
var text = fs.readFileSync(indexFile, 'utf8');
var $$ = $.load(text);
var firstScript = null;
var jquery = null;
var angular = null;
$$('script').each(function(i, script) {
var src = $(script).attr('src');
if (src === 'jquery.js' && jquery === null) jquery = script;
else if (src === 'angular.js' && angular === null) angular = script;
if (firstScript === null) firstScript = script;
if (src) {
var s = util.stat(path.resolve(build, src));
if (s && s.isFile()) {
$(script).attr('src', rewriteAngularSrc(src, query));
} else {
$(script).attr('src', util.rewriteTestFile(test, src));
}
}
});
if (!('jquery' in query) || (/^(0|no|false|off|n)$/i).test(query.jquery)) {
if (jquery) {
$(jquery).remove();
}
} else {
if (!jquery) {
jquery = $.load('<script></script>')('script')[0];
if (firstScript) {
$(firstScript).before(jquery);
} else {
var head = $$('head');
if (head.length) {
head.prepend(jquery);
} else {
$$.root().first().before(jquery);
}
}
}
if (!/^\d+\.\d+.*$/.test(query.jquery)) {
$(jquery).attr('src', '/bower_components/jquery/dist/jquery.js');
} else {
$(jquery).attr('src', '//ajax.googleapis.com/ajax/libs/jquery/' + query.jquery + '/jquery.js');
}
}
return $$.html();
}
module.exports = {
generate: generateFixture
};