// 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%]",
		"  );",
		"}");
})();
