diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 009b93595558b44633aa54d73e825d672dde40e6..123b69bd75dfacbb0f278be2e3b52cd847bb7dc5 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -1067,4 +1067,48 @@ GitClient *GitPlugin::gitClient() const return m_gitClient; } +#ifdef WITH_TESTS +#include <QTest> +Q_DECLARE_METATYPE(CommitData::FileState) +void GitPlugin::testStatusParsing_data() +{ + QTest::addColumn<QString>("line"); + QTest::addColumn<CommitData::FileState>("first"); + QTest::addColumn<CommitData::FileState>("second"); + +#define STATUS_TEST(status, first, second) \ + QTest::newRow(status) << QString::fromLatin1(status) << CommitData::first << CommitData::second; + STATUS_TEST(" M", ModifiedFile, UnknownFileState); + STATUS_TEST(" D", DeletedFile, UnknownFileState); + STATUS_TEST("M ", ModifiedStagedFile, UnknownFileState); + STATUS_TEST("MM", ModifiedStagedFile, ModifiedFile); + STATUS_TEST("MD", ModifiedStagedFile, DeletedFile); + STATUS_TEST("A ", AddedStagedFile, UnknownFileState); + STATUS_TEST("AM", AddedStagedFile, ModifiedFile); + STATUS_TEST("AD", AddedStagedFile, DeletedFile); + STATUS_TEST("D ", DeletedStagedFile, UnknownFileState); + STATUS_TEST("DM", DeletedStagedFile, ModifiedFile); + STATUS_TEST("R ", RenamedStagedFile, UnknownFileState); + STATUS_TEST("RM", RenamedStagedFile, ModifiedFile); + STATUS_TEST("RD", RenamedStagedFile, DeletedFile); + STATUS_TEST("C ", CopiedStagedFile, UnknownFileState); + STATUS_TEST("CM", CopiedStagedFile, ModifiedFile); + STATUS_TEST("CD", CopiedStagedFile, DeletedFile); +} + +void GitPlugin::testStatusParsing() +{ + CommitData data; + QFETCH(QString, line); + QFETCH(CommitData::FileState, first); + QFETCH(CommitData::FileState, second); + QString output = QLatin1String("## master...origin/master [ahead 1]\n"); + output += line + QLatin1String(" main.cpp\n"); + data.parseFilesFromStatus(output); + QCOMPARE(data.files.at(0).first, first); + if (second != CommitData::UnknownFileState) + QCOMPARE(data.files.at(1).first, second); +} +#endif + Q_EXPORT_PLUGIN(GitPlugin) diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h index 3d9b9f4659fc50ae44ab21d37ad3dc95b1047c76..2fdcfd2ee70eaedd8fb83852a58c99dfeaca66e3 100644 --- a/src/plugins/git/gitplugin.h +++ b/src/plugins/git/gitplugin.h @@ -132,6 +132,10 @@ private slots: void pull(); void push(); +#ifdef WITH_TESTS + void testStatusParsing_data(); + void testStatusParsing(); +#endif protected: virtual void updateActions(VcsBase::VcsBasePlugin::ActionState); virtual bool submitEditorAboutToClose(VcsBase::VcsBaseSubmitEditor *submitEditor);