1+ import Purgecss from './../src/index'
2+ const root = './__tests__/test_examples/'
3+
4+
5+
6+ describe ( 'purge methods with files and default extractor' , ( ) => {
7+ it ( 'purge correctly with default extractor' , ( ) => {
8+ const purgeCss = new Purgecss ( {
9+ content : [ './__tests__/test_examples/attribute_selector/attribute_selector.html' ] ,
10+ css : [ './__tests__/test_examples/attribute_selector/attribute_selector.css' ]
11+ } )
12+ const received = purgeCss . purge ( ) [ 0 ] . css
13+ expect ( received . includes ( '.ui.grid' ) ) . toBe ( true )
14+ } )
15+
16+ describe ( 'purge correctly (find intact classes) with default extractor' , ( ) => {
17+ it ( 'finds .single' , ( ) => {
18+ const purgeCss = new Purgecss ( {
19+ content : [ `${ root } simple/simple.js` ] ,
20+ css : [ `${ root } simple/simple.css` ]
21+ } )
22+ const result = purgeCss . purge ( ) [ 0 ] . css
23+ expect ( result . includes ( '.single' ) ) . toBe ( true )
24+ } )
25+
26+ it ( 'finds .double-class' , ( ) => {
27+ const purgeCss = new Purgecss ( {
28+ content : [ `${ root } simple/simple.js` ] ,
29+ css : [ `${ root } simple/simple.css` ]
30+ } )
31+ const result = purgeCss . purge ( ) [ 0 ] . css
32+ expect ( result . includes ( '.double-class' ) ) . toBe ( true )
33+ } )
34+
35+ it ( 'can find .triple-simple-class' , ( ) => {
36+ const purgeCss = new Purgecss ( {
37+ content : [ `${ root } simple/simple.js` ] ,
38+ css : [ `${ root } simple/simple.css` ]
39+ } )
40+ const result = purgeCss . purge ( ) [ 0 ] . css
41+ expect ( result . includes ( '.triple-simple-class' ) ) . toBe ( true )
42+ } )
43+ } )
44+
45+ describe ( 'filters out unused selectors' , ( ) => {
46+ it ( 'contains .used-class' , ( ) => {
47+ const purgecss = new Purgecss ( {
48+ content : [ `${ root } remove_unused/remove_unused.js` ] ,
49+ css : [ `${ root } remove_unused/remove_unused.css` ]
50+ } )
51+ const result = purgecss . purge ( ) [ 0 ] . css
52+ expect ( result . includes ( '.used-class' ) ) . toBe ( true )
53+ } )
54+
55+ it ( 'removes .unused-class' , ( ) => {
56+ const purgecss = new Purgecss ( {
57+ content : [ `${ root } remove_unused/remove_unused.js` ] ,
58+ css : [ `${ root } remove_unused/remove_unused.css` ]
59+ } )
60+ const result = purgecss . purge ( ) [ 0 ] . css
61+ expect ( result . includes ( '.unused-class' ) ) . toBe ( false )
62+ } )
63+
64+ it ( 'removes .another-one-not-found' , ( ) => {
65+ const purgecss = new Purgecss ( {
66+ content : [ `${ root } remove_unused/remove_unused.js` ] ,
67+ css : [ `${ root } remove_unused/remove_unused.css` ]
68+ } )
69+ const result = purgecss . purge ( ) [ 0 ] . css
70+ expect ( result . includes ( '.another-one-not-found' ) ) . toBe ( false )
71+ } )
72+ } )
73+
74+ describe ( 'camelCase' , ( ) => {
75+ it ( 'finds testFoo' , ( ) => {
76+ const purgecss = new Purgecss ( {
77+ content : [ `${ root } camel_case/camel_case.js` ] ,
78+ css : [ `${ root } camel_case/camel_case.css` ]
79+ } )
80+ const result = purgecss . purge ( ) [ 0 ] . css
81+ expect ( result . includes ( 'testFoo' ) ) . toBe ( true )
82+ } )
83+
84+ it ( 'finds camelCase' , ( ) => {
85+ const purgecss = new Purgecss ( {
86+ content : [ `${ root } camel_case/camel_case.js` ] ,
87+ css : [ `${ root } camel_case/camel_case.css` ]
88+ } )
89+ const result = purgecss . purge ( ) [ 0 ] . css
90+ expect ( result . includes ( 'camelCase' ) ) . toBe ( true )
91+ } )
92+ } )
93+
94+ describe ( 'wildcard' , ( ) => {
95+ it ( 'finds universal selector' , ( ) => {
96+ const purgecss = new Purgecss ( {
97+ content : [ `${ root } wildcard/wildcard.html` ] ,
98+ css : [ `${ root } wildcard/wildcard.css` ]
99+ } )
100+ const result = purgecss . purge ( ) [ 0 ] . css
101+ expect ( result . includes ( '*' ) ) . toBe ( true )
102+ } )
103+
104+ it ( 'finds :before' , ( ) => {
105+ const purgecss = new Purgecss ( {
106+ content : [ `${ root } wildcard/wildcard.html` ] ,
107+ css : [ `${ root } wildcard/wildcard.css` ]
108+ } )
109+ const result = purgecss . purge ( ) [ 0 ] . css
110+ expect ( result . includes ( 'before' ) ) . toBe ( true )
111+ } )
112+
113+ it ( 'finds scrollbar' , ( ) => {
114+ const purgecss = new Purgecss ( {
115+ content : [ `${ root } wildcard/wildcard.html` ] ,
116+ css : [ `${ root } wildcard/wildcard.css` ]
117+ } )
118+ const result = purgecss . purge ( ) [ 0 ] . css
119+ expect ( result . includes ( 'scrollbar' ) ) . toBe ( true )
120+ } )
121+
122+ it ( 'finds selection' , ( ) => {
123+ const purgecss = new Purgecss ( {
124+ content : [ `${ root } wildcard/wildcard.html` ] ,
125+ css : [ `${ root } wildcard/wildcard.css` ]
126+ } )
127+ const result = purgecss . purge ( ) [ 0 ] . css
128+ expect ( result . includes ( 'selection' ) ) . toBe ( true )
129+ } )
130+
131+ it ( 'finds vertical' , ( ) => {
132+ const purgecss = new Purgecss ( {
133+ content : [ `${ root } wildcard/wildcard.html` ] ,
134+ css : [ `${ root } wildcard/wildcard.css` ]
135+ } )
136+ const result = purgecss . purge ( ) [ 0 ] . css
137+ expect ( result . includes ( 'vertical' ) ) . toBe ( true )
138+ } )
139+
140+ it ( 'finds :root' , ( ) => {
141+ const purgecss = new Purgecss ( {
142+ content : [ `${ root } wildcard/wildcard.html` ] ,
143+ css : [ `${ root } wildcard/wildcard.css` ]
144+ } )
145+ const result = purgecss . purge ( ) [ 0 ] . css
146+ expect ( result . includes ( ':root' ) ) . toBe ( true )
147+ } )
148+ } )
149+
150+ describe ( 'media queries' , ( ) => {
151+ it ( 'finds .media-class' , ( ) => {
152+ const purgecss = new Purgecss ( {
153+ content : [ `${ root } media_queries/media_queries.html` ] ,
154+ css : [ `${ root } media_queries/media_queries.css` ]
155+ } )
156+ const result = purgecss . purge ( ) [ 0 ] . css
157+ expect ( result . includes ( '.media-class' ) ) . toBe ( true )
158+ } )
159+
160+ it ( 'finds .alone' , ( ) => {
161+ const purgecss = new Purgecss ( {
162+ content : [ `${ root } media_queries/media_queries.html` ] ,
163+ css : [ `${ root } media_queries/media_queries.css` ]
164+ } )
165+ const result = purgecss . purge ( ) [ 0 ] . css
166+ expect ( result . includes ( '.alone' ) ) . toBe ( true )
167+ } )
168+
169+ it ( 'finds #id-in-media' , ( ) => {
170+ const purgecss = new Purgecss ( {
171+ content : [ `${ root } media_queries/media_queries.html` ] ,
172+ css : [ `${ root } media_queries/media_queries.css` ]
173+ } )
174+ const result = purgecss . purge ( ) [ 0 ] . css
175+ expect ( result . includes ( '#id-in-media' ) ) . toBe ( true )
176+ } )
177+
178+ it ( 'finds body' , ( ) => {
179+ const purgecss = new Purgecss ( {
180+ content : [ `${ root } media_queries/media_queries.html` ] ,
181+ css : [ `${ root } media_queries/media_queries.css` ]
182+ } )
183+ const result = purgecss . purge ( ) [ 0 ] . css
184+ expect ( result . includes ( 'body' ) ) . toBe ( true )
185+ } )
186+
187+ it ( 'removes .unused-class' , ( ) => {
188+ const purgecss = new Purgecss ( {
189+ content : [ `${ root } media_queries/media_queries.html` ] ,
190+ css : [ `${ root } media_queries/media_queries.css` ]
191+ } )
192+ const result = purgecss . purge ( ) [ 0 ] . css
193+ expect ( result . includes ( '.unused-class' ) ) . toBe ( false )
194+ } )
195+
196+ it ( 'removes the empty media query' , ( ) => {
197+ const purgecss = new Purgecss ( {
198+ content : [ `${ root } media_queries/media_queries.html` ] ,
199+ css : [ `${ root } media_queries/media_queries.css` ]
200+ } )
201+ const result = purgecss . purge ( ) [ 0 ] . css
202+ expect ( result . includes ( '66666px' ) ) . toBe ( false )
203+ } )
204+ } )
205+
206+ describe ( 'delimited' , ( ) => {
207+ it ( 'removes the extra comma' , ( ) => {
208+ const purgecss = new Purgecss ( {
209+ content : [ `${ root } delimited/delimited.html` ] ,
210+ css : [ `${ root } delimited/delimited.css` ]
211+ } )
212+ const result = purgecss . purge ( ) [ 0 ] . css
213+ var commaCount = result . split ( '' ) . reduce ( ( total , chr ) => {
214+ if ( chr === ',' ) {
215+ return total + 1
216+ }
217+
218+ return total
219+ } , 0 )
220+
221+ expect ( commaCount ) . toBe ( 0 )
222+ } )
223+
224+ it ( 'finds h1' , ( ) => {
225+ const purgecss = new Purgecss ( {
226+ content : [ `${ root } delimited/delimited.html` ] ,
227+ css : [ `${ root } delimited/delimited.css` ]
228+ } )
229+ const result = purgecss . purge ( ) [ 0 ] . css
230+ expect ( result . includes ( 'h1' ) ) . toBe ( true )
231+ } )
232+
233+ it ( 'removes p' , ( ) => {
234+ const purgecss = new Purgecss ( {
235+ content : [ `${ root } delimited/delimited.html` ] ,
236+ css : [ `${ root } delimited/delimited.css` ]
237+ } )
238+ const result = purgecss . purge ( ) [ 0 ] . css
239+ expect ( result . includes ( 'p' ) ) . toBe ( false )
240+ } )
241+
242+ it ( 'removes .unused-class-name' , ( ) => {
243+ const purgecss = new Purgecss ( {
244+ content : [ `${ root } delimited/delimited.html` ] ,
245+ css : [ `${ root } delimited/delimited.css` ]
246+ } )
247+ const result = purgecss . purge ( ) [ 0 ] . css
248+ expect ( result . includes ( '.unused-class-name' ) ) . toBe ( false )
249+ } )
250+ } )
251+
252+ describe ( 'pseudo classes' , ( ) => {
253+ it ( 'finds div:before' , ( ) => {
254+ const purgecss = new Purgecss ( {
255+ content : [ `${ root } pseudo_class/pseudo_class.js` ] ,
256+ css : [ `${ root } pseudo_class/pseudo_class.css` ]
257+ } )
258+ const result = purgecss . purge ( ) [ 0 ] . css
259+ expect ( result . includes ( 'div:before' ) ) . toBe ( true )
260+ } )
261+
262+ it ( 'removes row:after' , ( ) => {
263+ const purgecss = new Purgecss ( {
264+ content : [ `${ root } pseudo_class/pseudo_class.js` ] ,
265+ css : [ `${ root } pseudo_class/pseudo_class.css` ]
266+ } )
267+ const result = purgecss . purge ( ) [ 0 ] . css
268+ expect ( result . includes ( 'row:after' ) ) . toBe ( false )
269+ } )
270+ } )
271+
272+ describe ( 'ignore comment' , ( ) => {
273+ it ( 'ignore h1' , ( ) => {
274+ const purgecss = new Purgecss ( {
275+ content : [ `${ root } ignore_comment/ignore_comment.html` ] ,
276+ css : [ `${ root } ignore_comment/ignore_comment.css` ]
277+ } )
278+ const result = purgecss . purge ( ) [ 0 ] . css
279+ expect ( result . includes ( 'h1' ) ) . toBe ( true )
280+ } )
281+ } )
282+
283+ describe ( 'font-face' , ( ) => {
284+ it ( 'keeps font-face' , ( ) => {
285+ const purgecss = new Purgecss ( {
286+ content : [ `${ root } font_face/font_face.html` ] ,
287+ css : [ `${ root } font_face/font_face.css` ]
288+ } )
289+ const result = purgecss . purge ( ) [ 0 ] . css
290+ expect ( result . includes ( 'font-face' ) ) . toBe ( true )
291+ } )
292+ } )
293+
294+ describe ( 'chaining rules' , ( ) => {
295+ it ( 'keep parent1 selector' , ( ) => {
296+ const purgecss = new Purgecss ( {
297+ content : [ `${ root } chaining_rules/index.html` ] ,
298+ css : [ `${ root } chaining_rules/index.css` ]
299+ } )
300+ const result = purgecss . purge ( ) [ 0 ] . css
301+ expect ( result . includes ( 'parent1' ) ) . toBe ( true )
302+ } )
303+ it ( 'remove parent3 selector' , ( ) => {
304+ const purgecss = new Purgecss ( {
305+ content : [ `${ root } chaining_rules/index.html` ] ,
306+ css : [ `${ root } chaining_rules/index.css` ]
307+ } )
308+ const result = purgecss . purge ( ) [ 0 ] . css
309+ expect ( result . includes ( 'parent3' ) ) . toBe ( false )
310+ } )
311+ it ( 'remove d33ef1 selector' , ( ) => {
312+ const purgecss = new Purgecss ( {
313+ content : [ `${ root } chaining_rules/index.html` ] ,
314+ css : [ `${ root } chaining_rules/index.css` ]
315+ } )
316+ const result = purgecss . purge ( ) [ 0 ] . css
317+ expect ( result . includes ( 'd33ef1' ) ) . toBe ( false )
318+ } )
319+ it ( 'remove .parent2' , ( ) => {
320+ const purgecss = new Purgecss ( {
321+ content : [ `${ root } chaining_rules/index.html` ] ,
322+ css : [ `${ root } chaining_rules/index.css` ]
323+ } )
324+ const result = purgecss . purge ( ) [ 0 ] . css
325+ expect ( result . includes ( 'parent2' ) ) . toBe ( false )
326+ } )
327+ } )
328+
329+ } )
0 commit comments