UNPKG

4.69 kBJavaScriptView Raw
1/*
2* iconfont test case
3* author: helondeng
4 */
5var fs = require('fs'),
6 path = require('path'),
7 fis = require('fis3'),
8 _ = fis.util,
9 expect = require('chai').expect,
10 _release = fis.require('command-release/lib/release.js'),
11 _deploy = fis.require('command-release/lib/deploy.js'),
12 iconfont = require('../src/');
13
14var dev,
15 dist;
16
17function release(opts, cb) {
18 opts = opts || {};
19
20 _release(opts, function(error, info) {
21 _deploy(info, cb);
22 });
23}
24
25
26function setFisConfig(iconfont, deploy) {
27 var iconConf = _.merge({
28 // 遍历js时,可以忽略的基础库
29 ignore: ['zepto', 'badjs', 'mod', 'bj-report', 'tools', 'db.js'],
30 // 匹配的icon前缀,即类名是i-xxx
31 classPrefix: 'i-',
32 // 本地svg路径,方便生成字体文件,这里可以使用脚本同步iconfont平台上的svg
33 svgPath: '../svgs',
34 // 字体的产出路径
35 output: 'modules/common/fonts',
36 pseClass: 'before' // 伪类名
37 }, iconfont || {}),
38 deployConf = deploy;
39
40 fis.match('**.{css,scss}', {
41 domain: 'http://7.url.cn/icon'
42 })
43 .match('::image', {
44 domain: 'http://9.url.cn/image'
45 })
46 .match('::package', {
47 postpackager: wrapper(iconConf)
48 })
49 .match('*', {
50 deploy: fis.plugin('local-deliver', deployConf)
51 });
52}
53
54function wrapper(options) {
55 return function(ret, pack, settings, opt) {
56 // settings = _.assign({}, iconfont.defaultOptions);
57 _.assign(settings, options);
58 return iconfont.call(this, ret, pack, settings, opt);
59 }
60}
61
62describe('fis-postpackager-iconfont', function() {
63 var root = path.join(__dirname, 'src');
64
65 fis.project.setProjectRoot(root);
66
67 beforeEach(function() {
68 dev = path.join(__dirname, 'dev');
69 _.del(dev);
70
71 dist = path.join(__dirname, 'dist');
72 _.del(dist);
73
74 });
75
76 it('iconfont:link', function() {
77
78 setFisConfig({}, {
79 to: dev
80 });
81
82 // icon 数量
83 fis.on('iconfont:allIcons', function(allIcons) {
84 expect(allIcons.length).to.equal(3);
85 });
86
87 release({
88 unique: true
89 }, function() {
90 // 文件是否生成
91 expect(fs.existsSync(path.join(dev, 'modules/common/fonts', 'font.css'))).to.be.true;
92 expect(fs.existsSync(path.join(dev, 'modules/common/fonts', 'iconfont.eot'))).to.be.true;
93 expect(fs.existsSync(path.join(dev, 'modules/common/fonts', 'iconfont.svg'))).to.be.true;
94 expect(fs.existsSync(path.join(dev, 'modules/common/fonts', 'iconfont.ttf'))).to.be.true;
95 expect(fs.existsSync(path.join(dev, 'modules/common/fonts', 'iconfont.woff'))).to.be.true;
96
97 // html中是否引入css
98 expect(fs.readFileSync(path.join(dev, 'index.html')).toString().indexOf('http://7.url.cn/icon/modules/common/fonts/font.css') > -1).to.be.true;
99
100 // css中是否生成字体
101 var cssFileContent = fs.readFileSync(path.join(dev, 'modules/common/fonts', 'font.css')).toString();
102 ['add', 'alert', 'back'].forEach(function(icon) {
103 expect(cssFileContent.indexOf('i-' + icon + ':before') > -1).to.be.true;
104 });
105
106 console.log('css link');
107 });
108 });
109
110 it('iconfont:inline', function() {
111 setFisConfig({
112 cssInline: true
113 }, {
114 to: dist
115 });
116
117 // icon 数量
118 fis.on('iconfont:allIcons', function(allIcons) {
119 expect(allIcons.length).to.equal(3);
120 });
121
122 release({
123 unique: true
124 }, function() {
125 // 文件是否生成
126 expect(fs.existsSync(path.join(dist, 'modules/common/fonts', 'font.css'))).to.be.true;
127 expect(fs.existsSync(path.join(dist, 'modules/common/fonts', 'iconfont.eot'))).to.be.true;
128 expect(fs.existsSync(path.join(dist, 'modules/common/fonts', 'iconfont.svg'))).to.be.true;
129 expect(fs.existsSync(path.join(dist, 'modules/common/fonts', 'iconfont.ttf'))).to.be.true;
130 expect(fs.existsSync(path.join(dist, 'modules/common/fonts', 'iconfont.woff'))).to.be.true;
131
132 // html 内嵌字体样式
133 var htmlFileContent = fs.readFileSync(path.join(dist, 'index.html')).toString();
134 ['add', 'alert', 'back'].forEach(function(icon) {
135 expect(htmlFileContent.indexOf('i-' + icon + ':before') > -1).to.be.true;
136 });
137
138 console.log('css inline');
139 });
140 });
141});