// CodeMirror, copyright © by Marijn Haverbeke and others // Distributed under an MIT license: 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%]",
   "  );",
   "}");

})();