<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Pointer Lock IDL tests</title>
<link rel="author" title="W3C" href="http://www.w3.org/" />
<link rel="help" href="http://www.w3.org/TR/pointerlock/#element-interface"/>
<link rel="help" href="http://www.w3.org/TR/pointerlock/#extensions-to-the-document-interface">
<link rel="help" href="http://www.w3.org/TR/pointerlock/#extensions-to-the-mouseevent-interface">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/WebIDLParser.js"></script>
<script src="/resources/idlharness.js"></script>
</head>

<body>
<h1>Pointer Lock IDL tests</h1>

<pre id='untested_idl' style='display:none'>

interface EventTarget {
};

interface Node : EventTarget {
};

interface Element : Node {
};

interface Document : Node {
};

interface Event {
};

interface MouseEvent : Event {
};
</pre>

<pre id='idl'>

partial interface Element {
    void requestPointerLock ();
};

partial interface Document {
                attribute EventHandler onpointerlockchange;
                attribute EventHandler onpointerlockerror;
    readonly    attribute Element?     pointerLockElement;
    void exitPointerLock ();
};

partial interface MouseEvent {
    readonly    attribute long movementX;
    readonly    attribute long movementY;
};

partial dictionary MouseEventInit {
        long movementX = 0;
        long movementY = 0;
};


</pre>

<div id="log"></div>

<script>

var idl_array = new IdlArray();

setup(function() {
	idl_array.add_untested_idls(document.getElementById("untested_idl").textContent);
	idl_array.add_idls(document.getElementById("idl").textContent);

	idl_array.add_objects({ Document: ["window.document"],
                            Element: ["window.document.documentElement"],
                            MouseEvent: ["new MouseEvent('mousemove')", "new MouseEvent('pointerlockchange')"] });
});

idl_array.test();

</script>
</body>
</html>
