mirror of https://github.com/sveltejs/svelte
- remove unnecessary test - adjust one test to actually test a regression and skip it because it failspull/8394/head
parent
e257fd1054
commit
866e52a722
@ -1,3 +1,4 @@
|
|||||||
|
// A puppeteer test because JSDOM doesn't support contenteditable
|
||||||
export default {
|
export default {
|
||||||
html: '<div contenteditable="false"></div>',
|
html: '<div contenteditable="false"></div>',
|
||||||
|
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
// A puppeteer test because JSDOM doesn't support contenteditable
|
||||||
|
export default {
|
||||||
|
html: '<div contenteditable="true"></div>',
|
||||||
|
ssrHtml: '<div contenteditable=""></div>',
|
||||||
|
|
||||||
|
async test({ assert, target, window }) {
|
||||||
|
// this tests that by going from contenteditable=true to false, the
|
||||||
|
// content is correctly updated before that. This relies on the order
|
||||||
|
// of the updates: first updating the content, then setting contenteditable
|
||||||
|
// to false, which means that `set_data_maybe_contenteditable` is used and not `set_data`.
|
||||||
|
// If the order is reversed, https://github.com/sveltejs/svelte/issues/5018
|
||||||
|
// would be happening. The caveat is that if we go from contenteditable=false to true
|
||||||
|
// then we will have the same issue. To fix this reliably we probably need to
|
||||||
|
// overhaul the way we handle text updates in general.
|
||||||
|
// If due to some refactoring this test fails, it's probably fine to ignore it since
|
||||||
|
// this is a very specific edge case and the behavior is unstable anyway.
|
||||||
|
const div = target.querySelector('div');
|
||||||
|
const text = window.document.createTextNode('a');
|
||||||
|
div.insertBefore(text, null);
|
||||||
|
const event = new window.InputEvent('input');
|
||||||
|
await div.dispatchEvent(event);
|
||||||
|
assert.equal(div.textContent, 'a');
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
<script>
|
||||||
|
let text = "";
|
||||||
|
const updater = (event) => {
|
||||||
|
text = event.target.textContent;
|
||||||
|
};
|
||||||
|
$: spread = {
|
||||||
|
contenteditable: text !== "a",
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div {...spread} on:input={updater}>{text}</div>
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
// A puppeteer test because JSDOM doesn't support contenteditable
|
||||||
|
export default {
|
||||||
|
html: '<div contenteditable=""></div>',
|
||||||
|
|
||||||
|
// Failing test for https://github.com/sveltejs/svelte/issues/5018, fix pending
|
||||||
|
// It's hard to fix this because in order to do that, we would need to change the
|
||||||
|
// way the value is compared completely. Right now it compares the value of the
|
||||||
|
// first text node, but it should compare the value of the whole content
|
||||||
|
skip: true,
|
||||||
|
|
||||||
|
async test({ assert, target, window }) {
|
||||||
|
const div = target.querySelector('div');
|
||||||
|
|
||||||
|
let text = window.document.createTextNode('a');
|
||||||
|
div.insertBefore(text, null);
|
||||||
|
let event = new window.InputEvent('input');
|
||||||
|
await div.dispatchEvent(event);
|
||||||
|
assert.equal(div.textContent, 'a');
|
||||||
|
|
||||||
|
// When a user types a newline, the browser inserts a <div> element
|
||||||
|
const inner_div = window.document.createElement('div');
|
||||||
|
div.insertBefore(inner_div, null);
|
||||||
|
event = new window.InputEvent('input');
|
||||||
|
await div.dispatchEvent(event);
|
||||||
|
assert.equal(div.textContent, 'a');
|
||||||
|
|
||||||
|
text = window.document.createTextNode('b');
|
||||||
|
inner_div.insertBefore(text, null);
|
||||||
|
event = new window.InputEvent('input');
|
||||||
|
await div.dispatchEvent(event);
|
||||||
|
assert.equal(div.textContent, 'ab');
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -1,12 +0,0 @@
|
|||||||
export default {
|
|
||||||
html: '<div contenteditable=""></div>',
|
|
||||||
|
|
||||||
async test({ assert, target, window }) {
|
|
||||||
const div = target.querySelector('div');
|
|
||||||
const text = window.document.createTextNode('a');
|
|
||||||
div.insertBefore(text, null);
|
|
||||||
const event = new window.InputEvent('input');
|
|
||||||
await div.dispatchEvent(event);
|
|
||||||
assert.equal(div.textContent, 'a');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
export default {
|
|
||||||
html: '<div contenteditable="true"></div>',
|
|
||||||
|
|
||||||
async test({ assert, target, window }) {
|
|
||||||
const div = target.querySelector('div');
|
|
||||||
const text = window.document.createTextNode('a');
|
|
||||||
div.insertBefore(text, null);
|
|
||||||
const event = new window.InputEvent('input');
|
|
||||||
await div.dispatchEvent(event);
|
|
||||||
assert.equal(div.textContent, 'a');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
<script>
|
|
||||||
let text = '';
|
|
||||||
const updater = (event) => {text = event.target.textContent}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div contenteditable="true" on:input={updater}>{text}</div>
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
export default {
|
|
||||||
html: '<div contenteditable="true"></div>',
|
|
||||||
ssrHtml: '<div contenteditable=""></div>',
|
|
||||||
|
|
||||||
async test({ assert, target, window }) {
|
|
||||||
const div = target.querySelector('div');
|
|
||||||
const text = window.document.createTextNode('a');
|
|
||||||
div.insertBefore(text, null);
|
|
||||||
const event = new window.InputEvent('input');
|
|
||||||
await div.dispatchEvent(event);
|
|
||||||
assert.equal(div.textContent, 'a');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
<script>
|
|
||||||
let text = '';
|
|
||||||
const updater = (event) => {text = event.target.textContent}
|
|
||||||
$: spread = {
|
|
||||||
contenteditable: text !== undefined,
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div {...spread} on:input={updater}>{text}</div>
|
|
||||||
Loading…
Reference in new issue