blob: ed53c2dd021a56075c480a43c5a8ce3b73f87939 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<style>
.editing {
border: 2px solid red;
padding: 12px;
font-size: 24px;
}
</style>
<script src="../editing.js"></script>
<script src="../../resources/ui-helper.js"></script>
<script src="../../resources/js-test.js"></script>
</head>
<body>
<div id="container"></div>
<script>
description("Tests spelling and grammar markers for misspellings.");
jsTestIsAsync = true;
if (window.internals) {
internals.settings.setUnifiedTextCheckerEnabled(true);
internals.settings.setAsynchronousSpellCheckingEnabled(true);
}
function createEditableElement(parent, textContent) {
var e = document.createElement("div");
e.setAttribute("contentEditable", "true");
e.textContent = textContent;
e.className = "editing";
parent.appendChild(e);
return e;
}
function typeText(elem, text) {
elem.focus();
selectAllCommand();
deleteCommand();
for (let character of text)
typeCharacterCommand(character);
}
const container = document.getElementById("container");
const elementWithGrammarIssue = createEditableElement(container, "I have a issue.");
const elementWithSpellingIssue = createEditableElement(container, "zz.");
const elementWithGrammarAndSpellingIssue = createEditableElement(container, "orange,zz,apple.");
const misspellings = [
{ marker: "spelling", issue: "a" },
{ marker: "grammar", issue: "a" },
{ marker: "grammar", issue: "I have a issue." },
{ marker: "spelling", issue: "zz" },
{ marker: "grammar", issue: "orange,zz,apple." },
{ marker: "spelling", issue: "orange,zz,apple" },
];
const results = [
{ "type": "spelling", "from": 7, "to": 8 },
{
"type": "grammar",
"from": 7,
"to": 8,
"details": [{ "from": 0, "to": 1 }]
},
{
"type": "grammar",
"from": 0,
"to": 15,
"details": [{ "from": 7, "to": 8 }]
}
];
window.element = null;
window.oppositeMarker = null;
window.misspellingData = null;
async function verifyDesiredMarkers(e, misspellings, overrideSpellCheckingResults)
{
await UIHelper.delayFor(0);
window.element = e;
const textToCheck = e.firstChild.nodeValue;
let spellCheckerResults = { };
if (overrideSpellCheckingResults)
spellCheckerResults[textToCheck] = overrideSpellCheckingResults;
await UIHelper.setSpellCheckerResults(spellCheckerResults);
for (let misspelling of misspellings) {
window.misspellingData = misspelling;
typeText(e, textToCheck);
debug(`Checking for issue on "${textToCheck}"`);
await new Promise(resolve => shouldBecomeDifferent("internals.markerRangeForNode(element.firstChild, misspellingData.marker, 0)", "null", resolve));
range = internals.markerRangeForNode(element.firstChild, misspellingData.marker, 0);
shouldBeEqualToString("range.toString()", misspellingData.issue);
debug("");
}
}
async function verifyUnexpectedMarkers(e, misspellings, overrideSpellCheckingResults)
{
await UIHelper.delayFor(0);
window.element = e;
const textToCheck = e.firstChild.nodeValue;
let spellCheckerResults = { };
if (overrideSpellCheckingResults)
spellCheckerResults[textToCheck] = overrideSpellCheckingResults;
await UIHelper.setSpellCheckerResults(spellCheckerResults);
for (let misspelling of misspellings) {
window.misspellingData = misspelling;
typeText(e, textToCheck);
if (misspellingData.marker == "grammar")
window.oppositeMarker = "spelling";
else if (misspellingData.marker == "spelling")
window.oppositeMarker = "grammar";
debug(`Checking for no other issues on "${textToCheck}"`);
await new Promise(resolve => shouldBecomeEqual("internals.markerCountForNode(element.firstChild, oppositeMarker)", "0", resolve));
debug("");
}
}
addEventListener("load", async function() {
await verifyDesiredMarkers(elementWithGrammarIssue, misspellings.slice(0, 1), results.slice(0, 1));
await verifyDesiredMarkers(elementWithGrammarIssue, misspellings.slice(1, 2), results.slice(1, 2));
await verifyDesiredMarkers(elementWithGrammarIssue, misspellings.slice(0, 2), results.slice(0, 2));
await verifyDesiredMarkers(elementWithSpellingIssue, misspellings.slice(3, 4));
await verifyDesiredMarkers(elementWithGrammarAndSpellingIssue, misspellings.slice(4, 6));
await verifyUnexpectedMarkers(elementWithGrammarIssue, misspellings.slice(0, 1), results.slice(0, 1));
await verifyUnexpectedMarkers(elementWithGrammarIssue, misspellings.slice(1, 2), results.slice(1, 2));
await verifyUnexpectedMarkers(elementWithSpellingIssue, misspellings.slice(3, 4));
finishJSTest();
});
</script>
</body>
</html>