forked from tailwindlabs/tailwindcss
-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcli.test.js
122 lines (107 loc) · 4.44 KB
/
cli.test.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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import path from 'path'
import cli from '../src/cli/main'
import * as constants from '../src/constants'
import * as utils from '../src/cli/utils'
import runInTempDirectory from '../jest/runInTempDirectory'
describe('cli', () => {
const inputCssPath = path.resolve(__dirname, 'fixtures/tailwind-input.css')
const customConfigPath = path.resolve(__dirname, 'fixtures/custom-config.js')
const esmPackageJsonPath = path.resolve(__dirname, 'fixtures/esm-package.json')
const defaultConfigFixture = utils.readFile(constants.defaultConfigStubFile)
const simpleConfigFixture = utils.readFile(constants.simpleConfigStubFile)
const defaultPostCssConfigFixture = utils.readFile(constants.defaultPostCssConfigStubFile)
beforeEach(() => {
console.log = jest.fn()
process.stdout.write = jest.fn()
})
describe('init', () => {
it('creates a Tailwind config file', () => {
return runInTempDirectory(() => {
return cli(['init']).then(() => {
expect(utils.readFile(constants.defaultConfigFile)).toEqual(simpleConfigFixture)
})
})
})
it('creates a Tailwind config file and a postcss.config.js file', () => {
return runInTempDirectory(() => {
return cli(['init', '-p']).then(() => {
expect(utils.readFile(constants.defaultConfigFile)).toEqual(simpleConfigFixture)
expect(utils.readFile(constants.defaultPostCssConfigFile)).toEqual(
defaultPostCssConfigFixture
)
})
})
})
it('creates a full Tailwind config file', () => {
return runInTempDirectory(() => {
return cli(['init', '--full']).then(() => {
expect(utils.readFile(constants.defaultConfigFile)).toEqual(
defaultConfigFixture.replace('../colors', 'tailwindcss/colors')
)
})
})
})
it('creates a .cjs Tailwind config file inside of an ESM project', () => {
return runInTempDirectory(() => {
utils.writeFile('package.json', utils.readFile(esmPackageJsonPath))
return cli(['init']).then(() => {
expect(utils.readFile(constants.cjsConfigFile)).toEqual(simpleConfigFixture)
})
})
})
it('creates a .cjs Tailwind config file and a postcss.config.cjs file inside of an ESM project', () => {
return runInTempDirectory(() => {
utils.writeFile('package.json', utils.readFile(esmPackageJsonPath))
return cli(['init', '-p']).then(() => {
expect(utils.readFile(constants.cjsConfigFile)).toEqual(simpleConfigFixture)
expect(utils.readFile(constants.cjsPostCssConfigFile)).toEqual(
defaultPostCssConfigFixture
)
})
})
})
it('creates a Tailwind config file in a custom location', () => {
return runInTempDirectory(() => {
return cli(['init', 'custom.js']).then(() => {
expect(utils.exists('custom.js')).toEqual(true)
})
})
})
})
describe('build', () => {
it('compiles CSS file using an input css file', () => {
return cli(['build', inputCssPath]).then(() => {
expect(process.stdout.write.mock.calls[0][0]).toContain('.example')
})
})
it('compiles CSS file without an input css file', () => {
return cli(['build']).then(() => {
expect(process.stdout.write.mock.calls[0][0]).toContain('normalize.css') // base
expect(process.stdout.write.mock.calls[0][0]).toContain('.container') // components
expect(process.stdout.write.mock.calls[0][0]).toContain('.mx-auto') // utilities
})
})
it('compiles CSS file using custom configuration', () => {
return cli(['build', inputCssPath, '--config', customConfigPath]).then(() => {
expect(process.stdout.write.mock.calls[0][0]).toContain('400px')
})
})
it('creates compiled CSS file', () => {
return runInTempDirectory(() => {
return cli(['build', inputCssPath, '--output', 'output.css']).then(() => {
expect(utils.readFile('output.css')).toContain('.example')
})
})
})
it('compiles CSS file with autoprefixer', () => {
return cli(['build', inputCssPath]).then(() => {
expect(process.stdout.write.mock.calls[0][0]).toContain('-webkit-max-content')
})
})
it('compiles CSS file without autoprefixer', () => {
return cli(['build', inputCssPath, '--no-autoprefixer']).then(() => {
expect(process.stdout.write.mock.calls[0][0]).not.toContain('-webkit-max-content')
})
})
})
})