DEV: attempts to make d-editor tests more resilient (#7556)

DEV: attempts to make d-editor tests more resilient (#7556)

diff --git a/app/assets/javascripts/discourse/components/d-editor.js.es6 b/app/assets/javascripts/discourse/components/d-editor.js.es6
index bd6c092..1a1450a 100644
--- a/app/assets/javascripts/discourse/components/d-editor.js.es6
+++ b/app/assets/javascripts/discourse/components/d-editor.js.es6
@@ -675,7 +675,7 @@ export default Ember.Component.extend({
     }
   },
 
-  _replaceText(oldVal, newVal, opts) {
+  _replaceText(oldVal, newVal, opts = {}) {
     const val = this.get("value");
     const needleStart = val.indexOf(oldVal);
 
@@ -693,7 +693,7 @@ export default Ember.Component.extend({
       replacement: { start: needleStart, end: needleStart + newVal.length }
     });
 
-    if (opts && opts.index && opts.regex) {
+    if (opts.index && opts.regex) {
       let i = -1;
       const newValue = val.replace(opts.regex, match => {
         i++;
@@ -705,7 +705,7 @@ export default Ember.Component.extend({
       this.set("value", val.replace(oldVal, newVal));
     }
 
-    if ($("textarea.d-editor-input").is(":focus")) {
+    if (opts.forceFocus || $("textarea.d-editor-input").is(":focus")) {
       // Restore cursor.
       this._selectText(
         newSelection.start,
diff --git a/test/javascripts/components/d-editor-test.js.es6 b/test/javascripts/components/d-editor-test.js.es6
index bb74293..efec8ba 100644
--- a/test/javascripts/components/d-editor-test.js.es6
+++ b/test/javascripts/components/d-editor-test.js.es6
@@ -761,13 +761,12 @@ composerTestCase("replace-text event for composer", async function(assert) {
       before: [BEFORE.length, 0],
       after: [AFTER.length, 0]
     },
-    // Flaky test. Marked as pending
-    //{
-    //  description:
-    //    "selection spanning needle start becomes selection until replacement start",
-    //  before: [BEFORE.indexOf(NEEDLE) - 1, 2],
-    //  after: [AFTER.indexOf(REPLACE) - 1, 1]
-    //},
+    {
+      description:
+        "selection spanning needle start becomes selection until replacement start",
+      before: [BEFORE.indexOf(NEEDLE) - 1, 2],
+      after: [AFTER.indexOf(REPLACE) - 1, 1]
+    },
     {
       description:
         "selection spanning needle end becomes selection from replacement end",
@@ -805,16 +804,22 @@ composerTestCase("replace-text event for composer", async function(assert) {
       assert,
       textarea
     ) {
-      const focusEvent = $.Event("focus");
-      const $input = $('textarea.d-editor-input');
-      $input.trigger(focusEvent);
-
       this.set("value", BEFORE);
-      await setSelection(textarea, CASE.before);
+
+      textarea.focus();
+
+      assert.ok(document.activeElement === textarea);
+      assert.ok(textarea.value === BEFORE);
+
+      setSelection(textarea, CASE.before);
+
+      assert.ok(document.activeElement === textarea);
 
       this.container
         .lookup("app-events:main")
-        .trigger("composer:replace-text", "green", "yellow");
+        .trigger("composer:replace-text", "green", "yellow", {forceFocus: true});
+
+      assert.ok(document.activeElement === textarea);
 
       let expect = await formatTextWithSelection(AFTER, CASE.after); // eslint-disable-line no-undef
       let actual = await formatTextWithSelection( // eslint-disable-line no-undef

GitHub sha: ad4d0123

1 Like