Bug 346485 - "Implement output element -- Test" [r=smaug]

This commit is contained in:
Mounir Lamouri 2010-04-22 07:03:00 -04:00
parent 9961147316
commit 8b86c5b307
16 changed files with 372 additions and 0 deletions

View File

@ -378,6 +378,7 @@ _TEST_FILES = test_bug5141.html \
file_csp_redirects_page.sjs \
file_csp_redirects_main.html \
file_csp_redirects_resource.sjs \
test_bug346485.html \
$(NULL)
# This test fails on the Mac for some reason

View File

@ -0,0 +1,77 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=346485
-->
<head>
<title>Test for Bug 346485</title>
<script type="application/javascript" src="/MochiKit/packed.js"></script>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=346485">Mozilla Bug 346485</a>
<p id="display"></p>
<div id="content" style="display: none">
<input id='a'>
<input id='b'>
<output id='o' for='a b'></output>
</div>
<pre id="test">
<script type="application/javascript">
/** Test for Bug 346485 **/
/**
* This test is testing DOMSettableTokenList used by the output element.
*/
var o = document.getElementById('o');
is(o.htmlFor, 'a b',
"htmlFor IDL attribute should reflect for content attribute");
is(o.htmlFor.value, 'a b',
"value should return the underlying string");
is(o.htmlFor.length, 2, "Size should be '2'");
ok(o.htmlFor.contains('a'), "It should contain 'a' token'");
ok(!o.htmlFor.contains('c'), "It should not contain 'c' token");
is(o.htmlFor.item(0), 'a', "First item is 'a' token'");
is(o.htmlFor.item(42), null, "Out-of-range should return null");
o.htmlFor.add('c');
is(o.htmlFor, 'a b c', "'c' token should have been added");
is(o.htmlFor.length, 3, "Size should be '3'");
o.htmlFor.add('a');
is(o.htmlFor, 'a b c', "Nothing should have changed");
is(o.htmlFor.length, 3, "Size should be '3'");
o.htmlFor.remove('a');
is(o.htmlFor, 'b c', "'a' token should have been removed");
is(o.htmlFor.length, 2, "Size should be '2'");
o.htmlFor.remove('d');
is(o.htmlFor, 'b c', "Nothing should have been removed");
is(o.htmlFor.length, 2, "Size should be '2'");
o.htmlFor.toggle('a');
is(o.htmlFor, 'b c a', "'a' token should have been added");
is(o.htmlFor.length, 3, "Size should be '3'");
o.htmlFor.toggle('b');
is(o.htmlFor, 'c a', "Nothing should have changed");
is(o.htmlFor.length, 2, "Size should be '2'");
o.htmlFor.value = "foo bar";
is(o.htmlFor, 'foo bar', "The underlying string should have changed");
is(o.htmlFor.length, 2, "Size should be '2'");
ok(o.htmlFor.contains('foo'), "It should contain 'foo'");
</script>
</pre>
</body>
</html>

View File

@ -160,6 +160,7 @@ _TEST_FILES = test_bug589.html \
test_bug458037.xhtml \
test_bug559284.html \
test_bug551670.html \
test_bug346485.html \
$(NULL)
libs:: $(_TEST_FILES)

View File

