| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 library mixin_test; | 5 library mixin_test; |
| 6 | 6 |
| 7 import 'package:csslib/src/messages.dart'; | 7 import 'package:csslib/src/messages.dart'; |
| 8 import 'package:test/test.dart'; | 8 import 'package:test/test.dart'; |
| 9 | 9 |
| 10 import 'testing.dart'; | 10 import 'testing.dart'; |
| 11 | 11 |
| 12 compileAndValidate(String input, String generated) { | 12 compileAndValidate(String input, String generated) { |
| 13 var errors = <Message>[]; | 13 var errors = <Message>[]; |
| 14 var stylesheet = compileCss(input, errors: errors, opts: options); | 14 var stylesheet = compileCss(input, errors: errors, opts: options); |
| 15 expect(stylesheet != null, true); | 15 expect(stylesheet != null, true); |
| 16 expect(errors.isEmpty, true, reason: errors.toString()); | 16 expect(errors.isEmpty, true, reason: errors.toString()); |
| 17 expect(prettyPrint(stylesheet), generated); | 17 expect(prettyPrint(stylesheet), generated); |
| 18 } | 18 } |
| 19 | 19 |
| 20 compilePolyfillAndValidate(String input, String generated) { | 20 compilePolyfillAndValidate(String input, String generated) { |
| 21 var errors = <Message>[]; | 21 var errors = <Message>[]; |
| 22 var stylesheet = polyFillCompileCss(input, errors: errors, opts: options); | 22 var stylesheet = polyFillCompileCss(input, errors: errors, opts: options); |
| 23 expect(stylesheet != null, true); | 23 expect(stylesheet != null, true); |
| 24 expect(errors.isEmpty, true, reason: errors.toString()); | 24 expect(errors.isEmpty, true, reason: errors.toString()); |
| 25 expect(prettyPrint(stylesheet), generated); | 25 expect(prettyPrint(stylesheet), generated); |
| 26 } | 26 } |
| 27 | 27 |
| 28 void topLevelMixin() { | 28 void topLevelMixin() { |
| 29 compileAndValidate( | 29 compileAndValidate(r''' |
| 30 r''' | |
| 31 @mixin silly-links { | 30 @mixin silly-links { |
| 32 a { | 31 a { |
| 33 color: blue; | 32 color: blue; |
| 34 background-color: red; | 33 background-color: red; |
| 35 } | 34 } |
| 36 } | 35 } |
| 37 | 36 |
| 38 @include silly-links; | 37 @include silly-links; |
| 39 ''', | 38 ''', r''' |
| 40 r''' | |
| 41 a { | 39 a { |
| 42 color: #00f; | 40 color: #00f; |
| 43 background-color: #f00; | 41 background-color: #f00; |
| 44 }'''); | 42 }'''); |
| 45 } | 43 } |
| 46 | 44 |
| 47 void topLevelMixinTwoIncludes() { | 45 void topLevelMixinTwoIncludes() { |
| 48 compileAndValidate( | 46 compileAndValidate(r''' |
| 49 r''' | |
| 50 @mixin a { | 47 @mixin a { |
| 51 a { | 48 a { |
| 52 color: blue; | 49 color: blue; |
| 53 background-color: red; | 50 background-color: red; |
| 54 } | 51 } |
| 55 } | 52 } |
| 56 @mixin b { | 53 @mixin b { |
| 57 span { | 54 span { |
| 58 color: black; | 55 color: black; |
| 59 background-color: orange; | 56 background-color: orange; |
| 60 } | 57 } |
| 61 } | 58 } |
| 62 @include a; | 59 @include a; |
| 63 @include b; | 60 @include b; |
| 64 ''', | 61 ''', r''' |
| 65 r''' | |
| 66 a { | 62 a { |
| 67 color: #00f; | 63 color: #00f; |
| 68 background-color: #f00; | 64 background-color: #f00; |
| 69 } | 65 } |
| 70 span { | 66 span { |
| 71 color: #000; | 67 color: #000; |
| 72 background-color: #ffa500; | 68 background-color: #ffa500; |
| 73 }'''); | 69 }'''); |
| 74 } | 70 } |
| 75 | 71 |
| 76 /** Tests top-level mixins that includes another mixin. */ | 72 /** Tests top-level mixins that includes another mixin. */ |
| 77 void topLevelMixinMultiRulesets() { | 73 void topLevelMixinMultiRulesets() { |
| 78 compileAndValidate( | 74 compileAndValidate(r''' |
| 79 r''' | |
| 80 @mixin a { | 75 @mixin a { |
| 81 a { | 76 a { |
| 82 color: blue; | 77 color: blue; |
| 83 background-color: red; | 78 background-color: red; |
| 84 } | 79 } |
| 85 } | 80 } |
| 86 @mixin b { | 81 @mixin b { |
| 87 #foo-id { | 82 #foo-id { |
| 88 border-top: 1px solid red; | 83 border-top: 1px solid red; |
| 89 border-bottom: 2px solid green; | 84 border-bottom: 2px solid green; |
| 90 } | 85 } |
| 91 } | 86 } |
| 92 @mixin c { | 87 @mixin c { |
| 93 span { | 88 span { |
| 94 color: black; | 89 color: black; |
| 95 background-color: orange; | 90 background-color: orange; |
| 96 } | 91 } |
| 97 @include b; | 92 @include b; |
| 98 } | 93 } |
| 99 @include a; | 94 @include a; |
| 100 @include c; | 95 @include c; |
| 101 ''', | 96 ''', r''' |
| 102 r''' | |
| 103 a { | 97 a { |
| 104 color: #00f; | 98 color: #00f; |
| 105 background-color: #f00; | 99 background-color: #f00; |
| 106 } | 100 } |
| 107 span { | 101 span { |
| 108 color: #000; | 102 color: #000; |
| 109 background-color: #ffa500; | 103 background-color: #ffa500; |
| 110 } | 104 } |
| 111 #foo-id { | 105 #foo-id { |
| 112 border-top: 1px solid #f00; | 106 border-top: 1px solid #f00; |
| 113 border-bottom: 2px solid #008000; | 107 border-bottom: 2px solid #008000; |
| 114 }'''); | 108 }'''); |
| 115 } | 109 } |
| 116 | 110 |
| 117 void topLevelMixinDeeplyNestedRulesets() { | 111 void topLevelMixinDeeplyNestedRulesets() { |
| 118 compileAndValidate( | 112 compileAndValidate(r''' |
| 119 r''' | |
| 120 @mixin a { | 113 @mixin a { |
| 121 a { | 114 a { |
| 122 color: blue; | 115 color: blue; |
| 123 background-color: red; | 116 background-color: red; |
| 124 } | 117 } |
| 125 } | 118 } |
| 126 @mixin b { | 119 @mixin b { |
| 127 #foo-id { | 120 #foo-id { |
| 128 border-top: 1px solid red; | 121 border-top: 1px solid red; |
| 129 border-bottom: 2px solid green; | 122 border-bottom: 2px solid green; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 149 @mixin c { | 142 @mixin c { |
| 150 @include a; | 143 @include a; |
| 151 span { | 144 span { |
| 152 color: black; | 145 color: black; |
| 153 background-color: orange; | 146 background-color: orange; |
| 154 } | 147 } |
| 155 @include b; | 148 @include b; |
| 156 @include d; | 149 @include d; |
| 157 } | 150 } |
| 158 @include c; | 151 @include c; |
| 159 ''', | 152 ''', r''' |
| 160 r''' | |
| 161 a { | 153 a { |
| 162 color: #00f; | 154 color: #00f; |
| 163 background-color: #f00; | 155 background-color: #f00; |
| 164 } | 156 } |
| 165 span { | 157 span { |
| 166 color: #000; | 158 color: #000; |
| 167 background-color: #ffa500; | 159 background-color: #ffa500; |
| 168 } | 160 } |
| 169 #foo-id { | 161 #foo-id { |
| 170 border-top: 1px solid #f00; | 162 border-top: 1px solid #f00; |
| 171 border-bottom: 2px solid #008000; | 163 border-bottom: 2px solid #008000; |
| 172 } | 164 } |
| 173 a:hover { | 165 a:hover { |
| 174 cursor: arrow; | 166 cursor: arrow; |
| 175 } | 167 } |
| 176 #split-bar:visited { | 168 #split-bar:visited { |
| 177 color: #808080; | 169 color: #808080; |
| 178 } | 170 } |
| 179 #split-bar div { | 171 #split-bar div { |
| 180 border: 1px solid #d3d3d3; | 172 border: 1px solid #d3d3d3; |
| 181 }'''); | 173 }'''); |
| 182 } | 174 } |
| 183 | 175 |
| 184 /** Tests selector groups and other combinators. */ | 176 /** Tests selector groups and other combinators. */ |
| 185 void topLevelMixinSelectors() { | 177 void topLevelMixinSelectors() { |
| 186 compileAndValidate( | 178 compileAndValidate(r''' |
| 187 r''' | |
| 188 @mixin a { | 179 @mixin a { |
| 189 a, b { | 180 a, b { |
| 190 color: blue; | 181 color: blue; |
| 191 background-color: red; | 182 background-color: red; |
| 192 } | 183 } |
| 193 div > span { | 184 div > span { |
| 194 color: black; | 185 color: black; |
| 195 background-color: orange; | 186 background-color: orange; |
| 196 } | 187 } |
| 197 } | 188 } |
| 198 | 189 |
| 199 @include a; | 190 @include a; |
| 200 ''', | 191 ''', r''' |
| 201 r''' | |
| 202 a, b { | 192 a, b { |
| 203 color: #00f; | 193 color: #00f; |
| 204 background-color: #f00; | 194 background-color: #f00; |
| 205 } | 195 } |
| 206 div > span { | 196 div > span { |
| 207 color: #000; | 197 color: #000; |
| 208 background-color: #ffa500; | 198 background-color: #ffa500; |
| 209 }'''); | 199 }'''); |
| 210 } | 200 } |
| 211 | 201 |
| 212 void declSimpleMixin() { | 202 void declSimpleMixin() { |
| 213 compileAndValidate( | 203 compileAndValidate(r''' |
| 214 r''' | |
| 215 @mixin div-border { | 204 @mixin div-border { |
| 216 border: 2px dashed red; | 205 border: 2px dashed red; |
| 217 } | 206 } |
| 218 div { | 207 div { |
| 219 @include div-border; | 208 @include div-border; |
| 220 } | 209 } |
| 221 ''', | 210 ''', r''' |
| 222 r''' | |
| 223 div { | 211 div { |
| 224 border: 2px dashed #f00; | 212 border: 2px dashed #f00; |
| 225 }'''); | 213 }'''); |
| 226 } | 214 } |
| 227 | 215 |
| 228 void declMixinTwoIncludes() { | 216 void declMixinTwoIncludes() { |
| 229 compileAndValidate( | 217 compileAndValidate(r''' |
| 230 r''' | |
| 231 @mixin div-border { | 218 @mixin div-border { |
| 232 border: 2px dashed red; | 219 border: 2px dashed red; |
| 233 } | 220 } |
| 234 @mixin div-color { | 221 @mixin div-color { |
| 235 color: blue; | 222 color: blue; |
| 236 } | 223 } |
| 237 div { | 224 div { |
| 238 @include div-border; | 225 @include div-border; |
| 239 @include div-color; | 226 @include div-color; |
| 240 } | 227 } |
| 241 ''', | 228 ''', r''' |
| 242 r''' | |
| 243 div { | 229 div { |
| 244 border: 2px dashed #f00; | 230 border: 2px dashed #f00; |
| 245 color: #00f; | 231 color: #00f; |
| 246 }'''); | 232 }'''); |
| 247 } | 233 } |
| 248 | 234 |
| 249 void declMixinNestedIncludes() { | 235 void declMixinNestedIncludes() { |
| 250 compileAndValidate( | 236 compileAndValidate(r''' |
| 251 r''' | |
| 252 @mixin div-border { | 237 @mixin div-border { |
| 253 border: 2px dashed red; | 238 border: 2px dashed red; |
| 254 } | 239 } |
| 255 @mixin div-padding { | 240 @mixin div-padding { |
| 256 padding: .5em; | 241 padding: .5em; |
| 257 } | 242 } |
| 258 @mixin div-margin { | 243 @mixin div-margin { |
| 259 margin: 5px; | 244 margin: 5px; |
| 260 } | 245 } |
| 261 @mixin div-color { | 246 @mixin div-color { |
| 262 @include div-padding; | 247 @include div-padding; |
| 263 color: blue; | 248 color: blue; |
| 264 @include div-margin; | 249 @include div-margin; |
| 265 } | 250 } |
| 266 div { | 251 div { |
| 267 @include div-border; | 252 @include div-border; |
| 268 @include div-color; | 253 @include div-color; |
| 269 } | 254 } |
| 270 ''', | 255 ''', r''' |
| 271 r''' | |
| 272 div { | 256 div { |
| 273 border: 2px dashed #f00; | 257 border: 2px dashed #f00; |
| 274 padding: .5em; | 258 padding: .5em; |
| 275 color: #00f; | 259 color: #00f; |
| 276 margin: 5px; | 260 margin: 5px; |
| 277 }'''); | 261 }'''); |
| 278 } | 262 } |
| 279 | 263 |
| 280 void declMixinDeeperNestedIncludes() { | 264 void declMixinDeeperNestedIncludes() { |
| 281 compileAndValidate( | 265 compileAndValidate(r''' |
| 282 r''' | |
| 283 @mixin div-border { | 266 @mixin div-border { |
| 284 border: 2px dashed red; | 267 border: 2px dashed red; |
| 285 } | 268 } |
| 286 @mixin div-padding { | 269 @mixin div-padding { |
| 287 padding: .5em; | 270 padding: .5em; |
| 288 } | 271 } |
| 289 @mixin div-margin { | 272 @mixin div-margin { |
| 290 margin: 5px; | 273 margin: 5px; |
| 291 } | 274 } |
| 292 @mixin div-color { | 275 @mixin div-color { |
| 293 @include div-padding; | 276 @include div-padding; |
| 294 @include div-margin; | 277 @include div-margin; |
| 295 } | 278 } |
| 296 div { | 279 div { |
| 297 @include div-border; | 280 @include div-border; |
| 298 @include div-color; | 281 @include div-color; |
| 299 } | 282 } |
| 300 ''', | 283 ''', r''' |
| 301 r''' | |
| 302 div { | 284 div { |
| 303 border: 2px dashed #f00; | 285 border: 2px dashed #f00; |
| 304 padding: .5em; | 286 padding: .5em; |
| 305 margin: 5px; | 287 margin: 5px; |
| 306 }'''); | 288 }'''); |
| 307 } | 289 } |
| 308 | 290 |
| 309 void mixinArg() { | 291 void mixinArg() { |
| 310 compileAndValidate( | 292 compileAndValidate(r''' |
| 311 r''' | |
| 312 @mixin div-border-1 { | 293 @mixin div-border-1 { |
| 313 border: 2px dashed red; | 294 border: 2px dashed red; |
| 314 } | 295 } |
| 315 @mixin div-border-2() { | 296 @mixin div-border-2() { |
| 316 border: 22px solid blue; | 297 border: 22px solid blue; |
| 317 } | 298 } |
| 318 @mixin div-left(@dist) { | 299 @mixin div-left(@dist) { |
| 319 margin-left: @dist; | 300 margin-left: @dist; |
| 320 } | 301 } |
| 321 @mixin div-right(var-margin) { | 302 @mixin div-right(var-margin) { |
| 322 margin-right: var(margin); | 303 margin-right: var(margin); |
| 323 } | 304 } |
| 324 div-1 { | 305 div-1 { |
| 325 @include div-left(10px); | 306 @include div-left(10px); |
| 326 @include div-right(100px); | 307 @include div-right(100px); |
| 327 @include div-border-1; | 308 @include div-border-1; |
| 328 } | 309 } |
| 329 div-2 { | 310 div-2 { |
| 330 @include div-left(20em); | 311 @include div-left(20em); |
| 331 @include div-right(5in); | 312 @include div-right(5in); |
| 332 @include div-border-2(); | 313 @include div-border-2(); |
| 333 } | 314 } |
| 334 div-3 { | 315 div-3 { |
| 335 @include div-border-1(); | 316 @include div-border-1(); |
| 336 } | 317 } |
| 337 div-4 { | 318 div-4 { |
| 338 @include div-border-2; | 319 @include div-border-2; |
| 339 } | 320 } |
| 340 ''', | 321 ''', r''' |
| 341 r''' | |
| 342 div-1 { | 322 div-1 { |
| 343 margin-left: 10px; | 323 margin-left: 10px; |
| 344 margin-right: 100px; | 324 margin-right: 100px; |
| 345 border: 2px dashed #f00; | 325 border: 2px dashed #f00; |
| 346 } | 326 } |
| 347 div-2 { | 327 div-2 { |
| 348 margin-left: 20em; | 328 margin-left: 20em; |
| 349 margin-right: 5in; | 329 margin-right: 5in; |
| 350 border: 22px solid #00f; | 330 border: 22px solid #00f; |
| 351 } | 331 } |
| 352 div-3 { | 332 div-3 { |
| 353 border: 2px dashed #f00; | 333 border: 2px dashed #f00; |
| 354 } | 334 } |
| 355 div-4 { | 335 div-4 { |
| 356 border: 22px solid #00f; | 336 border: 22px solid #00f; |
| 357 }'''); | 337 }'''); |
| 358 } | 338 } |
| 359 | 339 |
| 360 void mixinArgs() { | 340 void mixinArgs() { |
| 361 compileAndValidate( | 341 compileAndValidate(r''' |
| 362 r''' | |
| 363 @mixin box-shadow(@shadows...) { | 342 @mixin box-shadow(@shadows...) { |
| 364 -moz-box-shadow: @shadows; | 343 -moz-box-shadow: @shadows; |
| 365 -webkit-box-shadow: @shadows; | 344 -webkit-box-shadow: @shadows; |
| 366 box-shadow: var(shadows); | 345 box-shadow: var(shadows); |
| 367 } | 346 } |
| 368 | 347 |
| 369 .shadows { | 348 .shadows { |
| 370 @include box-shadow(0px 4px 5px #666, 2px 6px 10px #999); | 349 @include box-shadow(0px 4px 5px #666, 2px 6px 10px #999); |
| 371 }''', | 350 }''', r''' |
| 372 r''' | |
| 373 .shadowed { | 351 .shadowed { |
| 374 -moz-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999; | 352 -moz-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999; |
| 375 -webkit-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999; | 353 -webkit-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999; |
| 376 box-shadow: 0px 4px 5px #666, 2px 6px 10px #999; | 354 box-shadow: 0px 4px 5px #666, 2px 6px 10px #999; |
| 377 } | 355 } |
| 378 '''); | 356 '''); |
| 379 } | 357 } |
| 380 | 358 |
| 381 void mixinManyArgs() { | 359 void mixinManyArgs() { |
| 382 compileAndValidate( | 360 compileAndValidate(r''' |
| 383 r''' | |
| 384 @mixin border(@border-values) { | 361 @mixin border(@border-values) { |
| 385 border: @border-values | 362 border: @border-values |
| 386 } | 363 } |
| 387 | 364 |
| 388 .primary { | 365 .primary { |
| 389 @include border(3px solid green); | 366 @include border(3px solid green); |
| 390 } | 367 } |
| 391 ''', | 368 ''', r''' |
| 392 r''' | |
| 393 .primary { | 369 .primary { |
| 394 border: 3px solid #008000; | 370 border: 3px solid #008000; |
| 395 }'''); | 371 }'''); |
| 396 | 372 |
| 397 compileAndValidate( | 373 compileAndValidate(r''' |
| 398 r''' | |
| 399 @mixin setup(@border-color, @border-style, @border-size, @color) { | 374 @mixin setup(@border-color, @border-style, @border-size, @color) { |
| 400 border: @border-size @border-style @border-color; | 375 border: @border-size @border-style @border-color; |
| 401 color: @color; | 376 color: @color; |
| 402 } | 377 } |
| 403 | 378 |
| 404 .primary { | 379 .primary { |
| 405 @include setup(red, solid, 5px, blue); | 380 @include setup(red, solid, 5px, blue); |
| 406 } | 381 } |
| 407 ''', | 382 ''', r''' |
| 408 r''' | |
| 409 .primary { | 383 .primary { |
| 410 border: 5px solid #f00; | 384 border: 5px solid #f00; |
| 411 color: #00f; | 385 color: #00f; |
| 412 }'''); | 386 }'''); |
| 413 | 387 |
| 414 // Test passing a declaration that is multiple parameters. | 388 // Test passing a declaration that is multiple parameters. |
| 415 compileAndValidate( | 389 compileAndValidate(r''' |
| 416 r''' | |
| 417 @mixin colors(@text, @background, @border) { | 390 @mixin colors(@text, @background, @border) { |
| 418 color: @text; | 391 color: @text; |
| 419 background-color: @background; | 392 background-color: @background; |
| 420 border-color: @border; | 393 border-color: @border; |
| 421 } | 394 } |
| 422 | 395 |
| 423 @values: #ff0000, #00ff00, #0000ff; | 396 @values: #ff0000, #00ff00, #0000ff; |
| 424 .primary { | 397 .primary { |
| 425 @include colors(@values); | 398 @include colors(@values); |
| 426 } | 399 } |
| 427 ''', | 400 ''', r''' |
| 428 r''' | |
| 429 var-values: #f00, #0f0, #00f; | 401 var-values: #f00, #0f0, #00f; |
| 430 | 402 |
| 431 .primary { | 403 .primary { |
| 432 color: #f00; | 404 color: #f00; |
| 433 background-color: #0f0; | 405 background-color: #0f0; |
| 434 border-color: #00f; | 406 border-color: #00f; |
| 435 }'''); | 407 }'''); |
| 436 | 408 |
| 437 compilePolyfillAndValidate( | 409 compilePolyfillAndValidate(r''' |
| 438 r''' | |
| 439 @mixin colors(@text, @background, @border) { | 410 @mixin colors(@text, @background, @border) { |
| 440 color: @text; | 411 color: @text; |
| 441 background-color: @background; | 412 background-color: @background; |
| 442 border-color: @border; | 413 border-color: @border; |
| 443 } | 414 } |
| 444 | 415 |
| 445 @values: #ff0000, #00ff00, #0000ff; | 416 @values: #ff0000, #00ff00, #0000ff; |
| 446 .primary { | 417 .primary { |
| 447 @include colors(@values); | 418 @include colors(@values); |
| 448 } | 419 } |
| 449 ''', | 420 ''', r''' |
| 450 r''' | |
| 451 .primary { | 421 .primary { |
| 452 color: #f00; | 422 color: #f00; |
| 453 background-color: #0f0; | 423 background-color: #0f0; |
| 454 border-color: #00f; | 424 border-color: #00f; |
| 455 }'''); | 425 }'''); |
| 456 } | 426 } |
| 457 | 427 |
| 458 void badDeclarationInclude() { | 428 void badDeclarationInclude() { |
| 459 final errors = <Message>[]; | 429 final errors = <Message>[]; |
| 460 final input = r''' | 430 final input = r''' |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 expect(stylesheet != null, true); | 553 expect(stylesheet != null, true); |
| 584 expect(errors.isNotEmpty, true); | 554 expect(errors.isNotEmpty, true); |
| 585 expect(errors.length, 1, reason: errors.toString()); | 555 expect(errors.length, 1, reason: errors.toString()); |
| 586 var error = errors[0]; | 556 var error = errors[0]; |
| 587 expect(error.message, 'Undefined mixin b'); | 557 expect(error.message, 'Undefined mixin b'); |
| 588 expect(error.span.start.line, 1); | 558 expect(error.span.start.line, 1); |
| 589 expect(error.span.start.offset, 14); | 559 expect(error.span.start.offset, 14); |
| 590 } | 560 } |
| 591 | 561 |
| 592 void includeGrammar() { | 562 void includeGrammar() { |
| 593 compileAndValidate( | 563 compileAndValidate(r''' |
| 594 r''' | |
| 595 @mixin a { | 564 @mixin a { |
| 596 foo { color: red } | 565 foo { color: red } |
| 597 } | 566 } |
| 598 | 567 |
| 599 @mixin b { | 568 @mixin b { |
| 600 @include a; | 569 @include a; |
| 601 @include a; | 570 @include a; |
| 602 } | 571 } |
| 603 | 572 |
| 604 @include b; | 573 @include b; |
| 605 ''', | 574 ''', r''' |
| 606 r''' | |
| 607 foo { | 575 foo { |
| 608 color: #f00; | 576 color: #f00; |
| 609 } | 577 } |
| 610 foo { | 578 foo { |
| 611 color: #f00; | 579 color: #f00; |
| 612 }'''); | 580 }'''); |
| 613 | 581 |
| 614 compileAndValidate( | 582 compileAndValidate(r''' |
| 615 r''' | |
| 616 @mixin a { | 583 @mixin a { |
| 617 color: red | 584 color: red |
| 618 } | 585 } |
| 619 | 586 |
| 620 foo { | 587 foo { |
| 621 @include a; | 588 @include a; |
| 622 @include a | 589 @include a |
| 623 } | 590 } |
| 624 ''', | 591 ''', r''' |
| 625 r''' | |
| 626 foo { | 592 foo { |
| 627 color: #f00; | 593 color: #f00; |
| 628 color: #f00; | 594 color: #f00; |
| 629 }'''); | 595 }'''); |
| 630 | 596 |
| 631 var errors = <Message>[]; | 597 var errors = <Message>[]; |
| 632 var input = r''' | 598 var input = r''' |
| 633 @mixin a { | 599 @mixin a { |
| 634 foo { color: red } | 600 foo { color: red } |
| 635 } | 601 } |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 700 test('multiple args and var decls as args', mixinManyArgs); | 666 test('multiple args and var decls as args', mixinManyArgs); |
| 701 }); | 667 }); |
| 702 | 668 |
| 703 group('Mixin warnings', () { | 669 group('Mixin warnings', () { |
| 704 test('undefined top-level', undefinedTopLevel); | 670 test('undefined top-level', undefinedTopLevel); |
| 705 test('undefined declaration', undefinedDeclaration); | 671 test('undefined declaration', undefinedDeclaration); |
| 706 test('detect bad top-level as declaration', badDeclarationInclude); | 672 test('detect bad top-level as declaration', badDeclarationInclude); |
| 707 test('detect bad declaration as top-level', badTopInclude); | 673 test('detect bad declaration as top-level', badTopInclude); |
| 708 }); | 674 }); |
| 709 } | 675 } |
| OLD | NEW |