chromium/third_party/blink/web_tests/editing/pasteboard/copy-backslash-with-euc.html

<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8">
<script>

if (window.testRunner)
    testRunner.dumpAsText();

// Select an element an return its value.
function selectElement(doc, element)
{
    if (element.tagName.toLowerCase() == 'input') {
        element.focus();
        element.select();
        return element.value;
    } else {
        doc.getSelection().selectAllChildren(element);
        return element.innerText;
    }
}

function testCopyAndPasteTexts(fromDocument, fromName, toDocument, toName)
{
    var resultsElement = document.getElementById("results");

    var pasteboardElement = toDocument.getElementById("pasteboard");

    var fromElementNames = ["div", "transform", "secure", "control"];
    for (var i = 0; i < fromElementNames.length; i++) {
        var fromElementName = fromElementNames[i];
        var fromElement = fromDocument.getElementById(fromElementName);
        selectElement(fromDocument, fromElement);
        fromDocument.execCommand("Copy");

        var toElementNameSuffixes = ["text-control", "content-editable"];
        for (var j = 0; j < toElementNameSuffixes.length; j++) {
            var toElementNameSuffix = toElementNameSuffixes[j];

            var testName = "from " + fromName.toUpperCase() + " " + fromElementName + " to " + toName.toUpperCase() + " " + toElementNameSuffix + ": ";
            var toDescriptionText = toDocument.createTextNode(testName);
            pasteboardElement.appendChild(toDescriptionText);
            var toElement = null;
            if (toElementNameSuffix == "text-control") {
                toElement = toDocument.createElement("input");
                toElement.value = "FAIL";
            } else {
                toElement = toDocument.createElement("span");
                toElement.contentEditable = "true";
                toElement.innerHTML = "FAIL";
            }
            pasteboardElement.appendChild(toElement);
            pasteboardElement.appendChild(toDocument.createElement("br"));

            selectElement(toDocument, toElement);
            toDocument.execCommand("Paste");
            var actualText = selectElement(toDocument, toElement);

            var result = "PASS";
            var expectedLeadingString = "\\\\ from ";
            if (fromElementName == "secure")
                expectedLeadingString = "•••••••";
            // Plain text is copied to input element whereas HTML text is copied to span element. 
            // 'element.innerText' returns transformed text if text-transform is present...
            // So we only need to transform the expected string to upper case for span element
            else if (fromElementName == "transform" && toElementNameSuffix == "content-editable")
                expectedLeadingString = expectedLeadingString.toUpperCase();
            if (actualText.search(expectedLeadingString) != 0)
                result = "FAIL: the actual text was '" + actualText + "' (char code of the first character was " + actualText.charCodeAt(0) + ")";

            resultsElement.innerHTML += testName + result + "<br>";
        }
    }
}

function test()
{
    testCopyAndPasteTexts(frames[0].document, "euc", document, "utf8");
    testCopyAndPasteTexts(document, "utf8", frames[0].document, "euc");
}

</script>
</head>

<body onload="test()">

<div>
<iframe src="resources/copy-backslash-euc.html" width="600" height="300"></iframe>
</div>

<h2>Original texts which will be copied</h2>
<div id="div">\ from UTF8 page</div>
<div id="transform" style="text-transform:uppercase">\ from UTF8 page (transformed)</div>
<div id="secure" style="-webkit-text-security:disc">\ from UTF8 page (secure)</div>
<input id="control" value="\ from UTF8 text control">

<h2>Texts in the EUC frame will be pasted here</h2>
<div id="pasteboard"></div>

<br>

<h2>Results</h2>
<p id="results">
</p>

</body>

</html>