ruby_css_lint 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. data/.document +5 -0
  2. data/Gemfile +13 -0
  3. data/LICENSE.txt +20 -0
  4. data/README.rdoc +19 -0
  5. data/Rakefile +71 -0
  6. data/VERSION +1 -0
  7. data/csslint/CHANGELOG +286 -0
  8. data/csslint/LICENSE +20 -0
  9. data/csslint/README.md +25 -0
  10. data/csslint/build.xml +242 -0
  11. data/csslint/demos/CSSLintDemo.htm +105 -0
  12. data/csslint/demos/demo.css +43 -0
  13. data/csslint/lib/js.jar +0 -0
  14. data/csslint/lib/jshint.js +3963 -0
  15. data/csslint/lib/parserlib.js +6295 -0
  16. data/csslint/lib/yuitest-rhino-cli.js +3955 -0
  17. data/csslint/lib/yuitest.js +4561 -0
  18. data/csslint/npm/package.json +30 -0
  19. data/csslint/release/csslint-node.js +9125 -0
  20. data/csslint/release/csslint-rhino.js +9390 -0
  21. data/csslint/release/csslint-tests.js +1921 -0
  22. data/csslint/release/csslint-worker.js +9148 -0
  23. data/csslint/release/csslint-wsh.js +9477 -0
  24. data/csslint/release/csslint.js +9127 -0
  25. data/csslint/release/npm/cli.js +307 -0
  26. data/csslint/release/npm/lib/csslint-node.js +9125 -0
  27. data/csslint/release/npm/package.json +30 -0
  28. data/csslint/src/cli/common.js +215 -0
  29. data/csslint/src/cli/node.js +87 -0
  30. data/csslint/src/cli/rhino.js +47 -0
  31. data/csslint/src/cli/wsh.js +134 -0
  32. data/csslint/src/core/CSSLint.js +181 -0
  33. data/csslint/src/core/Reporter.js +161 -0
  34. data/csslint/src/core/Util.js +62 -0
  35. data/csslint/src/formatters/checkstyle-xml.js +109 -0
  36. data/csslint/src/formatters/compact.js +59 -0
  37. data/csslint/src/formatters/csslint-xml.js +68 -0
  38. data/csslint/src/formatters/lint-xml.js +69 -0
  39. data/csslint/src/formatters/text.js +64 -0
  40. data/csslint/src/rules/adjoining-classes.js +45 -0
  41. data/csslint/src/rules/box-model.js +93 -0
  42. data/csslint/src/rules/box-sizing.js +28 -0
  43. data/csslint/src/rules/compatible-vendor-prefixes.js +171 -0
  44. data/csslint/src/rules/display-property-grouping.js +117 -0
  45. data/csslint/src/rules/duplicate-background-images.js +37 -0
  46. data/csslint/src/rules/duplicate-properties.js +46 -0
  47. data/csslint/src/rules/empty-rules.js +34 -0
  48. data/csslint/src/rules/errors.js +23 -0
  49. data/csslint/src/rules/fallback-colors.js +67 -0
  50. data/csslint/src/rules/floats.js +36 -0
  51. data/csslint/src/rules/font-faces.js +30 -0
  52. data/csslint/src/rules/font-sizes.js +35 -0
  53. data/csslint/src/rules/gradients.js +69 -0
  54. data/csslint/src/rules/ids.js +50 -0
  55. data/csslint/src/rules/import.js +23 -0
  56. data/csslint/src/rules/important.js +37 -0
  57. data/csslint/src/rules/known-properties.js +29 -0
  58. data/csslint/src/rules/outline-none.js +73 -0
  59. data/csslint/src/rules/overqualified-elements.js +63 -0
  60. data/csslint/src/rules/qualified-headings.js +38 -0
  61. data/csslint/src/rules/regex-selectors.js +44 -0
  62. data/csslint/src/rules/rules-count.js +28 -0
  63. data/csslint/src/rules/shorthand.js +87 -0
  64. data/csslint/src/rules/star-property-hack.js +27 -0
  65. data/csslint/src/rules/text-indent.js +53 -0
  66. data/csslint/src/rules/underscore-property-hack.js +27 -0
  67. data/csslint/src/rules/unique-headings.js +74 -0
  68. data/csslint/src/rules/universal-selector.js +35 -0
  69. data/csslint/src/rules/unqualified-attributes.js +42 -0
  70. data/csslint/src/rules/vendor-prefix.js +143 -0
  71. data/csslint/src/rules/zero-units.js +34 -0
  72. data/csslint/src/worker/Worker.js +26 -0
  73. data/csslint/tests/all-rules.js +64 -0
  74. data/csslint/tests/core/CSSLint.js +22 -0
  75. data/csslint/tests/core/Reporter.js +36 -0
  76. data/csslint/tests/css/width-100.html +76 -0
  77. data/csslint/tests/formatters/checkstyle-xml.js +44 -0
  78. data/csslint/tests/formatters/compact.js +47 -0
  79. data/csslint/tests/formatters/csslint-xml.js +42 -0
  80. data/csslint/tests/formatters/lint-xml.js +43 -0
  81. data/csslint/tests/formatters/text.js +36 -0
  82. data/csslint/tests/rules/adjoining-classes.js +31 -0
  83. data/csslint/tests/rules/box-model.js +211 -0
  84. data/csslint/tests/rules/box-sizing.js +23 -0
  85. data/csslint/tests/rules/compatible-vendor-prefixes.js +56 -0
  86. data/csslint/tests/rules/display-property-grouping.js +213 -0
  87. data/csslint/tests/rules/duplicate-background-images.js +25 -0
  88. data/csslint/tests/rules/duplicate-properties.js +54 -0
  89. data/csslint/tests/rules/empty-rules.js +18 -0
  90. data/csslint/tests/rules/errors.js +17 -0
  91. data/csslint/tests/rules/fallback-colors.js +162 -0
  92. data/csslint/tests/rules/floats.js +35 -0
  93. data/csslint/tests/rules/font-faces.js +28 -0
  94. data/csslint/tests/rules/font-sizes.js +30 -0
  95. data/csslint/tests/rules/gradients.js +60 -0
  96. data/csslint/tests/rules/ids.js +25 -0
  97. data/csslint/tests/rules/import.js +18 -0
  98. data/csslint/tests/rules/important.js +27 -0
  99. data/csslint/tests/rules/known-properties.js +44 -0
  100. data/csslint/tests/rules/outline-none.js +50 -0
  101. data/csslint/tests/rules/overqualified-elements.js +41 -0
  102. data/csslint/tests/rules/qualified-headings.js +19 -0
  103. data/csslint/tests/rules/regex-selectors.js +52 -0
  104. data/csslint/tests/rules/shorthand.js +36 -0
  105. data/csslint/tests/rules/star-property-hack.js +24 -0
  106. data/csslint/tests/rules/text-indent.js +55 -0
  107. data/csslint/tests/rules/underscore-property-hack.js +24 -0
  108. data/csslint/tests/rules/unique-headings.js +47 -0
  109. data/csslint/tests/rules/universal-selector.js +31 -0
  110. data/csslint/tests/rules/unqualified-attributes.js +37 -0
  111. data/csslint/tests/rules/vendor-prefix.js +76 -0
  112. data/csslint/tests/rules/zero-units.js +44 -0
  113. data/csslint/tests/testrunner.htm +138 -0
  114. data/js.jar +0 -0
  115. data/lib/ruby_css_lint.rb +168 -0
  116. data/test/helper.rb +17 -0
  117. data/test/test_ruby_css_lint.rb +7 -0
  118. metadata +240 -0
