/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; async function test() { waitForExplicitFinish(); const { ed, win } = await setup(); // appendTo const cmFrame = win.document.querySelector("iframe"); const cmStyle = cmFrame.contentDocument.getElementById("cmBaseStyle"); ok(~cmStyle.innerHTML.indexOf(".CodeMirror"), "correct iframe is there"); // getOption/setOption ok(ed.getOption("styleActiveLine"), "getOption works"); ed.setOption("styleActiveLine", false); ok(!ed.getOption("styleActiveLine"), "setOption works"); // Language modes is(ed.getMode(), Editor.modes.text, "getMode"); ed.setMode(Editor.modes.js); is(ed.getMode(), Editor.modes.js, "setMode"); // Content is(ed.getText(), "Hello.", "getText"); ed.setText("Hi.\nHow are you?"); is(ed.getText(), "Hi.\nHow are you?", "setText"); is(ed.getText(1), "How are you?", "getText(num)"); is(ed.getText(5), "", "getText(num) when num is out of scope"); ed.replaceText("YOU", { line: 1, ch: 8 }, { line: 1, ch: 11 }); is(ed.getText(1), "How are YOU?", "replaceText(str, from, to)"); ed.replaceText("you?", { line: 1, ch: 8 }); is(ed.getText(1), "How are you?", "replaceText(str, from)"); ed.replaceText("Hello."); is(ed.getText(), "Hello.", "replaceText(str)"); ed.insertText(", sir/madam", { line: 0, ch: 5 }); is(ed.getText(), "Hello, sir/madam.", "insertText"); // Add-ons ed.extend({ whoami: () => "Anton", whereami: () => "Mozilla" }); is(ed.whoami(), "Anton", "extend/1"); is(ed.whereami(), "Mozilla", "extend/2"); // Line classes ed.setText("Hello!\nHow are you?"); ok(!ed.hasLineClass(0, "test"), "no test line class"); ed.addLineClass(0, "test"); ok(ed.hasLineClass(0, "test"), "test line class is there"); ed.removeLineClass(0, "test"); ok(!ed.hasLineClass(0, "test"), "test line class is gone"); // Font size const size = ed.getFontSize(); is("number", typeof size, "we have the default font size"); ed.setFontSize(ed.getFontSize() + 1); is(ed.getFontSize(), size + 1, "new font size was set"); info("Check that we display unicode values for non-printable characters"); ed.setText("> \u202e \u2066 - \u2069 \u2066 <"); const doc = win.document.querySelector("iframe").contentWindow.document; const nonPrintableCharElements = Array.from( doc.querySelectorAll(".cm-non-printable-char") ); Assert.deepEqual( nonPrintableCharElements.map(el => el.textContent), ["\\u202e", "\\u2066", "\\u2069", "\\u2066"], "non printable chars are displayed as expected" ); teardown(ed, win); }