1 | var tape = require('tape');
|
2 |
|
3 | var browserify = require('browserify');
|
4 | var proxyquire = require('proxyquire');
|
5 | var fs = require('fs');
|
6 | var path = require('path');
|
7 |
|
8 | var casesDir = path.join(__dirname, 'cases');
|
9 | var simpleCaseDir = path.join(casesDir, 'simple');
|
10 | var cssFilesTotal = 1;
|
11 | var cssOutFilename = 'out.css';
|
12 |
|
13 | tape('stream output', function (t) {
|
14 | var fakeFs = {
|
15 | writeFile: function (filename, content, cb) {
|
16 | var expected = fs.readFileSync(path.join(simpleCaseDir, 'expected.css'), 'utf8');
|
17 |
|
18 | t.equal(filename, cssOutFilename, 'correct output filename');
|
19 | t.equal(content, expected, 'output matches expected');
|
20 | cb();
|
21 | }
|
22 | };
|
23 |
|
24 | var cssModulesify = proxyquire('../', {
|
25 | fs: fakeFs
|
26 | });
|
27 |
|
28 | t.plan(cssFilesTotal * 2 + 2);
|
29 |
|
30 | var cssFilesCount = 0;
|
31 | var b = browserify(path.join(simpleCaseDir, 'main.js'));
|
32 |
|
33 | b
|
34 | .plugin(cssModulesify, {
|
35 | rootDir: path.join(simpleCaseDir)
|
36 | })
|
37 | .on('error', t.error)
|
38 | .bundle(function noop () {});
|
39 |
|
40 | b
|
41 | .once('css stream', function (stream) {
|
42 | stream
|
43 | .on('data', function onData (css) {
|
44 | var cssString = css.toString();
|
45 |
|
46 | var cssId = cssString.split('\n')[0].split(' ')[0];
|
47 |
|
48 | t.ok(
|
49 | ++cssFilesCount <= cssFilesTotal
|
50 | , 'emits data for ' + cssId
|
51 | );
|
52 |
|
53 | t.ok(
|
54 | cssString.indexOf('._styles') === 0
|
55 | , 'emits compiled css for ' + cssId
|
56 | );
|
57 | })
|
58 | .on('end', function onEnd () {
|
59 | t.pass('ends the stream');
|
60 |
|
61 | b.bundle(function noop () {});
|
62 |
|
63 | b.once('css stream', function (stream2) {
|
64 | t.ok(stream2, 'registers a second event for a CSS stream');
|
65 | });
|
66 | })
|
67 | .on('error', t.error);
|
68 | });
|
69 | });
|