@@ -0,0 +1,25 @@
1
+ (function(){
2
+
3
+ /*global YUITest, CSSLint*/
4
+ var Assert = YUITest.Assert;
5
+
6
+ YUITest.TestRunner.add(new YUITest.TestCase({
7
+
8
+ name: "Duplicate Background-URL Rule Errors",
9
+
10
+ "duplicate background-image should result in a warning": function(){
11
+ var result = CSSLint.verify(".foo { background-image: url('mega-sprite.png'); } .foofoo { background-image: url('fancy-sprite.png'); } .bar { background-image: url(\"mega-sprite.png\"); } .foobar { background: white url(mega-sprite.png); }", {"duplicate-background-images": 1 });
12
+ Assert.areEqual(2, result.messages.length);
13
+ Assert.areEqual("warning", result.messages[0].type);
14
+ Assert.areEqual("Background image 'mega-sprite.png' was used multiple times, first declared at line 1, col 8.", result.messages[0].message);
15
+ },
16
+
17
+ "duplicate background with url should result in a warning": function(){
18
+ var result = CSSLint.verify(".foo { background: url(mega-sprite.png) repeat-x; } .foofoo { background-image: url('fancy-sprite.png'); } .bar { background: white url(\"mega-sprite.png\") no-repeat left top; } .foobar { background: white url('mega-sprite.png'); }", {"duplicate-background-images": 1 });
19
+ Assert.areEqual(2, result.messages.length);
20
+ Assert.areEqual("warning", result.messages[0].type);
21
+ Assert.areEqual("Background image 'mega-sprite.png' was used multiple times, first declared at line 1, col 8.", result.messages[0].message);
22
+ }
23
+ }));
24
+
25
+ })();
@@ -0,0 +1,54 @@
1
+ (function(){
2
+
3
+ /*global YUITest, CSSLint*/
4
+ var Assert = YUITest.Assert;
5
+
6
+ YUITest.TestRunner.add(new YUITest.TestCase({
7
+
8
+ name: "Duplicate Property Rule Errors",
9
+
10
+ "Duplicate properties back-to-back should not result in a warning": function(){
11
+ var result = CSSLint.verify(".foo { float: left; float: right }", { "duplicate-properties": 1 });
12
+ Assert.areEqual(0, result.messages.length);
13
+ },
14
+
15
+ "Duplicate properties in @font-face back-to-back should not result in a warning": function(){
16
+ var result = CSSLint.verify("@font-face { src: url(foo.svg); src: url(foo1.svg) }", { "duplicate-properties": 1 });
17
+ Assert.areEqual(0, result.messages.length);
18
+ },
19
+
20
+ "Duplicate properties in @page back-to-back should not result in a warning": function(){
21
+ var result = CSSLint.verify("@page :left { margin: 5px; margin: 4px; }", { "duplicate-properties": 1 });
22
+ Assert.areEqual(0, result.messages.length);
23
+ },
24
+
25
+ "Duplicate properties not back-to-back should result in a warning": function(){
26
+ var result = CSSLint.verify(".foo { float: left; margin: 0; float: right }", { "duplicate-properties": 1 });
27
+ Assert.areEqual(1, result.messages.length);
28
+ Assert.areEqual("warning", result.messages[0].type);
29
+ Assert.areEqual("Duplicate property 'float' found.", result.messages[0].message);
30
+ },
31
+
32
+ "Duplicate properties not back-to-back with same values should result in a warning": function(){
33
+ var result = CSSLint.verify(".foo { float: left; margin: 0; float: left }", { "duplicate-properties": 1 });
34
+ Assert.areEqual(1, result.messages.length);
35
+ Assert.areEqual("warning", result.messages[0].type);
36
+ Assert.areEqual("Duplicate property 'float' found.", result.messages[0].message);
37
+ },
38
+
39
+ "Duplicate properties back-to-back with same values should result in a warning": function(){
40
+ var result = CSSLint.verify(".foo { float: left; float: left }", { "duplicate-properties": 1 });
41
+ Assert.areEqual(1, result.messages.length);
42
+ Assert.areEqual("warning", result.messages[0].type);
43
+ Assert.areEqual("Duplicate property 'float' found.", result.messages[0].message);
44
+ },
45
+
46
+ "Duplicate properties in @keyframe rules should not result in a warning": function(){
47
+ var result = CSSLint.verify("@-webkit-keyframes slide_up { from { bottom:-91px; } to { bottom:0; } }", { "duplicate-properties": 1 });
48
+ Assert.areEqual(0, result.messages.length);
49
+ }
50
+
51
+
52
+ }));
53
+
54
+ })();
@@ -0,0 +1,18 @@
1
+ (function(){
2
+
3
+ /*global YUITest, CSSLint*/
4
+ var Assert = YUITest.Assert;
5
+
6
+ YUITest.TestRunner.add(new YUITest.TestCase({
7
+
8
+ name: "Empty Rule Errors",
9
+
10
+ "Empty rule should result in a warning": function(){
11
+ var result = CSSLint.verify("li { }", { "empty-rules": 1 });
12
+ Assert.areEqual(1, result.messages.length);
13
+ Assert.areEqual("warning", result.messages[0].type);
14
+ Assert.areEqual("Rule is empty.", result.messages[0].message);
15
+ }
16
+ }));
17
+
18
+ })();
@@ -0,0 +1,17 @@
1
+ (function(){
2
+
3
+ /*global YUITest, CSSLint*/
4
+ var Assert = YUITest.Assert;
5
+
6
+ YUITest.TestRunner.add(new YUITest.TestCase({
7
+
8
+ name: "Parsing Errors",
9
+
10
+ "Parsing error should result in one parsing error message": function(){
11
+ var result = CSSLint.verify("li { float left;}", { errors: 1 });
12
+ Assert.areEqual(1, result.messages.length);
13
+ Assert.areEqual("error", result.messages[0].type);
14
+ }
15
+ }));
16
+
17
+ })();
@@ -0,0 +1,162 @@
1
+ (function(){
2
+
3
+ /*global YUITest, CSSLint*/
4
+ var Assert = YUITest.Assert;
5
+
6
+ YUITest.TestRunner.add(new YUITest.TestCase({
7
+
8
+ name: "Fallback Colors Rule Errors",
9
+
10
+ "Using only a named color should not result in a warning": function(){
11
+ var result = CSSLint.verify(".hex { color: red; }", { "fallback-colors": 1 });
12
+ Assert.areEqual(0, result.messages.length);
13
+ },
14
+
15
+ "Using only a hex color should not result in a warning": function(){
16
+ var result = CSSLint.verify(".hex { color: #fff; }", { "fallback-colors": 1 });
17
+ Assert.areEqual(0, result.messages.length);
18
+ },
19
+
20
+ "Using only rgb() should not result in a warning": function(){
21
+ var result = CSSLint.verify(".rgb { color: rgb(0, 0, 0); }", { "fallback-colors": 1 });
22
+ Assert.areEqual(0, result.messages.length);
23
+ },
24
+
25
+ "Using only rgba() should result in a warning": function(){
26
+ var result = CSSLint.verify(".rgba { color: rgba(0, 0, 0, 0.5); }", { "fallback-colors": 1 });
27
+ Assert.areEqual(1, result.messages.length);
28
+ Assert.areEqual("warning", result.messages[0].type);
29
+ Assert.areEqual("Fallback color (hex or RGB) should precede RGBA color.", result.messages[0].message);
30
+ },
31
+
32
+ "Using only hsl() should result in a warning": function(){
33
+ var result = CSSLint.verify(".hsl { color: hsl(0, 0%, 0%); }", { "fallback-colors": 1 });
34
+ Assert.areEqual(1, result.messages.length);
35
+ Assert.areEqual("warning", result.messages[0].type);
36
+ Assert.areEqual("Fallback color (hex or RGB) should precede HSL color.", result.messages[0].message);
37
+ },
38
+
39
+ "Using only hsla() should result in a warning": function(){
40
+ var result = CSSLint.verify(".hsla { color: hsla(0, 0%, 0%, 0.5); }", { "fallback-colors": 1 });
41
+ Assert.areEqual(1, result.messages.length);
42
+ Assert.areEqual("warning", result.messages[0].type);
43
+ Assert.areEqual("Fallback color (hex or RGB) should precede HSLA color.", result.messages[0].message);
44
+ },
45
+
46
+ "Using rgba() with a fallback should not result in a warning": function(){
47
+ var result = CSSLint.verify(".rgba { color: #fff; color: rgba(0, 0, 0, 0.5); }", { "fallback-colors": 1 });
48
+ Assert.areEqual(0, result.messages.length);
49
+ },
50
+
51
+ "Using hsl() with a fallback should not result in a warning": function(){
52
+ var result = CSSLint.verify(".hsl { color: #fff; color: hsl(0, 0%, 0%); }", { "fallback-colors": 1 });
53
+ Assert.areEqual(0, result.messages.length);
54
+ },
55
+
56
+ "Using hsla() with a fallback should not result in a warning": function(){
57
+ var result = CSSLint.verify(".hsla { color: #fff; color: hsla(0, 0%, 0%, 0.5); }", { "fallback-colors": 1 });
58
+ Assert.areEqual(0, result.messages.length);
59
+ },
60
+
61
+ "Using rgba() with fallback color afterwards should result in a warning": function(){
62
+ var result = CSSLint.verify(".rgba { color: rgba(0, 0, 0, 0.5); color: #fff; }", { "fallback-colors": 1 });
63
+ Assert.areEqual(1, result.messages.length);
64
+ Assert.areEqual("warning", result.messages[0].type);
65
+ Assert.areEqual("Fallback color (hex or RGB) should precede RGBA color.", result.messages[0].message);
66
+ },
67
+
68
+ "Using hsl() with fallback color afterwards should result in a warning": function(){
69
+ var result = CSSLint.verify(".hsl { color: hsl(0, 0%, 0%); color: #fff; }", { "fallback-colors": 1 });
70
+ Assert.areEqual(1, result.messages.length);
71
+ Assert.areEqual("warning", result.messages[0].type);
72
+ Assert.areEqual("Fallback color (hex or RGB) should precede HSL color.", result.messages[0].message);
73
+ },
74
+
75
+ "Using hsla() with fallback color afterwards should result in a warning": function(){
76
+ var result = CSSLint.verify(".hsla { color: hsla(0, 0%, 0%, 0.5); color: #fff; }", { "fallback-colors": 1 });
77
+ Assert.areEqual(1, result.messages.length);
78
+ Assert.areEqual("warning", result.messages[0].type);
79
+ Assert.areEqual("Fallback color (hex or RGB) should precede HSLA color.", result.messages[0].message);
80
+ },
81
+
82
+
83
+ "Using only a named background-color should not result in a warning": function(){
84
+ var result = CSSLint.verify(".hex { background-color: red; }", { "fallback-colors": 1 });
85
+ Assert.areEqual(0, result.messages.length);
86
+ },
87
+
88
+ "Using only a hex background-color should not result in a warning": function(){
89
+ var result = CSSLint.verify(".hex { background-color: #fff; }", { "fallback-colors": 1 });
90
+ Assert.areEqual(0, result.messages.length);
91
+ },
92
+
93
+ "Using only rgb() background-color should not result in a warning": function(){
94
+ var result = CSSLint.verify(".rgb { background-color: rgb(0, 0, 0); }", { "fallback-colors": 1 });
95
+ Assert.areEqual(0, result.messages.length);
96
+ },
97
+
98
+ "Using only rgba() background-color should result in a warning": function(){
99
+ var result = CSSLint.verify(".rgba { background-color: rgba(0, 0, 0, 0.5); }", { "fallback-colors": 1 });
100
+ Assert.areEqual(1, result.messages.length);
101
+ Assert.areEqual("warning", result.messages[0].type);
102
+ Assert.areEqual("Fallback background-color (hex or RGB) should precede RGBA background-color.", result.messages[0].message);
103
+ },
104
+
105
+ "Using only hsl() background-color should result in a warning": function(){
106
+ var result = CSSLint.verify(".hsl { background-color: hsl(0, 0%, 0%); }", { "fallback-colors": 1 });
107
+ Assert.areEqual(1, result.messages.length);
108
+ Assert.areEqual("warning", result.messages[0].type);
109
+ Assert.areEqual("Fallback background-color (hex or RGB) should precede HSL background-color.", result.messages[0].message);
110
+ },
111
+
112
+ "Using only hsla() background-color should result in a warning": function(){
113
+ var result = CSSLint.verify(".hsla { background-color: hsla(0, 0%, 0%, 0.5); }", { "fallback-colors": 1 });
114
+ Assert.areEqual(1, result.messages.length);
115
+ Assert.areEqual("warning", result.messages[0].type);
116
+ Assert.areEqual("Fallback background-color (hex or RGB) should precede HSLA background-color.", result.messages[0].message);
117
+ },
118
+
119
+ "Using rgba() with a fallback background-color should not result in a warning": function(){
120
+ var result = CSSLint.verify(".rgba { background-color: #fff; background-color: rgba(0, 0, 0, 0.5); }", { "fallback-colors": 1 });
121
+ Assert.areEqual(0, result.messages.length);
122
+ },
123
+
124
+ "Using hsl() with a fallback background-color should not result in a warning": function(){
125
+ var result = CSSLint.verify(".hsl { background-color: #fff; background-color: hsl(0, 0%, 0%); }", { "fallback-colors": 1 });
126
+ Assert.areEqual(0, result.messages.length);
127
+ },
128
+
129
+ "Using hsla() with a fallback background-color should not result in a warning": function(){
130
+ var result = CSSLint.verify(".hsla { background-color: #fff; background-color: hsla(0, 0%, 0%, 0.5); }", { "fallback-colors": 1 });
131
+ Assert.areEqual(0, result.messages.length);
132
+ },
133
+
134
+ "Using rgba() with fallback background-color afterwards should result in a warning": function(){
135
+ var result = CSSLint.verify(".rgba { background-color: rgba(0, 0, 0, 0.5); background-color: #fff; }", { "fallback-colors": 1 });
136
+ Assert.areEqual(1, result.messages.length);
137
+ Assert.areEqual("warning", result.messages[0].type);
138
+ Assert.areEqual("Fallback background-color (hex or RGB) should precede RGBA background-color.", result.messages[0].message);
139
+ },
140
+
141
+ "Using hsl() with fallback background-color afterwards should result in a warning": function(){
142
+ var result = CSSLint.verify(".hsl { background-color: hsl(0, 0%, 0%); background-color: #fff; }", { "fallback-colors": 1 });
143
+ Assert.areEqual(1, result.messages.length);
144
+ Assert.areEqual("warning", result.messages[0].type);
145
+ Assert.areEqual("Fallback background-color (hex or RGB) should precede HSL background-color.", result.messages[0].message);
146
+ },
147
+
148
+ "Using hsla() with fallback background-color afterwards should result in a warning": function(){
149
+ var result = CSSLint.verify(".hsla { background-color: hsla(0, 0%, 0%, 0.5); background-color: #fff; }", { "fallback-colors": 1 });
150
+ Assert.areEqual(1, result.messages.length);
151
+ Assert.areEqual("warning", result.messages[0].type);
152
+ Assert.areEqual("Fallback background-color (hex or RGB) should precede HSLA background-color.", result.messages[0].message);
153
+ }
154
+
155
+
156
+
157
+
158
+
159
+
160
+ }));
161
+
162
+ })();
@@ -0,0 +1,35 @@
1
+ (function(){
2
+
3
+ /*global YUITest, CSSLint*/
4
+ var Assert = YUITest.Assert;
5
+
6
+ YUITest.TestRunner.add(new YUITest.TestCase({
7
+
8
+ name: "Floats Rule Errors",
9
+
10
+ "10 floats should result in a warning": function(){
11
+ var result = CSSLint.verify(".foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; }", { "floats": 1 });
12
+ Assert.areEqual(1, result.messages.length);
13
+ Assert.areEqual("warning", result.messages[0].type);
14
+ Assert.areEqual("Too many floats (10), you're probably using them for layout. Consider using a grid system instead.", result.messages[0].message);
15
+ },
16
+
17
+ "9 floats should not result in a warning": function(){
18
+ var result = CSSLint.verify(".foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; }", { "floats": 1 });
19
+ Assert.areEqual(0, result.messages.length);
20
+ },
21
+
22
+ "11 floats should result in a warning": function(){
23
+ var result = CSSLint.verify(".foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; }", { "floats": 1 });
24
+ Assert.areEqual(1, result.messages.length);
25
+ Assert.areEqual("warning", result.messages[0].type);
26
+ Assert.areEqual("Too many floats (11), you're probably using them for layout. Consider using a grid system instead.", result.messages[0].message);
27
+ },
28
+
29
+ "float: none should not count and therefore should not result in a warning": function(){
30
+ var result = CSSLint.verify(".foo { float: none; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; } .foo { float: left; }", { "floats": 1 });
31
+ Assert.areEqual(0, result.messages.length);
32
+ }
33
+ }));
34
+
35
+ })();
@@ -0,0 +1,28 @@
1
+ (function(){
2
+
3
+ /*global YUITest, CSSLint*/
4
+ var Assert = YUITest.Assert;
5
+
6
+ YUITest.TestRunner.add(new YUITest.TestCase({
7
+
8
+ name: "font-faces Rule Errors",
9
+
10
+ "5 font-faces should result in a warning": function(){
11
+ var result = CSSLint.verify("@font-face{ } @font-face{ } @font-face{ } @font-face{ } @font-face{ }", { "font-faces": 1 });
12
+ Assert.areEqual(0, result.messages.length);
13
+ },
14
+
15
+ "4 font-faces should not result in a warning": function(){
16
+ var result = CSSLint.verify("@font-face{} @font-face{} @font-face{} @font-face{}", { "font-faces": 1 });
17
+ Assert.areEqual(0, result.messages.length);
18
+ },
19
+
20
+ "6 font-faces should result in a warning": function(){
21
+ var result = CSSLint.verify("@font-face{} @font-face{} @font-face{} @font-face{} @font-face{} @font-face{}", { "font-faces": 1 });
22
+ Assert.areEqual(1, result.messages.length);
23
+ Assert.areEqual("warning", result.messages[0].type);
24
+ Assert.areEqual("Too many @font-face declarations (6).", result.messages[0].message);
25
+ }
26
+ }));
27
+
28
+ })();
@@ -0,0 +1,30 @@
1
+ (function(){
2
+
3
+ /*global YUITest, CSSLint*/
4
+ var Assert = YUITest.Assert;
5
+
6
+ YUITest.TestRunner.add(new YUITest.TestCase({
7
+
8
+ name: "font-size Rule Errors",
9
+
10
+ "10 font-sizes should result in a warning": function(){
11
+ var result = CSSLint.verify(".foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } ", {"font-sizes": 1 });
12
+ Assert.areEqual(1, result.messages.length);
13
+ Assert.areEqual("warning", result.messages[0].type);
14
+ Assert.areEqual("Too many font-size declarations (10), abstraction needed.", result.messages[0].message);
15
+ },
16
+
17
+ "9 font-sizes should not result in a warning": function(){
18
+ var result = CSSLint.verify(" .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } ", {"font-sizes": 1 });
19
+ Assert.areEqual(0, result.messages.length);
20
+ },
21
+
22
+ "11 font-sizes should result in a warning": function(){
23
+ var result = CSSLint.verify(".foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } .foo { font-size: 10px; } ", {"font-sizes": 1 });
24
+ Assert.areEqual(1, result.messages.length);
25
+ Assert.areEqual("warning", result.messages[0].type);
26
+ Assert.areEqual("Too many font-size declarations (11), abstraction needed.", result.messages[0].message);
27
+ }
28
+ }));
29
+
30
+ })();
@@ -0,0 +1,60 @@
1
+ (function(){
2
+
3
+ /*global YUITest, CSSLint*/
4
+ var Assert = YUITest.Assert;
5
+
6
+ YUITest.TestRunner.add(new YUITest.TestCase({
7
+
8
+ /*
9
+ background: -moz-linear-gradient(top, #1e5799 , #2989d8 , #207cca , #7db9e8 );
10
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(,#1e5799), color-stop(,#2989d8), color-stop(,#207cca), color-stop(10,#7db9e8));
11
+ background: -webkit-linear-gradient(top, #1e5799 ,#2989d8 ,#207cca ,#7db9e8 );
12
+ background: -o-linear-gradient(top, #1e5799 ,#2989d8 ,#207cca ,#7db9e8 );
13
+ background: -ms-linear-gradient(top, #1e5799 ,#2989d8 ,#207cca ,#7db9e8 );
14
+
15
+ */
16
+
17
+ name: "Gradients Rule Errors",
18
+
19
+ "Only using Mozilla gradients should result in a warning": function(){
20
+ var result = CSSLint.verify(".foo { background: -moz-linear-gradient(top, #1e5799 , #2989d8 , #207cca , #7db9e8 ); }", {"gradients": 1 });
21
+ Assert.areEqual(1, result.messages.length);
22
+ Assert.areEqual("warning", result.messages[0].type);
23
+ Assert.areEqual("Missing vendor-prefixed CSS gradients for Webkit (Safari 5+, Chrome), Old Webkit (Safari 4+, Chrome), Internet Explorer 10+, Opera 11.1+.", result.messages[0].message);
24
+ },
25
+
26
+ "Only using Opera gradients should result in a warning": function(){
27
+ var result = CSSLint.verify(".foo { background: -o-linear-gradient(top, #1e5799 , #2989d8 , #207cca , #7db9e8 ); }", {"gradients": 1 });
28
+ Assert.areEqual(1, result.messages.length);
29
+ Assert.areEqual("warning", result.messages[0].type);
30
+ Assert.areEqual("Missing vendor-prefixed CSS gradients for Firefox 3.6+, Webkit (Safari 5+, Chrome), Old Webkit (Safari 4+, Chrome), Internet Explorer 10+.", result.messages[0].message);
31
+ },
32
+
33
+ "Only using IE gradients should result in a warning": function(){
34
+ var result = CSSLint.verify(".foo { background: -ms-linear-gradient(top, #1e5799 , #2989d8 , #207cca , #7db9e8 ); }", {"gradients": 1 });
35
+ Assert.areEqual(1, result.messages.length);
36
+ Assert.areEqual("warning", result.messages[0].type);
37
+ Assert.areEqual("Missing vendor-prefixed CSS gradients for Firefox 3.6+, Webkit (Safari 5+, Chrome), Old Webkit (Safari 4+, Chrome), Opera 11.1+.", result.messages[0].message);
38
+ },
39
+
40
+ "Only using WebKit gradients should result in a warning": function(){
41
+ var result = CSSLint.verify(".foo { background: -webkit-linear-gradient(top, #1e5799 , #2989d8 , #207cca , #7db9e8 ); }", {"gradients": 1 });
42
+ Assert.areEqual(1, result.messages.length);
43
+ Assert.areEqual("warning", result.messages[0].type);
44
+ Assert.areEqual("Missing vendor-prefixed CSS gradients for Firefox 3.6+, Old Webkit (Safari 4+, Chrome), Internet Explorer 10+, Opera 11.1+.", result.messages[0].message);
45
+ },
46
+
47
+ "Only using old WebKit gradients should result in a warning": function(){
48
+ var result = CSSLint.verify(".foo { background: -webkit-gradient(linear, left top, left bottom, color-stop(10%,#1e5799), color-stop(20%,#2989d8), color-stop(30%,#207cca), color-stop(100%,#7db9e8)); }", {"gradients": 1 });
49
+ Assert.areEqual(1, result.messages.length);
50
+ Assert.areEqual("warning", result.messages[0].type);
51
+ Assert.areEqual("Missing vendor-prefixed CSS gradients for Firefox 3.6+, Webkit (Safari 5+, Chrome), Internet Explorer 10+, Opera 11.1+.", result.messages[0].message);
52
+ },
53
+
54
+ "Using all vendor-prefixed gradients should not result in a warning": function(){
55
+ var result = CSSLint.verify("div.box {\n background: -moz-linear-gradient(top, #1e5799 0%, #7db9e8 100%);\n background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#1e5799), color- stop(100%,#7db9e8));\n background: -webkit-linear-gradient(top, #1e5799 0%,#7db9e8 100%);\n background: -o-linear-gradient(top, #1e5799 0%,#7db9e8 100%);\n background: -ms-linear-gradient(top, #1e5799 0%,#7db9e8 100%); \n}", { "gradients": 1 });
56
+ Assert.areEqual(0, result.messages.length);
57
+ }
58
+ }));
59
+
60
+ })();
@@ -0,0 +1,25 @@
1
+ (function(){
2
+
3
+ /*global YUITest, CSSLint*/
4
+ var Assert = YUITest.Assert;
5
+
6
+ YUITest.TestRunner.add(new YUITest.TestCase({
7
+
8
+ name: "IDs Rule Errors",
9
+
10
+ "Using an ID should result in one warning": function(){
11
+ var result = CSSLint.verify("#foo { float: left;}", { ids: 1 });
12
+ Assert.areEqual(1, result.messages.length);
13
+ Assert.areEqual("warning", result.messages[0].type);
14
+ Assert.areEqual("Don't use IDs in selectors.", result.messages[0].message);
15
+ },
16
+
17
+ "Using multiple IDs should result in one warning": function(){
18
+ var result = CSSLint.verify("#foo #bar { float: left;}", { ids: 1 });
19
+ Assert.areEqual(1, result.messages.length);
20
+ Assert.areEqual("warning", result.messages[0].type);
21
+ Assert.areEqual("2 IDs in the selector, really?", result.messages[0].message);
22
+ }
23
+ }));
24
+
25
+ })();