Я пытаюсь найти способ написать несколько юнит-тестов, которые можно использовать для написания / тестирования новых редакторов wysiwyg html или просто поведения браузера по умолчанию для contenteditable div.
Я хочу записать нажатия клавиш (возможно, и другие события, но наиболее интересны нажатия клавиш) или просто записать события вручную, а затем воспроизвести их позже в div. В конце я бы использовал его для имитации небольших сессий редактирования html и выяснил, получится ли у вас ожидаемый сериализованный html.
НО, я не могу получить следующее, чтобы вызвать поведение браузера по умолчанию:
$(mydiv).trigger('keydown', {type: "keydown", keyCode: 13, which: 13});
(На самом деле он не вставляет разрыв строки, не разбивает абзац и не делает ничего.)
Я также пробовал такие вещи, как:
$(mydiv).trigger('textInput', {type: "textInput", data: 'H', target: mydiv});
(Который должен был вставить букву H)
и я даже попытался сохранить исходные объекты событий, а затем вызвать их так:
$(mydiv).trigger(eventObject);
(где eventObject - фактическое ключевое событие, которое я получил ранее, а затем хранил)
Отчасти проблема в том, что я не знаю, какие минимальные атрибуты объекта события мне нужно сохранить, а затем отправить позже. (Все это не вариант, потому что вы не можете просто вывести все событие как JSON из-за всех циклических ссылок.)
Другая часть проблемы - я даже не уверен, как правильно сфокусировать редактируемое
Как минимум мне нужно иметь возможность создать новый пустой div, установить contenteditable = "true", а затем "вставить некоторый текст", поместить курсор в середину и "нажать ввод", читая и воспроизводя команды из журнала редактирования событий.
Вот почему мне это нужно:
Идея состоит в том, чтобы написать множество крошечных тестов, которые можно запустить в любом современном браузере (меня действительно интересуют только последние версии Chrome, Firefox, Opera и , возможно, IE9) для посмотрите, чем они отличаются от ожидаемых. Это для обзора того, что делают последние браузеры, а не для того, что делали 10-летние браузеры.
Затем я могу составить некоторый контрольный список того, где браузеры отклоняются друг от друга. Затем он может быть использован любым, кто хочет написать новый редактор wysiwyg, но в идеале его «ядро» - части, которые не содержат или не заботятся о каком-либо интерфейсе / chrome - может быть написано один раз и совместно использоваться всеми.
Отдельные редакторы обрабатывают такие вещи, как вставка / удаление встроенных элементов, связывание текста, вставка / редактирование изображений, вставка списков и таблиц, изменение p на h1 и так далее. Меня интересует только редактирование на уровне нажатия клавиш.
Некоторые из этих тестов также можно использовать аналогично тому, как фреймворки javascript «обнаруживают особенности», чтобы увидеть, какие биты поведения необходимо перехватить / пропатчить так, чтобы ввод и возврат всегда вели себя одинаково, так что курсор всегда на правильной стороне тега ab и т. д.