<!doctype html>
<title>CSS Test (Conditional Rules): @supports rules OM support</title>
<link rel="author" title="Florian Rivoal" href="http://florian.rivoal.net/">
<link rel="author" href="http://opera.com" title="Opera Software ASA">
<link rel="help" href="http://www.w3.org/TR/css3-conditional/#at-supports">
<meta name="flags" content="">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<style>
	@supports (padding: 0) {
		dfn { width:0; }
		@supports (width: 0) {
			br { height:0; }
		}
		ol { display:none; }
	}
	@media all {
		@supports (padding: 0) {
			@keyframes foo {
				0% { top: 0; left: 0; }
				100% { top: 100px; left: 100px; }
			}
		}
	}
	@supports (border: black) and (padding: 0) and (width: 0) {
		dfn { width:0; }
	}
	@supports (border: black) or (padding: 0) or (width: 0) {
		dfn { width:0; }
	}
</style>
<script>
	/**
	 * Asserts tha the two strings are equal, after normalizing whitespace
	 *
	 * If the serialization of whitespace and identation ever becomes
	 * specified to a sufficient degree of presition, this should be
	 * replaced by a strict textual comparison with assert_equals.
	 */
	function assert_equals_normalized(a, b) {
		var normal_a = a.replace(/\s+/g, " ");
		var normal_b = b.replace(/\s+/g, " ");
		assert_equals(normal_a, normal_b);
	}
	test(function(){
		var base_rule = document.styleSheets[0].cssRules[0];
		var child_rule = base_rule.cssRules[1];
		assert_equals_normalized(base_rule.cssText,
		              "@supports (padding: 0) {\n"
		             +"  dfn { width: 0px; }\n"
		             +"  @supports (width: 0) {\n"
		             +"    br { height: 0px; }\n"
		             +"  }\n"
		             +"  ol { display: none; }\n"
		             +"}");
		assert_equals_normalized(child_rule.cssText,
		              "@supports (width: 0) {\n"
		             +"  br { height: 0px; }\n"
		             +"}");
	}, "nested @supports serialize properly");

	test(function(){
		var base_rule = document.styleSheets[0].cssRules[1];
		var child_rule = base_rule.cssRules[0];
		var grand_child_rule = child_rule.cssRules[0];
		assert_equals_normalized(base_rule.cssText,
		              "@media all {\n"
		             +"  @supports (padding: 0) {\n"
		             +"    @keyframes foo {\n"
		             +"      0% { top: 0px; left: 0px; }\n"
		             +"      100% { top: 100px; left: 100px; }\n"
		             +"    }\n"
		             +"  }\n"
		             +"}");
		assert_equals_normalized(child_rule.cssText,
		              "@supports (padding: 0) {\n"
		             +"  @keyframes foo {\n"
		             +"    0% { top: 0px; left: 0px; }\n"
		             +"    100% { top: 100px; left: 100px; }\n"
		             +"  }\n"
		             +"}");
		assert_equals_normalized(grand_child_rule.cssText,
		              "@keyframes foo {\n"
		             +"  0% { top: 0px; left: 0px; }\n"
		             +"  100% { top: 100px; left: 100px; }\n"
		             +"}");
	}, "@keyframes nested in @supports serialize properly");

	test(function(){
		var rules = document.styleSheets[0].cssRules;
		assert_equals(rules.length, 4);
		assert_equals(rules[0].type, CSSRule.SUPPORTS_RULE);
		assert_equals(rules[1].type, CSSRule.MEDIA_RULE);
		assert_equals(rules[0].cssRules.length, 3);
		assert_equals(rules[0].cssRules[0].type, CSSRule.STYLE_RULE);
		assert_equals(rules[0].cssRules[1].type, CSSRule.SUPPORTS_RULE);
		assert_equals(rules[0].cssRules[2].type, CSSRule.STYLE_RULE);

		assert_equals(rules[0].cssRules[1].cssRules.length, 1);
		assert_equals(rules[0].cssRules[1].cssRules[0].type, CSSRule.STYLE_RULE);

		assert_equals(rules[1].cssRules.length, 1);
		assert_equals(rules[1].cssRules[0].type, CSSRule.SUPPORTS_RULE);
		assert_equals(rules[1].cssRules[0].cssRules.length, 1);
		assert_equals(rules[1].cssRules[0].cssRules[0].type, CSSRule.KEYFRAMES_RULE);

		assert_equals(rules[2].cssRules.length, 1);
		assert_equals(rules[2].cssRules[0].type, CSSRule.STYLE_RULE);

		assert_equals(rules[3].cssRules.length, 1);
		assert_equals(rules[3].cssRules[0].type, CSSRule.STYLE_RULE);
	}, "The style sheet structure is properly represented");

	test(function(){
		document.styleSheets[0].deleteRule(1);

		var rules = document.styleSheets[0].cssRules;
		assert_equals(rules.length, 3);
		assert_equals(rules[0].type, CSSRule.SUPPORTS_RULE);
		assert_equals(rules[0].cssRules.length, 3);
		assert_equals(rules[0].cssRules[0].type, CSSRule.STYLE_RULE);
		assert_equals(rules[0].cssRules[1].type, CSSRule.SUPPORTS_RULE);
		assert_equals(rules[0].cssRules[2].type, CSSRule.STYLE_RULE);

		assert_equals(rules[0].cssRules[1].cssRules.length, 1);
		assert_equals(rules[0].cssRules[1].cssRules[0].type, CSSRule.STYLE_RULE);
	}, "Deleting the top level of a nested structue works");

	test(function(){
		var rules = document.styleSheets[0].cssRules;

		rules[0].cssRules[1].insertRule("img { visibility:hidden; }", 0);

		assert_equals(rules.length, 3);
		assert_equals(rules[0].type, CSSRule.SUPPORTS_RULE);
		assert_equals(rules[0].cssRules.length, 3);
		assert_equals(rules[0].cssRules[0].type, CSSRule.STYLE_RULE);
		assert_equals(rules[0].cssRules[1].type, CSSRule.SUPPORTS_RULE);
		assert_equals(rules[0].cssRules[2].type, CSSRule.STYLE_RULE);

		assert_equals(rules[0].cssRules[1].cssRules.length, 2);
		assert_equals(rules[0].cssRules[1].cssRules[0].type, CSSRule.STYLE_RULE);
		assert_equals(rules[0].cssRules[1].cssRules[0].cssText, "img { visibility: hidden; }");
		assert_equals(rules[0].cssRules[1].cssRules[1].type, CSSRule.STYLE_RULE);
		assert_equals(rules[0].cssRules[1].cssRules[1].cssText, "br { height: 0px; }");
	}, "Rule insertion works in nested @supports rules");

	test(function(){
		var rules = document.styleSheets[0].cssRules;

		rules[0].insertRule("@supports (left: 42px) { #foo { color:green; } }", 1);

		assert_equals(rules.length, 3);
		assert_equals(rules[0].type, CSSRule.SUPPORTS_RULE);
		assert_equals(rules[0].cssRules.length, 4);
		assert_equals(rules[0].cssRules[0].type, CSSRule.STYLE_RULE);
		assert_equals(rules[0].cssRules[1].type, CSSRule.SUPPORTS_RULE);
		assert_equals(rules[0].cssRules[2].type, CSSRule.SUPPORTS_RULE);
		assert_equals(rules[0].cssRules[3].type, CSSRule.STYLE_RULE);

		assert_equals(rules[0].cssRules[1].cssRules.length, 1);
		assert_equals(rules[0].cssRules[1].cssRules[0].type, CSSRule.STYLE_RULE);
		assert_equals(rules[0].cssRules[1].cssRules[0].cssText, "#foo { color: green; }");

		assert_equals(rules[0].cssRules[2].cssRules.length, 2);
		assert_equals(rules[0].cssRules[2].cssRules[0].type, CSSRule.STYLE_RULE);
		assert_equals(rules[0].cssRules[2].cssRules[0].cssText, "img { visibility: hidden; }");
		assert_equals(rules[0].cssRules[2].cssRules[1].type, CSSRule.STYLE_RULE);
		assert_equals(rules[0].cssRules[2].cssRules[1].cssText, "br { height: 0px; }");
	}, "Insertion @supports rules into another @supports rule works");

	test(function(){
		var rules = document.styleSheets[0].cssRules;

		rules[0].deleteRule(2);

		assert_equals(rules.length, 3);
		assert_equals(rules[0].type, CSSRule.SUPPORTS_RULE);
		assert_equals(rules[0].cssRules.length, 3);
		assert_equals(rules[0].cssRules[0].type, CSSRule.STYLE_RULE);
		assert_equals(rules[0].cssRules[1].type, CSSRule.SUPPORTS_RULE);
		assert_equals(rules[0].cssRules[2].type, CSSRule.STYLE_RULE);

		assert_equals(rules[0].cssRules[1].cssRules.length, 1);
		assert_equals(rules[0].cssRules[1].cssRules[0].type, CSSRule.STYLE_RULE);
		assert_equals(rules[0].cssRules[1].cssRules[0].cssText, "#foo { color: green; }");
	}, "Deletion of a nested @supports rule works");

	test(function(){
		var rules = document.styleSheets[0].cssRules;

		rules[0].insertRule("@font-face { font-familly: foo; src: url('http://www.example.com/foo'; }", 0);

		assert_equals(rules.length, 3);
		assert_equals(rules[0].type, CSSRule.SUPPORTS_RULE);
		assert_equals(rules[0].cssRules.length, 4);
		assert_equals(rules[0].cssRules[0].type, CSSRule.FONT_FACE_RULE);
	}, "Inserting @font-face inside @supports works");

	test(function(){
		var style_rule = document.styleSheets[0].cssRules[0].cssRules[1];

		assert_throws_js(TypeError, function() { style_rule.insertRule("@supports (width: 0) { ol { width: 0; } }", 0);} );

	}, "Inserting an @supports inside a style rule should fail");
	test(function(){
		var rule = document.styleSheets[0].cssRules[1];
		assert_equals_normalized(rule.cssText,
		              "@supports (border: black) and (padding: 0) and (width: 0) {\n"
		             +"  dfn { width: 0px; }\n"
		             +"}");
	}, "'and' arguments in @supports serialize in the correct order and with extra parentheses");
	test(function(){
		var rule = document.styleSheets[0].cssRules[2];
		assert_equals_normalized(rule.cssText,
		              "@supports (border: black) or (padding: 0) or (width: 0) {\n"
		             +"  dfn { width: 0px; }\n"
		             +"}");
	}, "'or' arguments in @supports serialize in the correct order and with extra parentheses");
</script>

<div id=log></div>

