Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Side by Side Diff: utils/tests/css/src/SelectorLiteralTest.dart

Issue 9168008: Enabled CSS tests, added CSS tests to buildbot, fixed tooling with nodejs, and added more tests. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: More coding convention changes (consistency). Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « utils/tests/css/src/ExpressionTest.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #import("../../../css/css.dart"); 5 #import("../../../css/css.dart");
6 #import('../../../../frog/lang.dart', prefix:'lang'); 6 #import('../../../../frog/lang.dart', prefix:'lang');
7 7
8 class SelectorLiteralTest { 8 class SelectorLiteralTest {
9 static final String ERROR = 'CompilerException: <buffer>:'; 9 static final String ERROR = 'CompilerException: <buffer>:';
10 10
(...skipping 24 matching lines...) Expand all
35 cssParseAndValidate('@{#id-number-3}', cssWorld); 35 cssParseAndValidate('@{#id-number-3}', cssWorld);
36 cssParseAndValidate('@{#_privateId}', cssWorld); 36 cssParseAndValidate('@{#_privateId}', cssWorld);
37 37
38 // Valid selectors for private class names (leading underscore). 38 // Valid selectors for private class names (leading underscore).
39 cssParseAndValidate('@{.foobar ._privateClass}', cssWorld); 39 cssParseAndValidate('@{.foobar ._privateClass}', cssWorld);
40 cssParseAndValidate('@{.foobar ._privateClass .xyzzy}', cssWorld); 40 cssParseAndValidate('@{.foobar ._privateClass .xyzzy}', cssWorld);
41 cssParseAndValidate('@{.foobar ._private1 .xyzzy ._private2}', cssWorld); 41 cssParseAndValidate('@{.foobar ._private1 .xyzzy ._private2}', cssWorld);
42 42
43 // Valid selectors for private element IDs (leading underscore). 43 // Valid selectors for private element IDs (leading underscore).
44 cssParseAndValidate('@{._privateClass}', cssWorld); 44 cssParseAndValidate('@{._privateClass}', cssWorld);
45 } catch (var e) { 45 } catch (final e) {
46 // CSS Expressions failed 46 // CSS Expressions failed
47 Expect.fail(e.toString()); 47 Expect.fail(e.toString());
48 } 48 }
49 } 49 }
50 50
51 static void testSimpleClassSelectorFailures() { 51 static void testSimpleClassSelectorFailures() {
52 List<String> knownClasses = ['foobar', 'xyzzy', 'a-story', 'b-story']; 52 List<String> knownClasses = ['foobar', 'xyzzy', 'a-story', 'b-story'];
53 List<String> knownIds = ['id1', 'id2', 'id-number-3']; 53 List<String> knownIds = ['id1', 'id2', 'id-number-3'];
54 54
55 CssWorld cssWorld = new CssWorld(knownClasses, knownIds); 55 CssWorld cssWorld = new CssWorld(knownClasses, knownIds);
56 56
57 // Invalid class name. 57 // Invalid class name.
58 String css = '@{.-foobar}'; 58 String css = '@{.-foobar}';
59 try { 59 try {
60 cssParseAndValidate('${css}', cssWorld); 60 cssParseAndValidate('${css}', cssWorld);
61 Expect.fail("${css} should not succeed."); 61 Expect.fail("${css} should not succeed.");
62 } catch (var e) { 62 } catch (final e) {
63 Expect.equals("${ERROR}1:4: fatal: expected identifier, but found " + 63 Expect.equals("CssSelectorException: Unknown selector name .-foobar",
64 "TokenKind(506)(-)\n${css}\n ^", e.toString()); 64 e.toString());
65 } 65 }
66 66
67 // Error this class name is not known. 67 // Error this class name is not known.
68 css = '@{.foobar1}'; 68 css = '@{.foobar1}';
69 try { 69 try {
70 cssParseAndValidate('${css}', cssWorld); 70 cssParseAndValidate('${css}', cssWorld);
71 Expect.fail("${css} should not succeed."); 71 Expect.fail("${css} should not succeed.");
72 } catch (var e) { 72 } catch (final e) {
73 Expect.equals("CssSelectorException: Unknown selector name .foobar1", 73 Expect.equals("CssSelectorException: Unknown selector name .foobar1",
74 e.toString()); 74 e.toString());
75 } 75 }
76 76
77 // Error if any class name is not known. 77 // Error if any class name is not known.
78 css = '@{.foobar .xyzzy1}'; 78 css = '@{.foobar .xyzzy1}';
79 try { 79 try {
80 cssParseAndValidate('${css}', cssWorld); 80 cssParseAndValidate('${css}', cssWorld);
81 Expect.fail("${css} should not succeed."); 81 Expect.fail("${css} should not succeed.");
82 } catch (var e) { 82 } catch (final e) {
83 Expect.equals("CssSelectorException: Unknown selector name .xyzzy1", 83 Expect.equals("CssSelectorException: Unknown selector name .xyzzy1",
84 e.toString()); 84 e.toString());
85 } 85 }
86 86
87 // Test for invalid class name (can't start with number). 87 // Test for invalid class name (can't start with number).
88 css = '@{.foobar .1a-story .xyzzy}'; 88 css = '@{.foobar .1a-story .xyzzy}';
89 try { 89 try {
90 cssParseAndValidate('${css}', cssWorld); 90 cssParseAndValidate('${css}', cssWorld);
91 Expect.fail("${css} should not succeed."); 91 Expect.fail("${css} should not succeed.");
92 } catch (var e) { 92 } catch (final e) {
93 Expect.equals( 93 Expect.equals("${ERROR}1:11: fatal: expected }, but found double(.1)\n" +
94 "${ERROR}1:12: fatal: expected identifier, but found error(1a)\n" + 94 "${css}\n ^^", e.toString());
95 "${css}\n ^^", e.toString());
96 } 95 }
97 96
98 // element id must be single selector. 97 // element id must be single selector.
99 css = '@{#id1 #id2}'; 98 css = '@{#id1 #id2}';
100 try { 99 try {
101 cssParseAndValidate('${css}', cssWorld); 100 cssParseAndValidate('${css}', cssWorld);
102 Expect.fail("${css} should not succeed."); 101 Expect.fail("${css} should not succeed.");
103 } catch (var e) { 102 } catch (final e) {
104 Expect.equals("CssSelectorException: Use of Id selector must be " + 103 Expect.equals("CssSelectorException: Use of Id selector must be " +
105 "singleton starting at #id2", e.toString()); 104 "singleton starting at #id2", e.toString());
106 } 105 }
107 106
108 // element id must be single selector. 107 // element id must be single selector.
109 css = '@{#id-number-3 .foobar}'; 108 css = '@{#id-number-3 .foobar}';
110 try { 109 try {
111 cssParseAndValidate('${css}', cssWorld); 110 cssParseAndValidate('${css}', cssWorld);
112 Expect.fail("@{#id-number-3 .foobar} should not succeed."); 111 Expect.fail("@{#id-number-3 .foobar} should not succeed.");
113 } catch (var e) { 112 } catch (final e) {
114 // CSS Expressions failed 113 // CSS Expressions failed
115 Expect.equals("CssSelectorException: Can not mix Id selector with "+ 114 Expect.equals("CssSelectorException: Can not mix Id selector with "+
116 "class selector(s). Id selector must be singleton too many " + 115 "class selector(s). Id selector must be singleton too many " +
117 "starting at .foobar", e.toString(), ''); 116 "starting at .foobar", e.toString(), '');
118 } 117 }
119 118
120 // element id must be alone and only one element id. 119 // element id must be alone and only one element id.
121 css = '@{.foobar #id-number-3 #id1}'; 120 css = '@{.foobar #id-number-3 #id1}';
122 try { 121 try {
123 cssParseAndValidate('${css}', cssWorld); 122 cssParseAndValidate('${css}', cssWorld);
124 Expect.fail("${css} should not succeed."); 123 Expect.fail("${css} should not succeed.");
125 } catch (var e) { 124 } catch (final e) {
126 // CSS Expressions failed 125 // CSS Expressions failed
127 Expect.equals("CssSelectorException: Use of Id selector must be " + 126 Expect.equals("CssSelectorException: Use of Id selector must be " +
128 "singleton starting at #id-number-3", e.toString()); 127 "singleton starting at #id-number-3", e.toString());
129 } 128 }
130 129
131 // Namespace selector not valid in @{css_expression} 130 // Namespace selector not valid in @{css_expression}
132 css = '@{foo|div}'; 131 css = '@{foo|div}';
133 try { 132 try {
134 cssParseAndValidate('${css}', cssWorld); 133 cssParseAndValidate('${css}', cssWorld);
135 Expect.fail("${css} should not succeed."); 134 Expect.fail("${css} should not succeed.");
136 } catch (var e) { 135 } catch (final e) {
137 Expect.equals("CssSelectorException: Invalid template selector foo|div", 136 Expect.equals("CssSelectorException: Invalid template selector foo|div",
138 e.toString()); 137 e.toString());
139 } 138 }
140 139
141 // class and element id not allowed together. 140 // class and element id not allowed together.
142 css = '@{.foobar foo|div}'; 141 css = '@{.foobar foo|div}';
143 try { 142 try {
144 cssParseAndValidate('${css}', cssWorld); 143 cssParseAndValidate('${css}', cssWorld);
145 Expect.fail("$css} should not succeed."); 144 Expect.fail("$css} should not succeed.");
146 } catch (var e) { 145 } catch (final e) {
147 Expect.equals("CssSelectorException: Invalid template selector foo|div", 146 Expect.equals("CssSelectorException: Invalid template selector foo|div",
148 e.toString()); 147 e.toString());
149 } 148 }
150 149
151 // Element id and namespace not allowed together. 150 // Element id and namespace not allowed together.
152 css = '@{#id1 foo|div}'; 151 css = '@{#id1 foo|div}';
153 try { 152 try {
154 cssParseAndValidate('${css}', cssWorld); 153 cssParseAndValidate('${css}', cssWorld);
155 Expect.fail("${css} should not succeed."); 154 Expect.fail("${css} should not succeed.");
156 } catch (var e) { 155 } catch (final e) {
157 Expect.equals("CssSelectorException: Invalid template selector foo|div", 156 Expect.equals("CssSelectorException: Invalid template selector foo|div",
158 e.toString()); 157 e.toString());
159 } 158 }
160 159
161 // namespace and element id not allowed together. 160 // namespace and element id not allowed together.
162 css = '@{foo|div #id1}'; 161 css = '@{foo|div #id1}';
163 try { 162 try {
164 cssParseAndValidate('${css}', cssWorld); 163 cssParseAndValidate('${css}', cssWorld);
165 Expect.fail("${css} should not succeed."); 164 Expect.fail("${css} should not succeed.");
166 } catch (var e) { 165 } catch (final e) {
167 Expect.equals("CssSelectorException: Invalid template selector foo|div", 166 Expect.equals("CssSelectorException: Invalid template selector foo|div",
168 e.toString()); 167 e.toString());
169 } 168 }
170 169
171 // namespace / element not allowed. 170 // namespace / element not allowed.
172 css = '@{foo|div .foobar}'; 171 css = '@{foo|div .foobar}';
173 try { 172 try {
174 cssParseAndValidate('${css}', cssWorld); 173 cssParseAndValidate('${css}', cssWorld);
175 Expect.fail("${css} should not succeed."); 174 Expect.fail("${css} should not succeed.");
176 } catch (var e) { 175 } catch (final e) {
177 Expect.equals("CssSelectorException: Invalid template selector foo|div", 176 Expect.equals("CssSelectorException: Invalid template selector foo|div",
178 e.toString()); 177 e.toString());
179 } 178 }
180 179
181 // Combinators not allowed. 180 // Combinators not allowed.
182 css = '@{.foobar > .xyzzy}'; 181 css = '@{.foobar > .xyzzy}';
183 try { 182 try {
184 cssParseAndValidate('${css}', cssWorld); 183 cssParseAndValidate('${css}', cssWorld);
185 Expect.fail("${css} should not succeed."); 184 Expect.fail("${css} should not succeed.");
186 } catch (var e) { 185 } catch (final e) {
187 Expect.equals("CssSelectorException: Selectors can not have " + 186 Expect.equals("CssSelectorException: Selectors can not have " +
188 "combinators (>, +, or ~) before .xyzzy", e.toString()); 187 "combinators (>, +, or ~) before >.xyzzy", e.toString());
189 } 188 }
190 } 189 }
191 190
192 static void testPrivateNameFailures() { 191 static void testPrivateNameFailures() {
193 List<String> knownClasses = ['foobar', 'xyzzy', 'a-story', 'b-story']; 192 List<String> knownClasses = ['foobar', 'xyzzy', 'a-story', 'b-story'];
194 List<String> knownIds = ['id1', 'id2', 'id-number-3']; 193 List<String> knownIds = ['id1', 'id2', 'id-number-3'];
195 194
196 CssWorld cssWorld = new CssWorld(knownClasses, knownIds); 195 CssWorld cssWorld = new CssWorld(knownClasses, knownIds);
197 196
198 // Too many. 197 // Too many.
199 String css = '@{._private #id2}'; 198 String css = '@{._private #id2}';
200 try { 199 try {
201 cssParseAndValidate('${css}', cssWorld); 200 cssParseAndValidate('${css}', cssWorld);
202 Expect.fail("${css} should not succeed."); 201 Expect.fail("${css} should not succeed.");
203 } catch (var e) { 202 } catch (final e) {
204 Expect.equals("CssSelectorException: Use of Id selector must be " + 203 Expect.equals("CssSelectorException: Use of Id selector must be " +
205 "singleton starting at #id2", e.toString()); 204 "singleton starting at #id2", e.toString());
206 } 205 }
207 206
208 // Unknown class foobar2. 207 // Unknown class foobar2.
209 css = '@{._private .foobar2}'; 208 css = '@{._private .foobar2}';
210 try { 209 try {
211 cssParseAndValidate('${css}', cssWorld); 210 cssParseAndValidate('${css}', cssWorld);
212 Expect.fail("${css} should not succeed."); 211 Expect.fail("${css} should not succeed.");
213 } catch (var e) { 212 } catch (final e) {
214 Expect.equals("CssSelectorException: Unknown selector name .foobar2", 213 Expect.equals("CssSelectorException: Unknown selector name .foobar2",
215 e.toString()); 214 e.toString());
216 } 215 }
217 216
218 // Too many element IDs. 217 // Too many element IDs.
219 css = '@{#_privateId #id2}'; 218 css = '@{#_privateId #id2}';
220 try { 219 try {
221 cssParseAndValidate('${css}', cssWorld); 220 cssParseAndValidate('${css}', cssWorld);
222 Expect.fail("${css} should not succeed."); 221 Expect.fail("${css} should not succeed.");
223 } catch (var e) { 222 } catch (final e) {
224 Expect.equals("CssSelectorException: Use of Id selector must be " + 223 Expect.equals("CssSelectorException: Use of Id selector must be " +
225 "singleton starting at #id2", e.toString()); 224 "singleton starting at #id2", e.toString());
226 } 225 }
227 226
228 // Too many element IDs. 227 // Too many element IDs.
229 css = '@{#_privateId1 #_privateId2}'; 228 css = '@{#_privateId1 #_privateId2}';
230 try { 229 try {
231 cssParseAndValidate('${css}', cssWorld); 230 cssParseAndValidate('${css}', cssWorld);
232 Expect.fail("${css} should not succeed."); 231 Expect.fail("${css} should not succeed.");
233 } catch (var e) { 232 } catch (final e) {
234 Expect.equals("CssSelectorException: Use of Id selector must be " + 233 Expect.equals("CssSelectorException: Use of Id selector must be " +
235 "singleton starting at #_privateId2", e.toString()); 234 "singleton starting at #_privateId2", e.toString());
236 } 235 }
237 } 236 }
238 237
239 } 238 }
240 239
241 main() { 240 main() {
242 SelectorLiteralTest.testMain(); 241 SelectorLiteralTest.testMain();
243 } 242 }
OLDNEW
« no previous file with comments | « utils/tests/css/src/ExpressionTest.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698