diff options
author | Michael Meeks <michael.meeks@collabora.com> | 2020-02-03 22:55:52 +0100 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2020-02-10 23:23:04 +0100 |
commit | 10caa82b0a2c90d8b7ee1c05ca9a928815c6873c (patch) | |
tree | 927d4fcc58a6ad8c21f6ff36ccfc684bad57b32d /test/UnitTyping.cpp | |
parent | 5ff5cfe894ab1532f8679b884861185dfe03f0cf (diff) |
tdf#130382 - unit test for core fix for text input ordering issue.
Requires the relevant core commit.
Change-Id: I1b89c476ed6900bd0c5d981d125824c4bc2bf6da
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/87930
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
Diffstat (limited to 'test/UnitTyping.cpp')
-rw-r--r-- | test/UnitTyping.cpp | 62 |
1 files changed, 61 insertions, 1 deletions
diff --git a/test/UnitTyping.cpp b/test/UnitTyping.cpp index e3f6263a9..63835e3b4 100644 --- a/test/UnitTyping.cpp +++ b/test/UnitTyping.cpp @@ -12,6 +12,7 @@ #include <config.h> #include <random> +#include <iostream> #include <Exceptions.hpp> #include <Log.hpp> @@ -52,7 +53,66 @@ public: TestResult testWriterTyping() { -// const char* testname = "writerMultiViewEdit "; + const char* testname = "writerCompositionTest "; + std::string serverURL = LOOLWSD::getServerURL(); + const Poco::URI uri(serverURL); + + LOG_TRC("test writer typing"); + + // Load a doc with the cursor saved at a top row. + std::string documentPath, documentURL; + helpers::getDocumentPathAndURL( + "empty.odt", documentPath, documentURL, testname); + + std::shared_ptr<LOOLWebSocket> socket = helpers::loadDocAndGetSocket(uri, documentURL, testname); + + static const char *commands[] = { + "key type=up char=0 key=17", + "textinput id=0 type=input text=%E3%84%98", + "textinput id=0 type=end text=%E3%84%98", + "key type=up char=0 key=519", + + "textinput id=0 type=input text=%E3%84%9C", + "textinput id=0 type=end text=%E3%84%9C", + "key type=up char=0 key=522", + + "textinput id=0 type=input text=%CB%8B", + "textinput id=0 type=end text=%CB%8B", + "key type=up char=0 key=260", + + // replace with the complete character + "removetextcontext id=0 before=3 after=0", + "textinput id=0 type=input text=%E6%B8%AC", + "textinput id=0 type=end text=%E6%B8%AC", + "key type=up char=0 key=259" + }; + static const unsigned char correct[] = { + 0xe6, 0xb8, 0xac + }; + + // Feed the keystrokes ... + for (const char *str : commands) + sendTextFrame(socket, str, testname); + + // extract their text + sendTextFrame(socket, "uno .uno:SelectAll", testname); + sendTextFrame(socket, "gettextselection mimetype=text/plain;charset=utf-8", testname); + + LOG_TRC("Waiting for test selection:"); + const char response[] = "textselectioncontent:"; + const int responseLen = sizeof(response) - 1; + std::string result = getResponseString( + socket, response, testname, 5000 /* 5 secs */); + + LOG_TRC("length " << result.length() << " vs. " << (responseLen + 4)); + if (strncmp(result.c_str(), response, responseLen) || + result.length() < responseLen + 4 || + strncmp(result.c_str() + responseLen + 1, (const char *)correct, 3)) + { + Util::dumpHex(std::cerr, "Error: wrong textselectioncontent:", "", result); + return TestResult::Failed; + } + return TestResult::Ok; } |