136 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			136 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | // CodeMirror, copyright (c) by Marijn Haverbeke and others
 | ||
|  | // Distributed under an MIT license: http://codemirror.net/LICENSE
 | ||
|  | 
 | ||
|  | (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 parenthese.
 | ||
|  |   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("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("tagColorHex6", | ||
|  |      "[tag foo] { [property background]: [atom #ffffff]; }"); | ||
|  | 
 | ||
|  |   MT("tagColorHex4", | ||
|  |      "[tag foo] { [property background]: [atom&error #ffff]; }"); | ||
|  | 
 | ||
|  |   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", | ||
|  |      "[tag foo] { [property background]: [atom url]([string //example.com/foo.png]); [property padding]: [number 0]; }"); | ||
|  | 
 | ||
|  |   MT("commentSGML", | ||
|  |      "[comment <!--comment-->]"); | ||
|  | 
 | ||
|  |   MT("commentSGML2", | ||
|  |      "[comment <!--comment]", | ||
|  |      "[comment -->] [tag div] {}"); | ||
|  | 
 | ||
|  |   MT("indent_tagSelector", | ||
|  |      "[tag strong], [tag em] {", | ||
|  |      "  [property background]: [atom rgba](", | ||
|  |      "    [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] {", | ||
|  |      "  [property background]: [atom url](", | ||
|  |      "[string     blahblah]", | ||
|  |      "[string     etc]", | ||
|  |      "[string   ]) [keyword !important];", | ||
|  |      "}"); | ||
|  | 
 | ||
|  |   MT("font_face", | ||
|  |      "[def @font-face] {", | ||
|  |      "  [property font-family]: [string 'myfont'];", | ||
|  |      "  [error nonsense]: [string 'abc'];", | ||
|  |      "  [property src]: [atom url]([string http://blah]),", | ||
|  |      "    [atom url]([string http://foo]);", | ||
|  |      "}"); | ||
|  | 
 | ||
|  |   MT("empty_url", | ||
|  |      "[def @import] [tag url]() [tag screen];"); | ||
|  | 
 | ||
|  |   MT("parens", | ||
|  |      "[qualifier .foo] {", | ||
|  |      "  [property background-image]: [variable fade]([atom #000], [number 20%]);", | ||
|  |      "  [property border-image]: [variable linear-gradient](", | ||
|  |      "    [atom to] [atom bottom],", | ||
|  |      "    [variable fade]([atom #000], [number 20%]) [number 0%],", | ||
|  |      "    [variable fade]([atom #000], [number 20%]) [number 100%]", | ||
|  |      "  );", | ||
|  |      "}"); | ||
|  | })(); |