<!doctype html>
<html lang="en">
<head>
	<title>Switch between display block and inline on :hover</title>
	<style>
		.box {
			width: 100px;
			height: 100px;
		}
		#dummy {
			background-color: black;
		}
		#hoverTest {
			border: 5px solid green;
			border-left: 100px solid green;
			color: black;
			display: block;
		}
		#hoverTest:hover {
			border-color: darkred;
			display: inline;
		}
		#after_hoverTest {
			background-color: blue;
			color: white;
			padding: 10px;
		}
	</style>

	<script src="../../resources/js-test.js"></script>
</head>

<script type="text/javascript">
	jsTestIsAsync = true;

	function beginTest() {
		if (window.eventSender) {
			var hoverTest  = document.querySelector("#hoverTest");

			// move mouse on the hover test object
			eventSender.mouseMoveTo(hoverTest.offsetLeft + 50, hoverTest.offsetTop + 10);
			eventSender.mouseDown(0);

			setTimeout(release, 0);
		}
	}

	function release() {
		if (window.eventSender) {
			var hoverTest  = document.querySelector("#hoverTest");
			var displayMode = window.getComputedStyle(hoverTest).getPropertyValue("display");

			if (displayMode == "inline")
				testPassed("Setting display to inline on hover processed OK.");
			else
				testFailed("Setting display to inline on hover FAILED." + " (expected 'inline', got '" + displayMode + "')");

			var elementsToHide = document.querySelectorAll(".box");
			for (var i=0; i<elementsToHide.length; i++)
				elementsToHide[i].style.visibility = "hidden";

	        eventSender.mouseUp(0);

            setTimeout(finishJSTest, 0);
		}
	}

</script>

<body onload="beginTest()">
	<div id="dummy" class="box"></div>
	<div id="hoverTest" class="box">When hovered, this box's display will switch from <b>block</b> to <b>inline</b></div>
	<div id="after_hoverTest" class="box">This is here to show the layout being recomputed</div>
</body>
</html>