@ -0,0 +1,179 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=346485
-->
<head>
<title>Test for Bug 346485</title>
<script type="application/javascript" src="/MochiKit/packed.js"></script>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=346485">Mozilla Bug 346485</a>
<p id="display"></p>
<iframe name="submit_frame" onload="checkFormSubmission();" style="visibility: hidden;"></iframe>
<div id="content" style="display: none">
<form id='f' method='get' target='submit_frame' action='foo'>
<input name='a' id='a'>
<input name='b' id='b'>
<output id='o' for='a b' name='output-name'>tulip</output>
</form>
</div>
<pre id="test">
<script type="application/javascript">
/** Test for Bug 346485 **/
function checkNameAttribute(element)
{
function nameAttributeEquals(element, expectedValue)
{
is(element.name, expectedValue, "Output name IDL attribute is not correct");
is(element.getAttribute('name'), expectedValue,
"Output name content attribute is not correct");
}
nameAttributeEquals(element, "output-name");
element.name = "new-name";
nameAttributeEquals(element, "new-name");
element.setAttribute('name', 'new-name-2');
nameAttributeEquals(element, "new-name-2");
}
function checkValueAndDefaultValueIDLAttribute(element)
{
is(element.value, element.textContent,
"The value IDL attribute should act like the textContent IDL attribute");
element.value = "foo";
is(element.value, "foo", "Value should be 'foo'");
is(element.defaultValue, "", "Default defaultValue is ''");
element.defaultValue = "bar";
is(element.defaultValue, "bar", "defaultValue should be 'bar'");
// More complex situation.
element.textContent = 'foo';
var b = document.createElement('b');
b.textContent = 'bar'
element.appendChild(b);
is(element.value, element.textContent,
"The value IDL attribute should act like the textContent IDL attribute");
}
function checkValueModeFlag(element)
{
/**
* The value mode flag is the flag used to know if value should represent the
* textContent or the default value.
*/
// value mode flag should be 'value'
isnot(element.defaultValue, element.value,
"When value is set, defaultValue keeps its value");
var f = document.getElementById('f');
f.reset();
// value mode flag should be 'default'
is(element.defaultValue, element.value, "When reset, defaultValue=value");
is(element.textContent, element.defaultValue,
"textContent should contain the defaultValue");
}
function checkDescendantChanged(element)
{
/**
* Whenever a descendant is changed if the value mode flag is value,
* the default value should be the textContent value.
*/
element.defaultValue = 'tulip';
element.value = 'foo';
// set value mode flag to 'default'
var f = document.getElementById('f');
f.reset();
is(element.textContent, element.defaultValue,
"textContent should contain the defaultValue");
element.textContent = "bar";
is(element.textContent, element.defaultValue,
"textContent should contain the defaultValue");
}
function checkFormIDLAttribute(element)
{
is(element.form, document.getElementById('f'),
"form IDL attribute is invalid");
}
function checkHtmlForIDLAttribute(element)
{
is(element.htmlFor, 'a b',
"htmlFor IDL attribute should reflect the for content attribute");
// DOMSettableTokenList is tested in another bug so we just test assignation
element.htmlFor.value = 'a b c';
is(element.htmlFor, 'a b c', "htmlFor shoud have changed");
}
function submitForm()
{
// Setting the values for the submit.
document.getElementById('o').value = 'foo';
document.getElementById('a').value = 'afield';
document.getElementById('b').value = 'bfield';
// This will call checkFormSubmission() which is going to call ST.finish().
document.getElementById('f').submit();
}
function checkFormSubmission()
{
/**
* All elements values have been set just before the submission.
* The input elements values should be in the submit url but the ouput
* element value should not appear.
*/
is(frames['submit_frame'].location.href,
'http://mochi.test:8888/tests/content/html/content/test/foo?a=afield&b=bfield',
"The output element value should not be submitted");
SimpleTest.finish();
}
SimpleTest.waitForExplicitFinish();
var o = document.getElementsByTagName('output');
is(o.length, 1, "There should be one output element");
o = o[0];
ok(o instanceof HTMLOutputElement,
"The output should be instance of HTMLOutputElement");
o = document.getElementById('o');
ok(o instanceof HTMLOutputElement,
"The output should be instance of HTMLOutputElement");
is(o.type, "output", "Output type IDL attribute should be 'output'");
checkNameAttribute(o);
checkValueAndDefaultValueIDLAttribute(o);
checkValueModeFlag(o);
checkDescendantChanged(o);
checkFormIDLAttribute(o);
checkHtmlForIDLAttribute(o);
submitForm();
</script>
</pre>
</body>
</html>

View File

@ -0,0 +1,7 @@
<!DOCTYPE html>
<html>
<!-- Test: the output shouldn't show anything when there is no content -->
<body>
<output></output>
</body>
</html>

View File

@ -0,0 +1,7 @@
<!DOCTYPE html>
<html>
<!-- Test: the output should show the textContent -->
<body>
<output>foo</output>
</body>
</html>

View File

@ -0,0 +1,7 @@
<!DOCTYPE html>
<html>
<!-- Test: the output should show its content -->
<body>
<output>foo<b>bar</b></output>
</body>
</html>

View File

@ -0,0 +1,7 @@
<!DOCTYPE html>
<html>
<!-- Test: the output should show its content -->
<body>
<output>foo<input></output>
</body>
</html>

View File

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html class="reftest-wait">
<!-- Test: the output element should show its default value -->
<script type="text/javascript">
function setDefaultValue()
{
document.getElementById('o').defaultValue = "foo";
}
function disableReftestWait()
{
document.documentElement.className = '';
}
</script>
<body onload="setDefaultValue(); disableReftestWait();">
<output id="o"></output>
</body>
</html>

View File

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html class="reftest-wait">
<!-- Test: the output element should show its value -->
<script type="text/javascript">
function setValue()
{
document.getElementById('o').value = "foo";
}
function disableReftestWait()
{
document.documentElement.className = '';
}
</script>
<body onload="setValue(); disableReftestWait();">
<output id="o"></output>
</body>
</html>

View File

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html class="reftest-wait">
<!-- Test: the output element should show its value -->
<script type="text/javascript">
function setDefaultValue()
{
document.getElementById('o').value = "bar";
}
function setValue()
{
document.getElementById('o').value = "foo";
}
function disableReftestWait()
{
document.documentElement.className = '';
}
</script>
<body onload="setDefaultValue(); setValue(); disableReftestWait();">
<output id="o"></output>
</body>
</html>

View File

@ -0,0 +1,6 @@
<!DOCTYPE html>
<html>
<body>
foo<b>bar</b>
</body>
</html>

View File

@ -0,0 +1,6 @@
<!DOCTYPE html>
<html>
<body>
foo<input>
</body>
</html>

View File

@ -0,0 +1,6 @@
<!DOCTYPE html>
<html>
<body>
foo
</body>
</html>

View File

@ -0,0 +1,7 @@
== output-1.html about:blank
== output-2.html output-ref.html
== output-3.html output-ref-2.html
== output-4.html output-ref-3.html
== output-5.html output-ref.html
== output-6.html output-ref.html
== output-7.html output-ref.html

View File

@ -43,3 +43,6 @@ random-if(MOZ_WIDGET_TOOLKIT=="gtk2") != textarea-rtl.html textarea-no-resize.ht
# placeholder
include placeholder/reftest.list
# output element
include output/reftest.list