| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  | // CodeMirror, copyright (c) by Marijn Haverbeke and others
 | 
					
						
							| 
									
										
										
										
											2018-10-07 12:02:07 +02:00
										 |  |  | // Distributed under an MIT license: https://codemirror.net/LICENSE
 | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | (function() { | 
					
						
							|  |  |  |   var mode = CodeMirror.getMode({indentUnit: 2}, "css"); | 
					
						
							|  |  |  |   function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Error, because "foobarhello" is neither a known type or property, but
 | 
					
						
							|  |  |  |   // property was expected (after "and"), and it should be in parentheses.
 | 
					
						
							|  |  |  |   MT("atMediaUnknownType", | 
					
						
							|  |  |  |      "[def @media] [attribute screen] [keyword and] [error foobarhello] { }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Soft error, because "foobarhello" is not a known property or type.
 | 
					
						
							|  |  |  |   MT("atMediaUnknownProperty", | 
					
						
							|  |  |  |      "[def @media] [attribute screen] [keyword and] ([error foobarhello]) { }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Make sure nesting works with media queries
 | 
					
						
							|  |  |  |   MT("atMediaMaxWidthNested", | 
					
						
							|  |  |  |      "[def @media] [attribute screen] [keyword and] ([property max-width]: [number 25px]) { [tag foo] { } }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("atMediaFeatureValueKeyword", | 
					
						
							|  |  |  |      "[def @media] ([property orientation]: [keyword landscape]) { }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("atMediaUnknownFeatureValueKeyword", | 
					
						
							|  |  |  |      "[def @media] ([property orientation]: [error upsidedown]) { }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("atMediaUppercase", | 
					
						
							|  |  |  |      "[def @MEDIA] ([property orienTAtion]: [keyword landScape]) { }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagSelector", | 
					
						
							|  |  |  |      "[tag foo] { }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("classSelector", | 
					
						
							|  |  |  |      "[qualifier .foo-bar_hello] { }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("idSelector", | 
					
						
							|  |  |  |      "[builtin #foo] { [error #foo] }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagSelectorUnclosed", | 
					
						
							|  |  |  |      "[tag foo] { [property margin]: [number 0] } [tag bar] { }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagStringNoQuotes", | 
					
						
							|  |  |  |      "[tag foo] { [property font-family]: [variable hello] [variable world]; }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagStringDouble", | 
					
						
							|  |  |  |      "[tag foo] { [property font-family]: [string \"hello world\"]; }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagStringSingle", | 
					
						
							|  |  |  |      "[tag foo] { [property font-family]: [string 'hello world']; }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagColorKeyword", | 
					
						
							|  |  |  |      "[tag foo] {", | 
					
						
							|  |  |  |      "  [property color]: [keyword black];", | 
					
						
							|  |  |  |      "  [property color]: [keyword navy];", | 
					
						
							|  |  |  |      "  [property color]: [keyword yellow];", | 
					
						
							|  |  |  |      "}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagColorHex3", | 
					
						
							|  |  |  |      "[tag foo] { [property background]: [atom #fff]; }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagColorHex4", | 
					
						
							|  |  |  |      "[tag foo] { [property background]: [atom #ffff]; }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagColorHex6", | 
					
						
							|  |  |  |      "[tag foo] { [property background]: [atom #ffffff]; }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagColorHex8", | 
					
						
							|  |  |  |      "[tag foo] { [property background]: [atom #ffffffff]; }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagColorHex5Invalid", | 
					
						
							|  |  |  |      "[tag foo] { [property background]: [atom&error #fffff]; }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagColorHexInvalid", | 
					
						
							|  |  |  |      "[tag foo] { [property background]: [atom&error #ffg]; }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagNegativeNumber", | 
					
						
							|  |  |  |      "[tag foo] { [property margin]: [number -5px]; }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagPositiveNumber", | 
					
						
							|  |  |  |      "[tag foo] { [property padding]: [number 5px]; }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagVendor", | 
					
						
							|  |  |  |      "[tag foo] { [meta -foo-][property box-sizing]: [meta -foo-][atom border-box]; }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagBogusProperty", | 
					
						
							|  |  |  |      "[tag foo] { [property&error barhelloworld]: [number 0]; }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagTwoProperties", | 
					
						
							|  |  |  |      "[tag foo] { [property margin]: [number 0]; [property padding]: [number 0]; }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("tagTwoPropertiesURL", | 
					
						
							| 
									
										
										
										
											2019-06-02 09:59:07 +02:00
										 |  |  |      "[tag foo] { [property background]: [variable&callee url]([string //example.com/foo.png]); [property padding]: [number 0]; }"); | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   MT("indent_tagSelector", | 
					
						
							|  |  |  |      "[tag strong], [tag em] {", | 
					
						
							| 
									
										
										
										
											2019-06-02 09:59:07 +02:00
										 |  |  |      "  [property background]: [variable&callee rgba](", | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  |      "    [number 255], [number 255], [number 0], [number .2]", | 
					
						
							|  |  |  |      "  );", | 
					
						
							|  |  |  |      "}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("indent_atMedia", | 
					
						
							|  |  |  |      "[def @media] {", | 
					
						
							|  |  |  |      "  [tag foo] {", | 
					
						
							|  |  |  |      "    [property color]:", | 
					
						
							|  |  |  |      "      [keyword yellow];", | 
					
						
							|  |  |  |      "  }", | 
					
						
							|  |  |  |      "}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("indent_comma", | 
					
						
							|  |  |  |      "[tag foo] {", | 
					
						
							|  |  |  |      "  [property font-family]: [variable verdana],", | 
					
						
							|  |  |  |      "    [atom sans-serif];", | 
					
						
							|  |  |  |      "}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("indent_parentheses", | 
					
						
							|  |  |  |      "[tag foo]:[variable-3 before] {", | 
					
						
							| 
									
										
										
										
											2019-06-02 09:59:07 +02:00
										 |  |  |      "  [property background]: [variable&callee url](", | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  |      "[string     blahblah]", | 
					
						
							|  |  |  |      "[string     etc]", | 
					
						
							|  |  |  |      "[string   ]) [keyword !important];", | 
					
						
							|  |  |  |      "}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("font_face", | 
					
						
							|  |  |  |      "[def @font-face] {", | 
					
						
							|  |  |  |      "  [property font-family]: [string 'myfont'];", | 
					
						
							|  |  |  |      "  [error nonsense]: [string 'abc'];", | 
					
						
							| 
									
										
										
										
											2019-06-02 09:59:07 +02:00
										 |  |  |      "  [property src]: [variable&callee url]([string http://blah]),", | 
					
						
							|  |  |  |      "    [variable&callee url]([string http://foo]);", | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  |      "}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("empty_url", | 
					
						
							| 
									
										
										
										
											2019-06-02 09:59:07 +02:00
										 |  |  |      "[def @import] [variable&callee url]() [attribute screen];"); | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   MT("parens", | 
					
						
							|  |  |  |      "[qualifier .foo] {", | 
					
						
							| 
									
										
										
										
											2019-06-02 09:59:07 +02:00
										 |  |  |      "  [property background-image]: [variable&callee fade]([atom #000], [number 20%]);", | 
					
						
							|  |  |  |      "  [property border-image]: [variable&callee linear-gradient](", | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  |      "    [atom to] [atom bottom],", | 
					
						
							| 
									
										
										
										
											2019-06-02 09:59:07 +02:00
										 |  |  |      "    [variable&callee fade]([atom #000], [number 20%]) [number 0%],", | 
					
						
							|  |  |  |      "    [variable&callee fade]([atom #000], [number 20%]) [number 100%]", | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  |      "  );", | 
					
						
							|  |  |  |      "}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("css_variable", | 
					
						
							|  |  |  |      ":[variable-3 root] {", | 
					
						
							|  |  |  |      "  [variable-2 --main-color]: [atom #06c];", | 
					
						
							|  |  |  |      "}", | 
					
						
							|  |  |  |      "[tag h1][builtin #foo] {", | 
					
						
							| 
									
										
										
										
											2019-06-02 09:59:07 +02:00
										 |  |  |      "  [property color]: [variable&callee var]([variable-2 --main-color]);", | 
					
						
							|  |  |  |      "}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("blank_css_variable", | 
					
						
							|  |  |  |      ":[variable-3 root] {", | 
					
						
							|  |  |  |      "  [variable-2 --]: [atom #06c];", | 
					
						
							|  |  |  |      "}", | 
					
						
							|  |  |  |      "[tag h1][builtin #foo] {", | 
					
						
							|  |  |  |      "  [property color]: [variable&callee var]([variable-2 --]);", | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  |      "}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   MT("supports", | 
					
						
							|  |  |  |      "[def @supports] ([keyword not] (([property text-align-last]: [atom justify]) [keyword or] ([meta -moz-][property text-align-last]: [atom justify])) {", | 
					
						
							|  |  |  |      "  [property text-align-last]: [atom justify];", | 
					
						
							|  |  |  |      "}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    MT("document", | 
					
						
							| 
									
										
										
										
											2019-06-02 09:59:07 +02:00
										 |  |  |       "[def @document] [variable&callee url]([string http://blah]),", | 
					
						
							|  |  |  |       "  [variable&callee url-prefix]([string https://]),", | 
					
						
							|  |  |  |       "  [variable&callee domain]([string blah.com]),", | 
					
						
							|  |  |  |       "  [variable&callee regexp]([string \".*blah.+\"]) {", | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  |       "    [builtin #id] {", | 
					
						
							|  |  |  |       "      [property background-color]: [keyword white];", | 
					
						
							|  |  |  |       "    }", | 
					
						
							|  |  |  |       "    [tag foo] {", | 
					
						
							|  |  |  |       "      [property font-family]: [variable Verdana], [atom sans-serif];", | 
					
						
							|  |  |  |       "    }", | 
					
						
							|  |  |  |       "}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    MT("document_url", | 
					
						
							| 
									
										
										
										
											2019-06-02 09:59:07 +02:00
										 |  |  |       "[def @document] [variable&callee url]([string http://blah]) { [qualifier .class] { } }"); | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |    MT("document_urlPrefix", | 
					
						
							| 
									
										
										
										
											2019-06-02 09:59:07 +02:00
										 |  |  |       "[def @document] [variable&callee url-prefix]([string https://]) { [builtin #id] { } }"); | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |    MT("document_domain", | 
					
						
							| 
									
										
										
										
											2019-06-02 09:59:07 +02:00
										 |  |  |       "[def @document] [variable&callee domain]([string blah.com]) { [tag foo] { } }"); | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |    MT("document_regexp", | 
					
						
							| 
									
										
										
										
											2019-06-02 09:59:07 +02:00
										 |  |  |       "[def @document] [variable&callee regexp]([string \".*blah.+\"]) { [builtin #id] { } }"); | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |    MT("counter-style", | 
					
						
							|  |  |  |       "[def @counter-style] [variable binary] {", | 
					
						
							|  |  |  |       "  [property system]: [atom numeric];", | 
					
						
							|  |  |  |       "  [property symbols]: [number 0] [number 1];", | 
					
						
							|  |  |  |       "  [property suffix]: [string \".\"];", | 
					
						
							|  |  |  |       "  [property range]: [atom infinite];", | 
					
						
							|  |  |  |       "  [property speak-as]: [atom numeric];", | 
					
						
							|  |  |  |       "}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    MT("counter-style-additive-symbols", | 
					
						
							|  |  |  |       "[def @counter-style] [variable simple-roman] {", | 
					
						
							|  |  |  |       "  [property system]: [atom additive];", | 
					
						
							|  |  |  |       "  [property additive-symbols]: [number 10] [variable X], [number 5] [variable V], [number 1] [variable I];", | 
					
						
							|  |  |  |       "  [property range]: [number 1] [number 49];", | 
					
						
							|  |  |  |       "}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    MT("counter-style-use", | 
					
						
							|  |  |  |       "[tag ol][qualifier .roman] { [property list-style]: [variable simple-roman]; }"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    MT("counter-style-symbols", | 
					
						
							| 
									
										
										
										
											2019-06-02 09:59:07 +02:00
										 |  |  |       "[tag ol] { [property list-style]: [variable&callee symbols]([atom cyclic] [string \"*\"] [string \"\\2020\"] [string \"\\2021\"] [string \"\\A7\"]); }"); | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   MT("comment-does-not-disrupt", | 
					
						
							|  |  |  |      "[def @font-face] [comment /* foo */] {", | 
					
						
							| 
									
										
										
										
											2019-06-02 09:59:07 +02:00
										 |  |  |      "  [property src]: [variable&callee url]([string x]);", | 
					
						
							| 
									
										
										
										
											2018-01-21 10:33:32 -05:00
										 |  |  |      "  [property font-family]: [variable One];", | 
					
						
							|  |  |  |      "}") | 
					
						
							|  |  |  | })(); |