diff options
author | Sami Shalayel <sami.shalayel@qt.io> | 2024-04-05 11:04:22 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2024-04-29 09:21:21 +0200 |
commit | 1635ca51f018bbb8d1ea5069a7f2ed8503be8cb9 (patch) | |
tree | 8181636d38c791b85a31ce7f8a873348d13f261b /tests | |
parent | 4861a1b65a6f3b41acde109caca6024bb89da6af (diff) |
qmlls: adapt the qtlanguageserver changes in WorkspaceEdit
Adapt to the changes in WorkspaceEdit that makes the handling of the
documentChanges variant easier in the tests.
Task-number: QTBUG-114993
Change-Id: Ic092d8faccbe3fb32e81e8b08d5ecef22bad908a
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qmlls/modules/tst_qmlls_modules.cpp | 120 | ||||
-rw-r--r-- | tests/auto/qmlls/modules/tst_qmlls_modules.h | 2 | ||||
-rw-r--r-- | tests/auto/qmlls/qmlls/tst_qmlls.cpp | 8 |
3 files changed, 61 insertions, 69 deletions
diff --git a/tests/auto/qmlls/modules/tst_qmlls_modules.cpp b/tests/auto/qmlls/modules/tst_qmlls_modules.cpp index 764a8f65cd..9145bb7566 100644 --- a/tests/auto/qmlls/modules/tst_qmlls_modules.cpp +++ b/tests/auto/qmlls/modules/tst_qmlls_modules.cpp @@ -874,7 +874,7 @@ void tst_qmlls_modules::renameUsages_data() // TODO: create workspace edit for the tests QLspSpecification::WorkspaceEdit sumRenames{ std::nullopt, // TODO - QList<TextDocumentEdit>{ + QList<QLspSpecification::WorkspaceEdit::DocumentChange>{ TextDocumentEdit{ OptionalVersionedTextDocumentIdentifier{ { jsIdentifierUsagesUri } }, { @@ -907,6 +907,38 @@ void tst_qmlls_modules::renameUsages_data() }; } +void tst_qmlls_modules::compareQTextDocumentEdit(const TextDocumentEdit &a, + const TextDocumentEdit &b) +{ + + QCOMPARE(a.textDocument.uri, b.textDocument.uri); + QVERIFY(a.textDocument.uri.startsWith("file://")); + QCOMPARE(a.textDocument.version, b.textDocument.version); + QCOMPARE(a.edits.size(), b.edits.size()); + + for (qsizetype j = 0; j < a.edits.size(); ++j) { + std::visit( + [](auto &&textEdit, auto &&expectedTextEdit) { + using U = std::decay_t<decltype(textEdit)>; + using V = std::decay_t<decltype(expectedTextEdit)>; + + if constexpr (std::conjunction_v<std::is_same<U, V>, + std::is_same<U, TextEdit>>) { + QCOMPARE(textEdit.range.start.line, expectedTextEdit.range.start.line); + QCOMPARE(textEdit.range.start.character, + expectedTextEdit.range.start.character); + QCOMPARE(textEdit.range.end.line, expectedTextEdit.range.end.line); + QCOMPARE(textEdit.range.end.character, + expectedTextEdit.range.end.character); + QCOMPARE(textEdit.newText, expectedTextEdit.newText); + } else { + QFAIL("Comparison not implemented"); + } + }, + a.edits[j], b.edits[j]); + } +} + void tst_qmlls_modules::renameUsages() { QFETCH(QString, filePath); @@ -944,66 +976,24 @@ void tst_qmlls_modules::renameUsages() QCOMPARE(result->documentChanges.has_value(), expectedEdit.documentChanges.has_value()); - std::visit( - [&expectedError](auto &&documentChanges, auto &&expectedDocumentChanges) { - if (!expectedError.message.isEmpty()) - QVERIFY2(false, "No expected error was thrown."); - - QCOMPARE(documentChanges.size(), expectedDocumentChanges.size()); - using U = std::decay_t<decltype(documentChanges)>; - using V = std::decay_t<decltype(expectedDocumentChanges)>; - - if constexpr (std::conjunction_v< - std::is_same<U, V>, - std::is_same<U, QList<TextDocumentEdit>>>) { - for (qsizetype i = 0; i < expectedDocumentChanges.size(); ++i) { - QCOMPARE(documentChanges[i].textDocument.uri, - expectedDocumentChanges[i].textDocument.uri); - QVERIFY(documentChanges[i].textDocument.uri.startsWith( - "file://")); - QCOMPARE(documentChanges[i].textDocument.version, - expectedDocumentChanges[i].textDocument.version); - QCOMPARE(documentChanges[i].edits.size(), - expectedDocumentChanges[i].edits.size()); - - for (qsizetype j = 0; j < documentChanges[i].edits.size(); - ++j) { - std::visit( - [](auto &&textEdit, auto &&expectedTextEdit) { - using U = std::decay_t<decltype(textEdit)>; - using V = std::decay_t< - decltype(expectedTextEdit)>; - - if constexpr (std::conjunction_v< - std::is_same<U, V>, - std::is_same<U, - TextEdit>>) { - QCOMPARE(textEdit.range.start.line, - expectedTextEdit.range.start.line); - QCOMPARE(textEdit.range.start.character, - expectedTextEdit.range.start - .character); - QCOMPARE(textEdit.range.end.line, - expectedTextEdit.range.end.line); - QCOMPARE(textEdit.range.end.character, - expectedTextEdit.range.end - .character); - QCOMPARE(textEdit.newText, - expectedTextEdit.newText); - } else { - QFAIL("Comparison not implemented"); - } - }, - documentChanges[i].edits[j], - expectedDocumentChanges[i].edits[j]); - } - } + auto &documentChanges = *result->documentChanges; + auto &expectedDocumentChanges = *expectedEdit.documentChanges; - } else { - QFAIL("Comparison not implemented"); - } - }, - result->documentChanges.value(), expectedEdit.documentChanges.value()); + if (!expectedError.message.isEmpty()) + QVERIFY2(false, "No expected error was thrown."); + + QCOMPARE(documentChanges.size(), expectedDocumentChanges.size()); + + for (qsizetype i = 0; i < expectedDocumentChanges.size(); ++i) { + QCOMPARE(documentChanges[i].index(), expectedDocumentChanges[i].index()); + if (std::holds_alternative<TextDocumentEdit>(documentChanges[i])) { + compareQTextDocumentEdit( + std::get<TextDocumentEdit>(documentChanges[i]), + std::get<TextDocumentEdit>(expectedDocumentChanges[i])); + } else { + QFAIL("TODO: implement me!"); + } + } }, [clean, &expectedError](const ResponseError &err) { QScopeGuard cleanup(clean); @@ -1487,12 +1477,12 @@ void tst_qmlls_modules::quickFixes() QVERIFY(codeAction.edit); QVERIFY(codeAction.edit->documentChanges); - QVERIFY(std::holds_alternative<QList<TextDocumentEdit>>(*codeAction.edit->documentChanges)); - auto edits = std::get<QList<TextDocumentEdit>>(*codeAction.edit->documentChanges); + const auto &edits = *codeAction.edit->documentChanges; QCOMPARE(edits.size(), 1); - QCOMPARE(edits.front().edits.size(), 1); - QVERIFY(std::holds_alternative<TextEdit>(edits.front().edits.front())); - auto textEdit = std::get<TextEdit>(edits.front().edits.front()); + const auto& firstEdit = std::get<TextDocumentEdit>(edits.front()); + QCOMPARE(firstEdit.edits.size(), 1); + QVERIFY(std::holds_alternative<TextEdit>(firstEdit.edits.front())); + auto textEdit = std::get<TextEdit>(firstEdit.edits.front()); // make sure that the quick fix does something QCOMPARE(textEdit.newText, replacementText); diff --git a/tests/auto/qmlls/modules/tst_qmlls_modules.h b/tests/auto/qmlls/modules/tst_qmlls_modules.h index 352af1d928..d48bc99407 100644 --- a/tests/auto/qmlls/modules/tst_qmlls_modules.h +++ b/tests/auto/qmlls/modules/tst_qmlls_modules.h @@ -37,6 +37,8 @@ public: std::optional<QByteArray> openFile(const QString &uri); std::optional<QByteArray> openFileFromAbsolutePath(const QString &uri); void ignoreDiagnostics(); + void compareQTextDocumentEdit(const QLspSpecification::TextDocumentEdit &a, + const QLspSpecification::TextDocumentEdit &b); private slots: void init() final; void cleanup(); diff --git a/tests/auto/qmlls/qmlls/tst_qmlls.cpp b/tests/auto/qmlls/qmlls/tst_qmlls.cpp index 4507a4b8b9..9e057992c4 100644 --- a/tests/auto/qmlls/qmlls/tst_qmlls.cpp +++ b/tests/auto/qmlls/qmlls/tst_qmlls.cpp @@ -219,12 +219,12 @@ void tst_Qmlls::didOpenTextDocument() WorkspaceEdit edit = action.edit.value(); QVERIFY(edit.documentChanges.has_value()); - auto docChangeVariant = edit.documentChanges.value(); - QVERIFY(std::holds_alternative<QList<TextDocumentEdit>>(docChangeVariant)); - auto documentChanges = std::get<QList<TextDocumentEdit>>(docChangeVariant); + auto documentChanges = edit.documentChanges.value(); QCOMPARE(documentChanges.size(), 1); - TextDocumentEdit textDocEdit = documentChanges.first(); + QVERIFY(std::holds_alternative<TextDocumentEdit>(documentChanges.first())); + TextDocumentEdit textDocEdit + = std::get<TextDocumentEdit>(documentChanges.first()); QCOMPARE(textDocEdit.textDocument.uri, textDocument.uri); QVERIFY(std::holds_alternative<int>(textDocEdit.textDocument.version)); |