From ad4d01233b9371212e71cdb48cf9519d6506502a Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Thu, 16 May 2019 14:42:01 +0200 Subject: [PATCH] DEV: attempts to make d-editor tests more resilient (#7556) --- .../discourse/components/d-editor.js.es6 | 6 ++-- .../components/d-editor-test.js.es6 | 31 +++++++++++-------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/app/assets/javascripts/discourse/components/d-editor.js.es6 b/app/assets/javascripts/discourse/components/d-editor.js.es6 index bd6c092ce5c..1a1450a4c23 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 bb7429376fc..efec8ba0cb6 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