summaryrefslogtreecommitdiff
path: root/src/plugins/diffeditor/diffeditorplugin.cpp
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@qt.io>2019-11-20 16:01:17 +0100
committerJarek Kobus <jaroslaw.kobus@qt.io>2019-12-02 15:49:03 +0000
commit3b9ce988651b53563fddbb3927d747f23b48b923 (patch)
treea11893e68fe00415cb340cba260c32e843b81f76 /src/plugins/diffeditor/diffeditorplugin.cpp
parent27d503558fdd18fdc3ba21deac85ed63f8c4518b (diff)
downloadqt-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.cpp196
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);
}
}