@@ -95,6 +95,149 @@ describe.each([
95
95
} ,
96
96
)
97
97
98
+ test (
99
+ 'production build — read input from stdin' ,
100
+ {
101
+ fs : {
102
+ 'package.json' : json `{}` ,
103
+ 'pnpm-workspace.yaml' : yaml `
104
+ #
105
+ packages:
106
+ - project-a
107
+ ` ,
108
+ 'project-a/package.json' : json `
109
+ {
110
+ "dependencies": {
111
+ "tailwindcss": "workspace:^",
112
+ "@tailwindcss/cli": "workspace:^"
113
+ }
114
+ }
115
+ ` ,
116
+ 'project-a/index.html' : html `
117
+ <div
118
+ class="underline 2xl:font-bold hocus:underline inverted:flex *:flex **:flex"
119
+ ></div>
120
+ ` ,
121
+ 'project-a/plugin.js' : js `
122
+ module.exports = function ({ addVariant }) {
123
+ addVariant('inverted', '@media (inverted-colors: inverted)')
124
+ addVariant('hocus', ['&:focus', '&:hover'])
125
+ }
126
+ ` ,
127
+ 'project-a/tailwind.config.js' : js `
128
+ module.exports = {
129
+ content: ['../project-b/src/**/*.js'],
130
+ }
131
+ ` ,
132
+ 'project-a/src/index.js' : js `
133
+ const className = "content-['project-a/src/index.js']"
134
+ module.exports = { className }
135
+ ` ,
136
+ 'project-b/src/index.html' : html `
137
+ <div class="flex" />
138
+ ` ,
139
+ 'project-b/src/index.js' : js `
140
+ const className = "content-['project-b/src/index.js']"
141
+ module.exports = { className }
142
+ ` ,
143
+ } ,
144
+ } ,
145
+ async ( { root, fs, exec } ) => {
146
+ await exec (
147
+ `${ command } --input - --output dist/out.css` ,
148
+ { cwd : path . join ( root , 'project-a' ) } ,
149
+ {
150
+ stdin : css `
151
+ @import 'tailwindcss/utilities';
152
+ @config './tailwind.config.js';
153
+ @source '../project-b/src/**/*.html';
154
+ @plugin './plugin.js';
155
+ ` ,
156
+ } ,
157
+ )
158
+
159
+ await fs . expectFileToContain ( 'project-a/dist/out.css' , [
160
+ candidate `underline` ,
161
+ candidate `flex` ,
162
+ candidate `content-['project-a/src/index.js']` ,
163
+ candidate `content-['project-b/src/index.js']` ,
164
+ candidate `inverted:flex` ,
165
+ candidate `hocus:underline` ,
166
+ candidate `*:flex` ,
167
+ candidate `**:flex` ,
168
+ ] )
169
+ } ,
170
+ )
171
+
172
+ test (
173
+ 'production build — (write to stdout)' ,
174
+ {
175
+ fs : {
176
+ 'package.json' : json `{}` ,
177
+ 'pnpm-workspace.yaml' : yaml `
178
+ #
179
+ packages:
180
+ - project-a
181
+ ` ,
182
+ 'project-a/package.json' : json `
183
+ {
184
+ "dependencies": {
185
+ "tailwindcss": "workspace:^",
186
+ "@tailwindcss/cli": "workspace:^"
187
+ }
188
+ }
189
+ ` ,
190
+ 'project-a/index.html' : html `
191
+ <div
192
+ class="underline 2xl:font-bold hocus:underline inverted:flex *:flex **:flex"
193
+ ></div>
194
+ ` ,
195
+ 'project-a/plugin.js' : js `
196
+ module.exports = function ({ addVariant }) {
197
+ addVariant('inverted', '@media (inverted-colors: inverted)')
198
+ addVariant('hocus', ['&:focus', '&:hover'])
199
+ }
200
+ ` ,
201
+ 'project-a/tailwind.config.js' : js `
202
+ module.exports = {
203
+ content: ['../project-b/src/**/*.js'],
204
+ }
205
+ ` ,
206
+ 'project-a/src/index.css' : css `
207
+ @import 'tailwindcss/utilities';
208
+ @config '../tailwind.config.js';
209
+ @source '../../project-b/src/**/*.html';
210
+ @plugin '../plugin.js';
211
+ ` ,
212
+ 'project-a/src/index.js' : js `
213
+ const className = "content-['project-a/src/index.js']"
214
+ module.exports = { className }
215
+ ` ,
216
+ 'project-b/src/index.html' : html `
217
+ <div class="flex" />
218
+ ` ,
219
+ 'project-b/src/index.js' : js `
220
+ const className = "content-['project-b/src/index.js']"
221
+ module.exports = { className }
222
+ ` ,
223
+ } ,
224
+ } ,
225
+ async ( { root, expect, exec } ) => {
226
+ let stdout = await exec ( `${ command } --input src/index.css --output -` , {
227
+ cwd : path . join ( root , 'project-a' ) ,
228
+ } )
229
+
230
+ expect ( stdout ) . toContain ( candidate `underline` )
231
+ expect ( stdout ) . toContain ( candidate `flex` )
232
+ expect ( stdout ) . toContain ( candidate `content-['project-a/src/index.js']` )
233
+ expect ( stdout ) . toContain ( candidate `content-['project-b/src/index.js']` )
234
+ expect ( stdout ) . toContain ( candidate `inverted:flex` )
235
+ expect ( stdout ) . toContain ( candidate `hocus:underline` )
236
+ expect ( stdout ) . toContain ( candidate `*:flex` )
237
+ expect ( stdout ) . toContain ( candidate `**:flex` )
238
+ } ,
239
+ )
240
+
98
241
test (
99
242
'watch mode' ,
100
243
{
0 commit comments