diff --git a/test/editor/mock.js b/test/editor/mock.js new file mode 100644 index 0000000000..57ad0c52f3 --- /dev/null +++ b/test/editor/mock.js @@ -0,0 +1,69 @@ +/* +Copyright 2019 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import {PartCreator} from "../../src/editor/parts"; + +class MockAutoComplete { + constructor(updateCallback, partCreator, completions) { + this._updateCallback = updateCallback; + this._partCreator = partCreator; + this._completions = completions; + this._part = null; + } + + close() { + this._updateCallback({close: true}); + } + + tryComplete(close = true) { + const matches = this._completions.filter(o => { + return o.resourceId.startsWith(this._part.text); + }); + if (matches.length === 1 && this._part.text.length > 1) { + const match = matches[0]; + let pill; + if (match.resourceId[0] === "@") { + pill = this._partCreator.userPill(match.label, match.resourceId); + } else { + pill = this._partCreator.roomPill(match.resourceId); + } + this._updateCallback({replacePart: pill, close}); + } + } + + // called by EditorModel when typing into pill-candidate part + onPartUpdate(part, offset) { + this._part = part; + } +} + +// MockClient & MockRoom are only used for avatars in room and user pills, +// which is not tested +class MockClient { + getRooms() { return []; } + getRoom() { return null; } +} + +class MockRoom { + getMember() { return null; } +} + +export function createPartCreator(completions = []) { + const autoCompleteCreator = (partCreator) => { + return (updateCallback) => new MockAutoComplete(updateCallback, partCreator, completions); + }; + return new PartCreator(autoCompleteCreator, new MockRoom(), new MockClient()); +} diff --git a/test/editor/model-test.js b/test/editor/model-test.js index a8d891e280..c5f2a2ef12 100644 --- a/test/editor/model-test.js +++ b/test/editor/model-test.js @@ -16,59 +16,7 @@ limitations under the License. import expect from 'expect'; import EditorModel from "../../src/editor/model"; -import {PartCreator} from "../../src/editor/parts"; - -class MockAutoComplete { - constructor(updateCallback, partCreator, completions) { - this._updateCallback = updateCallback; - this._partCreator = partCreator; - this._completions = completions; - this._part = null; - } - - close() { - this._updateCallback({close: true}); - } - - tryComplete(close = true) { - const matches = this._completions.filter(o => { - return o.resourceId.startsWith(this._part.text); - }); - if (matches.length === 1 && this._part.text.length > 1) { - const match = matches[0]; - let pill; - if (match.resourceId[0] === "@") { - pill = this._partCreator.userPill(match.label, match.resourceId); - } else { - pill = this._partCreator.roomPill(match.resourceId); - } - this._updateCallback({replacePart: pill, close}); - } - } - - // called by EditorModel when typing into pill-candidate part - onPartUpdate(part, offset) { - this._part = part; - } -} - -// MockClient & MockRoom are only used for avatars in room and user pills, -// which is not tested -class MockClient { - getRooms() { return []; } - getRoom() { return null; } -} - -class MockRoom { - getMember() { return null; } -} - -function createPartCreator(completions = []) { - const autoCompleteCreator = (partCreator) => { - return (updateCallback) => new MockAutoComplete(updateCallback, partCreator, completions); - }; - return new PartCreator(autoCompleteCreator, new MockRoom(), new MockClient()); -} +import {createPartCreator} from "./mock"; function createRenderer() { const render = (c) => {