summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/form-control-state.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/form-control-state.html')
-rw-r--r--testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/form-control-state.html61
1 files changed, 61 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/form-control-state.html b/testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/form-control-state.html
new file mode 100644
index 0000000000..7d03a885f0
--- /dev/null
+++ b/testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/form-control-state.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Writing out a document with form controls with values</title>
+<link rel="author" href="mailto:bzbarsky@mit.edu"/>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<div id="log"></div>
+<script>
+function asyncHop(t, arg) {
+ return new Promise(res => t.step_timeout(res.bind(null, arg), 0));
+}
+
+function loadPromise(t, iframe) {
+ var p = new Promise(res =>
+ iframe.addEventListener("load", res.bind(null, iframe), { once: true }));
+ // We need to do one trip through the event loop to make sure we're
+ // not still under the load event firing when we start doing our
+ // document.open bits.
+ return p.then(asyncHop.bind(null, t));
+}
+
+async function createIframe(t) {
+ var i = document.createElement("iframe");
+ t.add_cleanup(() => i.remove());
+ var p = loadPromise(t, i);
+ document.body.appendChild(i);
+ return p;
+}
+
+async function replaceIframe(t, i, text) {
+ var p = loadPromise(t, i);
+ var doc = i.contentDocument;
+ doc.open();
+ doc.write(text);
+ doc.close();
+ return p;
+}
+
+promise_test(async function(t) {
+ var i = await createIframe(t);
+ var str = "<textarea>123</textarea>";
+ await replaceIframe(t, i, str);
+ i.contentDocument.querySelector("textarea").value = "abc";
+ await replaceIframe(t, i, str);
+ assert_equals(i.contentDocument.querySelector("textarea").value, "123");
+}, "textarea state");
+
+promise_test(async function(t) {
+ var i = await createIframe(t);
+ var str = "<input value='123'>";
+ await replaceIframe(t, i, str);
+ i.contentDocument.querySelector("input").value = "abc";
+ await replaceIframe(t, i, str);
+ assert_equals(i.contentDocument.querySelector("input").value, "123");
+}, "input state");
+</script>
+</body>
+</html>