File indexing completed on 2025-03-09 05:11:39

0001 /*
0002 SPDX-FileCopyrightText: 2022 Laurent Montel <montel@kde.org>
0003 
0004 SPDX-License-Identifier: GPL-3.0-or-later
0005 */
0006 
0007 #include "branchesdifftest.h"
0008 #include "testcommon.h"
0009 
0010 #include <QTest>
0011 #include <entities/branch.h>
0012 #include <gitmanager.h>
0013 
0014 QTEST_GUILESS_MAIN(BranchesDiffTest)
0015 
0016 BranchesDiffTest::BranchesDiffTest(QObject *parent)
0017     : QObject{parent}
0018 {
0019 }
0020 
0021 void BranchesDiffTest::initTestCase()
0022 {
0023     auto path = TestCommon::getTempPath();
0024     qDebug() << path;
0025     mManager = new Git::Manager;
0026     QVERIFY(!mManager->isValid());
0027 
0028     auto ok = mManager->init(path);
0029     QVERIFY(ok);
0030     QCOMPARE(path, mManager->path());
0031 
0032     TestCommon::initSignature(mManager);
0033 }
0034 
0035 void BranchesDiffTest::cleanupTestCase()
0036 {
0037     TestCommon::cleanPath(mManager);
0038 }
0039 
0040 void BranchesDiffTest::makeACommit()
0041 {
0042     TestCommon::touch(mManager, "/unchanged");
0043     TestCommon::touch(mManager, "/changed_in_both");
0044     TestCommon::touch(mManager, "/changed_in_master");
0045     TestCommon::touch(mManager, "/changed_in_dev");
0046 
0047     TestCommon::touch(mManager, "/inside_dir/unchanged");
0048     TestCommon::touch(mManager, "/inside_dir/changed_in_both");
0049     TestCommon::touch(mManager, "/inside_dir/changed_in_master");
0050     TestCommon::touch(mManager, "/inside_dir/changed_in_dev");
0051 
0052     mManager->commit("commit1");
0053 }
0054 
0055 void BranchesDiffTest::createBranch()
0056 {
0057     auto ok = mManager->createBranch(newBranchName);
0058     QVERIFY(ok);
0059 
0060     QVERIFY(mManager->branchesNames(Git::Manager::BranchType::LocalBranch).contains(newBranchName));
0061 
0062     auto newBranch = mManager->branch(newBranchName);
0063     QVERIFY(newBranch != nullptr);
0064 }
0065 
0066 void BranchesDiffTest::switchToNewBranch()
0067 {
0068     auto ok = mManager->switchBranch(newBranchName);
0069     QVERIFY(ok);
0070     QCOMPARE(mManager->currentBranch(), newBranchName);
0071 
0072     TestCommon::touch(mManager, "/changed_in_both");
0073     TestCommon::touch(mManager, "/changed_in_dev");
0074     TestCommon::touch(mManager, "/only_in_dev");
0075 
0076     TestCommon::touch(mManager, "/inside_dir/changed_in_both");
0077     TestCommon::touch(mManager, "/inside_dir/changed_in_dev");
0078     TestCommon::touch(mManager, "/inside_dir/only_in_dev");
0079 
0080     mManager->commit("commit_in_dev");
0081 }
0082 
0083 void BranchesDiffTest::switchToMaster()
0084 {
0085     auto ok = mManager->switchBranch("master");
0086     QVERIFY(ok);
0087 
0088     TestCommon::touch(mManager, "/changed_in_both");
0089     TestCommon::touch(mManager, "/changed_in_master");
0090     TestCommon::touch(mManager, "/only_in_master");
0091 
0092     TestCommon::touch(mManager, "/inside_dir/changed_in_both");
0093     TestCommon::touch(mManager, "/inside_dir/changed_in_master");
0094     TestCommon::touch(mManager, "/inside_dir/only_in_master");
0095 
0096     mManager->commit("commit_in_master");
0097 }
0098 
0099 void BranchesDiffTest::diff()
0100 {
0101     auto branches = mManager->branches(Git::Manager::BranchType::LocalBranch);
0102     QCOMPARE(branches.size(), 2);
0103 
0104     QCOMPARE(branches.at(0)->name(), "dev");
0105     QCOMPARE(branches.at(1)->name(), "master");
0106     auto diff = mManager->diff(branches.at(1)->tree(), branches.at(0)->tree());
0107 
0108     QCOMPARE(diff.size(), 10);
0109 
0110     QVERIFY(!diff.contains("unchanged"));
0111     QVERIFY(diff.contains("changed_in_both"));
0112     QVERIFY(diff.contains("changed_in_master"));
0113     QVERIFY(diff.contains("changed_in_dev"));
0114     QVERIFY(diff.contains("only_in_master"));
0115     QVERIFY(diff.contains("only_in_dev"));
0116 
0117     QCOMPARE(diff.status("unchanged"), Git::ChangeStatus::Unmodified);
0118     QCOMPARE(diff.status("changed_in_both"), Git::ChangeStatus::Modified);
0119     QCOMPARE(diff.status("changed_in_master"), Git::ChangeStatus::Modified);
0120     QCOMPARE(diff.status("changed_in_dev"), Git::ChangeStatus::Modified);
0121     QCOMPARE(diff.status("only_in_master"), Git::ChangeStatus::Removed);
0122     QCOMPARE(diff.status("only_in_dev"), Git::ChangeStatus::Added);
0123 
0124     QCOMPARE(diff.status("inside_dir/unchanged"), Git::ChangeStatus::Unmodified);
0125     QCOMPARE(diff.status("inside_dir/changed_in_both"), Git::ChangeStatus::Modified);
0126     QCOMPARE(diff.status("inside_dir/changed_in_master"), Git::ChangeStatus::Modified);
0127     QCOMPARE(diff.status("inside_dir/changed_in_dev"), Git::ChangeStatus::Modified);
0128     QCOMPARE(diff.status("inside_dir/only_in_master"), Git::ChangeStatus::Removed);
0129     QCOMPARE(diff.status("inside_dir/only_in_dev"), Git::ChangeStatus::Added);
0130 }
0131 
0132 #include "moc_branchesdifftest.cpp"