diff options
author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2019-11-20 16:01:17 +0100 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2019-12-02 15:49:03 +0000 |
commit | 3b9ce988651b53563fddbb3927d747f23b48b923 (patch) | |
tree | a11893e68fe00415cb340cba260c32e843b81f76 /src/plugins/diffeditor/diffeditorplugin.cpp | |
parent | 27d503558fdd18fdc3ba21deac85ed63f8c4518b (diff) | |
download | qt-creator-3b9ce988651b53563fddbb3927d747f23b48b923.tar.gz |
Git/DiffEditor: Fix staging added/removed lines separately
Fixes: QTCREATORBUG-23243
Change-Id: Ice19e1c778aabd9cb1b9fe0681234073de85cfcb
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: André Hartmann <aha_1980@gmx.de>
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Diffstat (limited to 'src/plugins/diffeditor/diffeditorplugin.cpp')
-rw-r--r-- | src/plugins/diffeditor/diffeditorplugin.cpp | 196 |
1 files changed, 147 insertions, 49 deletions
diff --git a/src/plugins/diffeditor/diffeditorplugin.cpp b/src/plugins/diffeditor/diffeditorplugin.cpp index 652c6e9d14..a4372ae0b1 100644 --- a/src/plugins/diffeditor/diffeditorplugin.cpp +++ b/src/plugins/diffeditor/diffeditorplugin.cpp @@ -1431,11 +1431,14 @@ void DiffEditor::Internal::DiffEditorPlugin::testReadPatch() } } +using ListOfStringPairs = QList<QPair<QString, QString>>; + void DiffEditor::Internal::DiffEditorPlugin::testFilterPatch_data() { QTest::addColumn<ChunkData>("chunk"); - QTest::addColumn<QStringList>("rightLines"); + QTest::addColumn<ListOfStringPairs>("rows"); QTest::addColumn<ChunkSelection>("selection"); + QTest::addColumn<bool>("revert"); auto createChunk = []() { ChunkData chunk; @@ -1455,29 +1458,29 @@ void DiffEditor::Internal::DiffEditorPlugin::testFilterPatch_data() chunk->rows.append(row); }; ChunkData chunk; - QStringList rightLines; + ListOfStringPairs rows; chunk = createChunk(); appendRow(&chunk, "A", "A"); // 50 appendRow(&chunk, "", "B"); // 51 + appendRow(&chunk, "C", "C"); // 52 - rightLines = QStringList { - "A", - "B", - "C" + rows = ListOfStringPairs { + {"A", "A"}, + {"", "B"}, + {"C", "C"} }; - QTest::newRow("one added") << chunk << rightLines << ChunkSelection(); + QTest::newRow("one added") << chunk << rows << ChunkSelection() << false; chunk = createChunk(); appendRow(&chunk, "A", "A"); // 50 appendRow(&chunk, "B", ""); // 51 - appendRow(&chunk, "C", "C"); // 52 - rightLines = QStringList { - "A", - "", - "C" + rows = ListOfStringPairs { + {"A", "A"}, + {"B", ""}, + {"C", "C"} }; - QTest::newRow("one removed") << chunk << rightLines << ChunkSelection(); + QTest::newRow("one removed") << chunk << rows << ChunkSelection() << false; chunk = createChunk(); appendRow(&chunk, "A", "A"); // 50 @@ -1486,26 +1489,26 @@ void DiffEditor::Internal::DiffEditorPlugin::testFilterPatch_data() appendRow(&chunk, "", "D"); // 53 + appendRow(&chunk, "", "E"); // 54 appendRow(&chunk, "F", "F"); // 55 - rightLines = QStringList { - "A", - "C", - "D", - "F", + rows = ListOfStringPairs { + {"A", "A"}, + {"", "C"}, + {"", "D"}, + {"F", "F"} }; - QTest::newRow("stage selected added") << chunk << rightLines << ChunkSelection(2, 2); + QTest::newRow("stage selected added") << chunk << rows << ChunkSelection({2, 3}, {2, 3}) << false; chunk = createChunk(); appendRow(&chunk, "A", "A"); // 50 appendRow(&chunk, "", "B"); // 51 + appendRow(&chunk, "C", "D"); // 52 appendRow(&chunk, "E", "E"); // 53 - rightLines = QStringList { - "A", - "B", - "C", - "E", + rows = ListOfStringPairs { + {"A", "A"}, + {"", "B"}, + {"C", "C"}, + {"E", "E"} }; - QTest::newRow("stage selected added keep changed") << chunk << rightLines << ChunkSelection(1, 1); + QTest::newRow("stage selected added keep changed") << chunk << rows << ChunkSelection({1}, {1}) << false; chunk = createChunk(); appendRow(&chunk, "A", "A"); // 50 @@ -1514,15 +1517,15 @@ void DiffEditor::Internal::DiffEditorPlugin::testFilterPatch_data() appendRow(&chunk, "D", ""); // 53 - appendRow(&chunk, "E", ""); // 54 appendRow(&chunk, "F", "F"); // 55 - rightLines = QStringList { - "A", - "B", - "", - "", - "E", - "F", + rows = ListOfStringPairs { + {"A", "A"}, + {"B", "B"}, + {"C", ""}, + {"D", ""}, + {"E", "E"}, + {"F", "F"} }; - QTest::newRow("stage selected removed") << chunk << rightLines << ChunkSelection(2, 2); + QTest::newRow("stage selected removed") << chunk << rows << ChunkSelection({2, 3}, {2, 3}) << false; chunk = createChunk(); appendRow(&chunk, "A", "A"); // 50 @@ -1531,37 +1534,132 @@ void DiffEditor::Internal::DiffEditorPlugin::testFilterPatch_data() appendRow(&chunk, "", "D"); // 53 + appendRow(&chunk, "", "E"); // 54 appendRow(&chunk, "F", "F"); // 55 - rightLines = QStringList { - "A", - "B", - "", - "D", - "F", + rows = ListOfStringPairs { + {"A", "A"}, + {"B", "B"}, + {"C", ""}, + {"", "D"}, + {"F", "F"} + }; + QTest::newRow("stage selected added/removed") << chunk << rows << ChunkSelection({2, 3}, {2, 3}) << false; + + chunk = createChunk(); + appendRow(&chunk, "A", "A"); // 50 + appendRow(&chunk, "B", "C"); // 51 -/+ + appendRow(&chunk, "D", "D"); // 52 + rows = ListOfStringPairs { + {"A", "A"}, + {"B", "C"}, + {"D", "D"} + }; + QTest::newRow("stage modified row") << chunk << rows << ChunkSelection({1}, {1}) << false; + + chunk = createChunk(); + appendRow(&chunk, "A", "A"); // 50 + appendRow(&chunk, "B", "C"); // 51 -/+ + appendRow(&chunk, "D", "D"); // 52 + rows = ListOfStringPairs { + {"A", "A"}, + {"B", "C"}, + {"D", "D"} + }; + QTest::newRow("stage modified and unmodified rows") << chunk << rows << ChunkSelection({0, 1, 2}, {0, 1, 2}) << false; + + chunk = createChunk(); + appendRow(&chunk, "A", "A"); // 50 + appendRow(&chunk, "B", "C"); // 51 -/+ + appendRow(&chunk, "D", "D"); // 52 + rows = ListOfStringPairs { + {"A", "A"}, + {"B", "C"}, + {"D", "D"} + }; + QTest::newRow("stage unmodified left rows") << chunk << rows << ChunkSelection({0, 1, 2}, {1}) << false; + + chunk = createChunk(); + appendRow(&chunk, "A", "A"); // 50 + appendRow(&chunk, "B", "C"); // 51 -/+ + appendRow(&chunk, "D", "D"); // 52 + rows = ListOfStringPairs { + {"A", "A"}, + {"B", "C"}, + {"D", "D"} }; - QTest::newRow("stage selected added/removed") << chunk << rightLines << ChunkSelection(2, 2); + QTest::newRow("stage unmodified right rows") << chunk << rows << ChunkSelection({1}, {0, 1, 2}) << false; chunk = createChunk(); appendRow(&chunk, "A", "A"); // 50 appendRow(&chunk, "B", "C"); // 51 -/+ appendRow(&chunk, "D", "D"); // 52 - rightLines = QStringList { - "A", - "C", - "D", + rows = ListOfStringPairs { + {"A", "A"}, + {"B", ""}, + {"D", "D"} }; - QTest::newRow("stage modified row") << chunk << rightLines << ChunkSelection(1, 1); + QTest::newRow("stage left only") << chunk << rows << ChunkSelection({1}, {}) << false; + + chunk = createChunk(); + appendRow(&chunk, "A", "A"); // 50 + appendRow(&chunk, "B", "C"); // 51 -/+ + appendRow(&chunk, "D", "D"); // 52 + rows = ListOfStringPairs { + {"A", "A"}, + {"B", "B"}, + {"", "C"}, + {"D", "D"} + }; + QTest::newRow("stage right only") << chunk << rows << ChunkSelection({}, {1}) << false; + + chunk = createChunk(); + appendRow(&chunk, "A", "A"); // 50 + appendRow(&chunk, "B", "C"); // 51 -/+ + appendRow(&chunk, "D", "D"); // 52 + rows = ListOfStringPairs { + {"A", "A"}, + {"B", "C"}, + {"D", "D"} + }; + QTest::newRow("stage modified row and revert") << chunk << rows << ChunkSelection({1}, {1}) << true; + + chunk = createChunk(); + appendRow(&chunk, "A", "A"); // 50 + appendRow(&chunk, "B", "C"); // 51 -/+ + appendRow(&chunk, "D", "D"); // 52 + rows = ListOfStringPairs { + {"A", "A"}, + {"B", ""}, + {"C", "C"}, + {"D", "D"} + }; + // symmetric to: "stage right only" + QTest::newRow("stage left only and revert") << chunk << rows << ChunkSelection({1}, {}) << true; + + chunk = createChunk(); + appendRow(&chunk, "A", "A"); // 50 + appendRow(&chunk, "B", "C"); // 51 -/+ + appendRow(&chunk, "D", "D"); // 52 + rows = ListOfStringPairs { + {"A", "A"}, + {"", "C"}, + {"D", "D"} + }; + // symmetric to: "stage left only" + QTest::newRow("stage right only and revert") << chunk << rows << ChunkSelection({}, {1}) << true; + } void DiffEditor::Internal::DiffEditorPlugin::testFilterPatch() { QFETCH(ChunkData, chunk); - QFETCH(QStringList, rightLines); + QFETCH(ListOfStringPairs, rows); QFETCH(ChunkSelection, selection); + QFETCH(bool, revert); - ChunkData result = DiffEditorDocument::filterChunk(chunk, selection, false); - QCOMPARE(result.rows.size(), rightLines.size()); - for (int i = 0; i < rightLines.size(); ++i) { - QCOMPARE(result.rows.at(i).rightLine.text, rightLines.at(i)); + const ChunkData result = DiffEditorDocument::filterChunk(chunk, selection, revert); + QCOMPARE(result.rows.size(), rows.size()); + for (int i = 0; i < rows.size(); ++i) { + QCOMPARE(result.rows.at(i).leftLine.text, rows.at(i).first); + QCOMPARE(result.rows.at(i).rightLine.text, rows.at(i).second); } } |