<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../fast/js/resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
description("This test checks a form element can handle elements of which form attribute points the form element even if elements are outside of the form.");

if (window.testRunner)
    testRunner.waitUntilDone();

var container = document.createElement('div');
document.body.appendChild(container);

container.innerHTML = '<input type=hidden name=key1 value=value1 id=outer-before form=owner />' +
    '<form id=owner action="" method="GET">' +
    '    <input type=hidden name=key2 value=value2 id=inner form=owner />' +
    '</form>' +
    '<input type=hidden name=submitted value=true id=outer-after form=owner />';

var owner = document.getElementById('owner');
var outerBefore = document.getElementById('outer-before');
var inner = document.getElementById('inner');
var outerAfter = document.getElementById('outer-after');
var query = window.location.search;

if (query.indexOf('submitted=true') == -1) {
    owner.submit();
} else {
    debug('- Ensures that elements attribute of the form contains elements which are outside of the form.');

    shouldBe('owner.elements.length', '3');
    shouldBe('owner.elements[0]', 'outerBefore');
    shouldBe('owner.elements[1]', 'inner');
    shouldBe('owner.elements[2]', 'outerAfter');

    debug('');
    debug('- Ensures that form submission contains name and value pairs for such elements.');
    var pairs = query.substr(1).split('&');
    shouldBe('pairs.length', '3');
    shouldBeEqualToString('pairs[0]', 'key1=value1');
    shouldBeEqualToString('pairs[1]', 'key2=value2');
    shouldBeEqualToString('pairs[2]', 'submitted=true');
    if (window.testRunner)
        testRunner.notifyDone();
}
</script>
<script src="../../fast/js/resources/js-test-post.js"></script>
</body>
</html>
