1 | var dedent = require('dedent')
|
2 | var path = require('path')
|
3 | var tape = require('tape')
|
4 | var tmp = require('tmp')
|
5 | var fs = require('fs')
|
6 |
|
7 | var bankai = require('../')
|
8 |
|
9 | tape('read a manifest', function (assert) {
|
10 | assert.plan(5)
|
11 | var script = dedent`
|
12 | 1 + 1
|
13 | `
|
14 |
|
15 | var manifest = dedent`
|
16 | {
|
17 | "name": "demo",
|
18 | "short_name": "demo",
|
19 | "description": "A very cute app",
|
20 | "start_url": "/",
|
21 | "display": "standalone",
|
22 | "background_color": "#ffc0cb",
|
23 | "theme_color": "#ffc0cb",
|
24 | "icons": [{
|
25 | "src": "/assets/icon.png",
|
26 | "type": "image/png",
|
27 | "sizes": "512x512"
|
28 | }]
|
29 | }
|
30 | `
|
31 |
|
32 | var tmpDir = tmp.dirSync({ dir: path.join(__dirname, '../tmp'), unsafeCleanup: true })
|
33 | assert.on('end', tmpDir.removeCallback)
|
34 | var tmpScriptname = path.join(tmpDir.name, 'index.js')
|
35 | var tmpManifestname = path.join(tmpDir.name, 'manifest.json')
|
36 |
|
37 | fs.writeFileSync(tmpScriptname, script)
|
38 | fs.writeFileSync(tmpManifestname, manifest)
|
39 |
|
40 | var compiler = bankai(tmpScriptname, { watch: false })
|
41 | compiler.manifest(function (err, res) {
|
42 | assert.error(err, 'no error writing manifest')
|
43 | assert.ok(res, 'output exists')
|
44 | assert.ok(res.buffer, 'output buffer exists')
|
45 | assert.ok(res.hash, 'output hash exists')
|
46 | })
|
47 |
|
48 | compiler.scripts('bundle.js', function (err, res) {
|
49 | assert.error(err, 'no error writing script')
|
50 | })
|
51 | })
|
52 |
|
53 | tape('should provide a default manifest', function (assert) {
|
54 | assert.plan(3)
|
55 |
|
56 | var script = dedent`
|
57 | 1 + 1
|
58 | `
|
59 |
|
60 | var tmpDir = tmp.dirSync({ dir: path.join(__dirname, '../tmp'), unsafeCleanup: true })
|
61 | assert.on('end', tmpDir.removeCallback)
|
62 | var tmpScriptname = path.join(tmpDir.name, 'index.js')
|
63 |
|
64 | fs.writeFileSync(tmpScriptname, script)
|
65 |
|
66 | var compiler = bankai(tmpScriptname, { watch: false })
|
67 | compiler.manifest(function (err, res) {
|
68 | assert.error(err, 'no error writing manifest')
|
69 | assert.ok(res, 'output exists')
|
70 | })
|
71 |
|
72 | compiler.scripts('bundle.js', function (err, res) {
|
73 | assert.error(err, 'no error writing script')
|
74 | })
|
75 | })
|
76 |
|
77 | tape('should watch the manifest for changes', function (assert) {
|
78 | assert.on('end', function () {
|
79 | compiler.close()
|
80 | })
|
81 | assert.plan(12)
|
82 |
|
83 | var script = dedent`
|
84 | 1 + 1
|
85 | `
|
86 |
|
87 | var manifest1 = dedent`
|
88 | { "name": "foo" }
|
89 | `
|
90 |
|
91 | var manifest2 = dedent`
|
92 | { "name": "bar" }
|
93 | `
|
94 |
|
95 | var tmpDir = tmp.dirSync({ dir: path.join(__dirname, '../tmp'), unsafeCleanup: true })
|
96 | assert.on('end', tmpDir.removeCallback)
|
97 | var tmpScriptname = path.join(tmpDir.name, 'index.js')
|
98 | var tmpManifestname = path.join(tmpDir.name, 'manifest.json')
|
99 |
|
100 | fs.writeFileSync(tmpScriptname, script)
|
101 | fs.writeFileSync(tmpManifestname, manifest1)
|
102 |
|
103 | var compiler = bankai(tmpScriptname)
|
104 | compiler.manifest(function (err, res) {
|
105 | assert.error(err, 'no error writing manifest')
|
106 | assert.ok(res, 'output exists')
|
107 | assert.ok(res.buffer, 'output buffer exists')
|
108 | assert.ok(res.hash, 'output hash exists')
|
109 | assert.ok(/foo/.exec(String(res.buffer)), 'contains foo')
|
110 |
|
111 | compiler.on('change', function (nodeName) {
|
112 | if (nodeName !== 'manifest') return
|
113 | compiler.manifest(function (err, res) {
|
114 | assert.error(err, 'no error writing manifest')
|
115 | assert.ok(res, 'output exists')
|
116 | assert.ok(res.buffer, 'output buffer exists')
|
117 | assert.ok(res.hash, 'output hash exists')
|
118 | assert.ok(/bar/.exec(String(res.buffer)), 'contains bar')
|
119 | })
|
120 | })
|
121 |
|
122 | fs.writeFile(tmpManifestname, manifest2, function (err) {
|
123 | assert.error(err, 'no error writing manifest 2')
|
124 | })
|
125 | })
|
126 |
|
127 | compiler.scripts('bundle.js', function (err, res) {
|
128 | assert.error(err, 'no error writing script')
|
129 | })
|
130 | })
|