File indexing completed on 2024-05-19 04:40:06

0001 /*
0002     SPDX-FileCopyrightText: 2017 Friedrich W. H. Kossebau <kossebau@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "test_vcsannotation.h"
0008 
0009 #include <QTest>
0010 #include <QStandardPaths>
0011 
0012 #include <vcs/vcsannotation.h>
0013 #include <vcs/vcsrevision.h>
0014 
0015 using namespace KDevelop;
0016 
0017 void TestVcsAnnotation::initTestCase()
0018 {
0019     QStandardPaths::setTestModeEnabled(true);
0020 }
0021 
0022 static
0023 VcsAnnotationLine createAnnotationLine(int lineNumber,
0024                                        const QString& text,
0025                                        const QString& author,
0026                                        const VcsRevision& revision,
0027                                        const QDateTime& date,
0028                                        const QString& commitMessage)
0029 {
0030     VcsAnnotationLine annotationLine;
0031     annotationLine.setLineNumber(lineNumber);
0032     annotationLine.setText(text);
0033     annotationLine.setAuthor(author);
0034     annotationLine.setRevision(revision);
0035     annotationLine.setDate(date);
0036     annotationLine.setCommitMessage(commitMessage);
0037     return annotationLine;
0038 }
0039 
0040 void TestVcsAnnotation::testCopyConstructor()
0041 {
0042     const int lineNumber = 1;
0043     const QString text("Text A");
0044     const QString author("Author A");
0045     VcsRevision revision;
0046     revision.setRevisionValue("A", VcsRevision::GlobalNumber);
0047     const QDateTime date = QDateTime::fromString("2001-01-01T00:00:00+00:00", Qt::ISODate);
0048     const QString commitMessage("Commit A");
0049     const VcsAnnotationLine annotationLine = createAnnotationLine(lineNumber, text, author, revision, date, commitMessage);
0050     const QUrl location(QStringLiteral("git://foo"));
0051 
0052     // test plain copy
0053     {
0054         VcsAnnotation annotationA;
0055         annotationA.setLocation(location);
0056         annotationA.insertLine(lineNumber, annotationLine);
0057 
0058         VcsAnnotation annotationB(annotationA);
0059 
0060         QCOMPARE(annotationA.location(), location);
0061         QCOMPARE(annotationA.lineCount(), 1);
0062         QVERIFY(annotationA.containsLine(lineNumber));
0063         QCOMPARE(annotationB.location(), location);
0064         QCOMPARE(annotationB.lineCount(), 1);
0065         QVERIFY(annotationB.containsLine(lineNumber));
0066     }
0067 
0068     const QUrl locationNew(QStringLiteral("svn://bar"));
0069 
0070     // test detach after changing A
0071     {
0072         VcsAnnotation annotationA;
0073         annotationA.setLocation(location);
0074         annotationA.insertLine(lineNumber, annotationLine);
0075 
0076         VcsAnnotation annotationB(annotationA);
0077         // change a property of A
0078         annotationA.setLocation(locationNew);
0079 
0080         QCOMPARE(annotationA.location(), locationNew);
0081         QCOMPARE(annotationA.lineCount(), 1);
0082         QVERIFY(annotationA.containsLine(lineNumber));
0083         QCOMPARE(annotationB.location(), location);
0084         QCOMPARE(annotationB.lineCount(), 1);
0085         QVERIFY(annotationB.containsLine(lineNumber));
0086     }
0087 }
0088 
0089 void TestVcsAnnotation::testAssignOperator()
0090 {
0091     const int lineNumber = 1;
0092     const QString text("Text A");
0093     const QString author("Author A");
0094     VcsRevision revision;
0095     revision.setRevisionValue("A", VcsRevision::GlobalNumber);
0096     const QDateTime date = QDateTime::fromString("2001-01-01T00:00:00+00:00", Qt::ISODate);
0097     const QString commitMessage("Commit A");
0098     const VcsAnnotationLine annotationLine = createAnnotationLine(lineNumber, text, author, revision, date, commitMessage);
0099     const QUrl location(QStringLiteral("https://kdevelop.org"));
0100 
0101     // test plain copy
0102     {
0103         VcsAnnotation annotationA;
0104         annotationA.setLocation(location);
0105         annotationA.insertLine(lineNumber, annotationLine);
0106 
0107         VcsAnnotation annotationB;
0108         annotationB = annotationA;
0109 
0110         QCOMPARE(annotationA.location(), location);
0111         QCOMPARE(annotationA.lineCount(), 1);
0112         QVERIFY(annotationA.containsLine(lineNumber));
0113         QCOMPARE(annotationB.location(), location);
0114         QCOMPARE(annotationB.lineCount(), 1);
0115         QVERIFY(annotationB.containsLine(lineNumber));
0116     }
0117 
0118     const QUrl locationNew(QStringLiteral("https://kate-editor.org"));
0119 
0120     // test detach after changing A
0121     {
0122         VcsAnnotation annotationA;
0123         annotationA.setLocation(location);
0124         annotationA.insertLine(lineNumber, annotationLine);
0125 
0126         VcsAnnotation annotationB;
0127         annotationB = annotationA;
0128         // change a property of A
0129         annotationA.setLocation(locationNew);
0130 
0131         QCOMPARE(annotationA.location(), locationNew);
0132         QCOMPARE(annotationA.lineCount(), 1);
0133         QVERIFY(annotationA.containsLine(lineNumber));
0134         QCOMPARE(annotationB.location(), location);
0135         QCOMPARE(annotationB.lineCount(), 1);
0136         QVERIFY(annotationB.containsLine(lineNumber));
0137     }
0138 }
0139 
0140 QTEST_GUILESS_MAIN(TestVcsAnnotation)
0141 
0142 #include "moc_test_vcsannotation.cpp"