|
1 | 1 | var parseCssUrls = require('../index');
|
| 2 | +var should = require('should'); |
2 | 3 |
|
3 |
| -var should = require('should') |
4 |
| - describe('Parse css urls', function(){ |
5 |
| - it('should return array of entries from url(...), @import url(...) and @import ...', function(){ |
| 4 | +describe('Parse css urls', function(){ |
| 5 | + it('should return array of entries from url(...), @import url(...) and @import ...', function(){ |
| 6 | + var text = '\ |
| 7 | + @import url("a.css"); \ |
| 8 | + @import url(\'b.css\') tv; \ |
| 9 | + @import url(c.css); \ |
| 10 | + @import "d.css" screen; \ |
| 11 | + @import \'e.css\'; \ |
| 12 | + @import f.css; \ |
| 13 | + .image { \ |
| 14 | + background-image: url ("g.css"); \ |
| 15 | + background-image: url (\'h.css\'); \ |
| 16 | + background-image: url (i.css); \ |
| 17 | + } \ |
| 18 | + '; |
| 19 | + |
| 20 | + var urls = parseCssUrls(text); |
| 21 | + urls.should.be.instanceof(Array).and.have.lengthOf(9); |
| 22 | + urls.should.containEql('a.css'); |
| 23 | + urls.should.containEql('b.css'); |
| 24 | + urls.should.containEql('c.css'); |
| 25 | + urls.should.containEql('d.css'); |
| 26 | + urls.should.containEql('e.css'); |
| 27 | + urls.should.containEql('f.css'); |
| 28 | + urls.should.containEql('g.css'); |
| 29 | + urls.should.containEql('h.css'); |
| 30 | + urls.should.containEql('i.css'); |
| 31 | + }); |
| 32 | + |
| 33 | + it('should exclude duplicated urls', function(){ |
| 34 | + var text = '\ |
| 35 | + @import url("a.css"); \ |
| 36 | + @import a.css; \ |
| 37 | + .image { background: url("a.css"); } \ |
| 38 | + '; |
| 39 | + |
| 40 | + var urls = parseCssUrls(text); |
| 41 | + urls.should.be.instanceof(Array).and.have.lengthOf(1); |
| 42 | + urls.should.containEql('a.css'); |
| 43 | + }); |
| 44 | + |
| 45 | + it('should ignore empty urls', function(){ |
| 46 | + var text = 'div.image { background-image: url(""); } '; |
| 47 | + |
| 48 | + var urls = parseCssUrls(text); |
| 49 | + urls.should.be.instanceof(Array); |
| 50 | + urls.should.have.length(0); |
| 51 | + }); |
| 52 | + |
| 53 | + it('should return empty array if no urls were found', function(){ |
| 54 | + var text = 'no css urls should be found in this text'; |
| 55 | + |
| 56 | + var urls = parseCssUrls(text); |
| 57 | + urls.should.be.instanceof(Array); |
| 58 | + urls.should.have.length(0); |
| 59 | + }); |
| 60 | + |
| 61 | + describe('comments', function() { |
| 62 | + it('should ignore comments and return empty array if there are only comments in text', function(){ |
6 | 63 | var text = '\
|
7 |
| - @import url("a.css"); \ |
8 |
| - @import url(\'b.css\') tv; \ |
9 |
| - @import url(c.css); \ |
10 |
| - @import "d.css" screen; \ |
11 |
| - @import \'e.css\'; \ |
12 |
| - @import f.css; \ |
13 |
| - .image { \ |
14 |
| - background-image: url ("g.css"); \ |
15 |
| - background-image: url (\'h.css\'); \ |
16 |
| - background-image: url (i.css); \ |
17 |
| - } \ |
| 64 | + /* @import url("a.css"); \ |
| 65 | + @import url("b.css"); \ |
| 66 | + .image { background-image: url("bg.png"); } */ \ |
| 67 | + \ |
18 | 68 | ';
|
19 | 69 |
|
20 | 70 | var urls = parseCssUrls(text);
|
21 |
| - urls.should.be.instanceof(Array).and.have.lengthOf(9); |
22 |
| - urls.should.containEql('a.css'); |
23 |
| - urls.should.containEql('b.css'); |
24 |
| - urls.should.containEql('c.css'); |
25 |
| - urls.should.containEql('d.css'); |
26 |
| - urls.should.containEql('e.css'); |
27 |
| - urls.should.containEql('f.css'); |
28 |
| - urls.should.containEql('g.css'); |
29 |
| - urls.should.containEql('h.css'); |
30 |
| - urls.should.containEql('i.css'); |
| 71 | + urls.should.be.instanceof(Array); |
| 72 | + urls.should.have.length(0); |
31 | 73 | });
|
32 | 74 |
|
33 |
| - it('should exclude duplicated urls', function(){ |
| 75 | + it('should ignore comments and return only urls from rules', function(){ |
34 | 76 | var text = '\
|
35 |
| - @import url("a.css"); \ |
36 |
| - @import a.css; \ |
37 |
| - .image { background: url("a.css"); } \ |
| 77 | + /* @import url("a.css"); */ \ |
| 78 | + @import url("b.css"); \ |
38 | 79 | ';
|
39 | 80 |
|
40 | 81 | var urls = parseCssUrls(text);
|
41 |
| - urls.should.be.instanceof(Array).and.have.lengthOf(1); |
42 |
| - urls.should.containEql('a.css'); |
| 82 | + urls.should.be.instanceof(Array); |
| 83 | + urls.should.have.length(1); |
| 84 | + urls.should.containEql('b.css'); |
43 | 85 | });
|
44 | 86 |
|
45 |
| - it('should ignore base64 encoded urls', function(){ |
| 87 | + it('should ignore comments because they may be tricky', function(){ |
46 | 88 | var text = '\
|
47 |
| - div.image { \ |
48 |
| - background-image: url(\'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACXklEQVQ4T82TX0hTYRjGZ8Oryp2j5f5l/iHKdVOjZabzSm1MnNuB0sSI1BiNLqoLt93UVTejSJ1L19of0Qs1aNG6CELmhcacZRmZkIUWhUZBF92EFc/pe7/IdEbXffDy8j7P7zy8nPMdheK/Obn7Tur1Vl9/kaMnWSIFkrubQklDczS5tyXGO82kk6+z+gYFY1vhuuXzzJ7hgqYhuahxQN7VMiwbWuOyoT0hF564yzvNpJNPXF6VN742QJlb5X2kl8LYKQVR0hhFyfEBHHLFcTE6zTvNpJNPHPEsQPk7JFusdE+uDdhmC+NSdAp0qNO8NoB49nD2nwCzJ6WTbqLA0Yfio2FopQjGnrzHnfFFPHy+DK0jguJjYe4TJzI+I6AjpbOHsMPeC40tiCMX4ph78xnG9hG8/fAFNedvQ9MQ5D5xorkjI6CiI6VlgL4hgC013egamcbQ6EsoyjuRmFhAJ5tJJ584kfHrN2CC2tYHbb0fuRY/nr3+iHNdY1DbbsAbnMDswieIlm7uaxi3MYCtpK7vhar6Ciqdg/i68h3pF0uYnF3C1NwyVr79QIVzgPlXQdxfA/Lrr0N5+DIi92bwIL2I7VY/SpvDyK/rwfjMO0QST7lP3MZ3YHY/zmfJQrUPDvcIytpiEGqvQV3n5738dD/Tb3H/V4CH7sHqZ8xSmVz3NVJM1th65c3VXbJgCcg6R0jW2kO8qyw9XCdfI/XLQtnZURawafU2KnMKanP2n0qpDrpeqQ4453mZnPOC6Qzvqxrztxpb00qx0Jr5I2cxQcuqlNWef5SBeTpWxCt+AlBhYa97xG2bAAAAAElFTkSuQmCC\'); \ |
49 |
| - } \ |
| 89 | + /* @import hahahaha */\ |
| 90 | + @import url("a.css"); \ |
50 | 91 | ';
|
51 | 92 |
|
52 | 93 | var urls = parseCssUrls(text);
|
53 | 94 | urls.should.be.instanceof(Array);
|
54 |
| - urls.should.be.empty; |
| 95 | + urls.should.have.length(1); |
| 96 | + urls.should.containEql('a.css'); |
55 | 97 | });
|
| 98 | + }); |
56 | 99 |
|
57 |
| - it('should ignore empty urls', function(){ |
58 |
| - var text = 'div.image { background-image: url(""); } '; |
| 100 | + describe('base64 dataURI', function() { |
| 101 | + it('should ignore base64 encoded images', function(){ |
| 102 | + var text = '\ |
| 103 | + div.image { \ |
| 104 | + background-image: url(\'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAACXklEQVQ4T82TX0hTYRjGZ8Oryp2j5f5l/iHKdVOjZabzSm1MnNuB0sSI1BiNLqoLt93UVTejSJ1L19of0Qs1aNG6CELmhcacZRmZkIUWhUZBF92EFc/pe7/IdEbXffDy8j7P7zy8nPMdheK/Obn7Tur1Vl9/kaMnWSIFkrubQklDczS5tyXGO82kk6+z+gYFY1vhuuXzzJ7hgqYhuahxQN7VMiwbWuOyoT0hF564yzvNpJNPXF6VN742QJlb5X2kl8LYKQVR0hhFyfEBHHLFcTE6zTvNpJNPHPEsQPk7JFusdE+uDdhmC+NSdAp0qNO8NoB49nD2nwCzJ6WTbqLA0Yfio2FopQjGnrzHnfFFPHy+DK0jguJjYe4TJzI+I6AjpbOHsMPeC40tiCMX4ph78xnG9hG8/fAFNedvQ9MQ5D5xorkjI6CiI6VlgL4hgC013egamcbQ6EsoyjuRmFhAJ5tJJ584kfHrN2CC2tYHbb0fuRY/nr3+iHNdY1DbbsAbnMDswieIlm7uaxi3MYCtpK7vhar6Ciqdg/i68h3pF0uYnF3C1NwyVr79QIVzgPlXQdxfA/Lrr0N5+DIi92bwIL2I7VY/SpvDyK/rwfjMO0QST7lP3MZ3YHY/zmfJQrUPDvcIytpiEGqvQV3n5738dD/Tb3H/V4CH7sHqZ8xSmVz3NVJM1th65c3VXbJgCcg6R0jW2kO8qyw9XCdfI/XLQtnZURawafU2KnMKanP2n0qpDrpeqQ4453mZnPOC6Qzvqxrztxpb00qx0Jr5I2cxQcuqlNWef5SBeTpWxCt+AlBhYa97xG2bAAAAAElFTkSuQmCC\'); \ |
| 105 | + } \ |
| 106 | + '; |
59 | 107 |
|
60 | 108 | var urls = parseCssUrls(text);
|
61 | 109 | urls.should.be.instanceof(Array);
|
62 |
| - urls.should.be.empty; |
| 110 | + urls.should.have.length(0); |
63 | 111 | });
|
64 | 112 |
|
65 |
| - it('should return empty array if no urls were found', function(){ |
66 |
| - var text = 'no css urls should be found in this text'; |
| 113 | + it('should ignore base64 encoded fonts', function(){ |
| 114 | + var text = ' \ |
| 115 | + @font-face { \ |
| 116 | + font-family: \'icons\'; \ |
| 117 | + src: url(data:application/vnd.ms-fontobject;charset=utf-8;base64,[BASE_64_STRING]); \ |
| 118 | + src: url(data:application/vnd.ms-fontobject;charset=utf-8;base64,[BASE_64_STRING]) format(\'eot\'), \ |
| 119 | + url(data:application/font-woff;charset=utf-8;base64,[BASE_64_STRING]) format(\'woff\'), \ |
| 120 | + url(data:application/x-font-ttf;charset=utf-8;base64,[BASE_64_STRING]) format(\'truetype\'), \ |
| 121 | + url(data:image/svg+xml;charset=utf-8;base64,[BASE_64_STRING]) format(\'svg\'); \ |
| 122 | + } \ |
| 123 | + '; |
67 | 124 |
|
68 | 125 | var urls = parseCssUrls(text);
|
69 | 126 | urls.should.be.instanceof(Array);
|
70 |
| - urls.should.be.empty; |
| 127 | + urls.should.have.length(0); |
71 | 128 | });
|
72 | 129 | });
|
| 130 | +}); |
0 commit comments