File indexing completed on 2024-05-19 04:39:50

0001 /*
0002     SPDX-FileCopyrightText: 2006-2007 Alexander Dymo <adymo@kdevelop.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "test_areawalker.h"
0008 
0009 #include <QStringList>
0010 #include <QTest>
0011 #include <QStandardPaths>
0012 
0013 #include <sublime/area.h>
0014 #include <sublime/view.h>
0015 #include <sublime/controller.h>
0016 #include <sublime/urldocument.h>
0017 
0018 #include "areaprinter.h"
0019 
0020 using namespace Sublime;
0021 
0022 struct AreaStopper {
0023     explicit AreaStopper(const QString& stopAt): m_stopAt(stopAt) {}
0024     Area::WalkerMode operator()(AreaIndex *index)
0025     {
0026         for (View* view : qAsConst(index->views())) {
0027             list << view->objectName();
0028             if (view->objectName() == m_stopAt)
0029                 return Area::StopWalker;
0030         }
0031         return Area::ContinueWalker;
0032     }
0033     Area::WalkerMode operator()(View *view, Sublime::Position)
0034     {
0035         list << view->objectName();
0036         if (view->objectName() == m_stopAt)
0037             return Area::StopWalker;
0038         return Area::ContinueWalker;
0039     }
0040     QStringList list;
0041     QString m_stopAt;
0042 };
0043 
0044 void TestAreaWalker::initTestCase()
0045 {
0046     QStandardPaths::setTestModeEnabled(true);
0047 }
0048 
0049 void TestAreaWalker::viewWalkerModes()
0050 {
0051     auto *controller = new Controller(this);
0052     Document *doc = new UrlDocument(controller, QUrl::fromLocalFile(QStringLiteral("~/foo.cpp")));
0053     Area *area = new Area(controller, QStringLiteral("Area"));
0054     View *view1 = doc->createView();
0055     view1->setObjectName(QStringLiteral("1"));
0056     area->addView(view1);
0057     View *view2 = doc->createView();
0058     view2->setObjectName(QStringLiteral("2"));
0059     area->addView(view2, view1, Qt::Vertical);
0060     View *view3 = doc->createView();
0061     view3->setObjectName(QStringLiteral("3"));
0062     area->addView(view3, view1, Qt::Vertical);
0063     View *view4 = doc->createView();
0064     view4->setObjectName(QStringLiteral("4"));
0065     area->addView(view4, view1, Qt::Vertical);
0066 
0067     AreaViewsPrinter p;
0068     area->walkViews(p, area->rootIndex());
0069     QCOMPARE(p.result, QStringLiteral("\n\
0070 [ vertical splitter ]\n\
0071     [ vertical splitter ]\n\
0072         [ vertical splitter ]\n\
0073             [ 1 ]\n\
0074             [ 4 ]\n\
0075         [ 3 ]\n\
0076     [ 2 ]\n\
0077 "));
0078 
0079     AreaStopper stopper(QStringLiteral("1"));
0080     area->walkViews(stopper, area->rootIndex());
0081     QCOMPARE(stopper.list.join(QLatin1Char(' ')), QStringLiteral("1"));
0082 
0083     AreaStopper stopper2(QStringLiteral("2"));
0084     area->walkViews(stopper2, area->rootIndex());
0085     QCOMPARE(stopper2.list.join(QLatin1Char(' ')), QStringLiteral("1 4 3 2"));
0086 
0087     AreaStopper stopper3(QStringLiteral("3"));
0088     area->walkViews(stopper3, area->rootIndex());
0089     QCOMPARE(stopper3.list.join(QLatin1Char(' ')), QStringLiteral("1 4 3"));
0090 
0091     AreaStopper noStopper(QStringLiteral("X"));
0092     area->walkViews(noStopper, area->rootIndex());
0093     QCOMPARE(noStopper.list.join(QLatin1Char(' ')), QStringLiteral("1 4 3 2"));
0094 
0095     delete area;
0096     delete doc;
0097     delete controller;
0098 }
0099 
0100 void TestAreaWalker::toolViewWalkerModes()
0101 {
0102     auto *controller = new Controller(this);
0103     Document *doc = new UrlDocument(controller, QUrl::fromLocalFile(QStringLiteral("~/foo.cpp")));
0104     Area *area = new Area(controller, QStringLiteral("Area"));
0105     View *view = doc->createView();
0106     view->setObjectName(QStringLiteral("1"));
0107     area->addToolView(view, Sublime::Left);
0108     view = doc->createView();
0109     view->setObjectName(QStringLiteral("2"));
0110     area->addToolView(view, Sublime::Left);
0111     view = doc->createView();
0112     view->setObjectName(QStringLiteral("3"));
0113     area->addToolView(view, Sublime::Bottom);
0114 
0115     AreaStopper stopper1(QStringLiteral("1"));
0116     area->walkToolViews(stopper1, Sublime::AllPositions);
0117     QCOMPARE(stopper1.list.join(QLatin1Char(' ')), QStringLiteral("1"));
0118 
0119     AreaStopper stopper2(QStringLiteral("2"));
0120     area->walkToolViews(stopper2, Sublime::AllPositions);
0121     QCOMPARE(stopper2.list.join(QLatin1Char(' ')), QStringLiteral("1 2"));
0122 
0123     AreaStopper stopper3(QStringLiteral("3"));
0124     area->walkToolViews(stopper3, Sublime::AllPositions);
0125     QCOMPARE(stopper3.list.join(QLatin1Char(' ')), QStringLiteral("1 2 3"));
0126 
0127     AreaStopper noStopper(QStringLiteral("X"));
0128     area->walkToolViews(noStopper, Sublime::AllPositions);
0129     QCOMPARE(noStopper.list.join(QLatin1Char(' ')), QStringLiteral("1 2 3"));
0130 
0131     delete area;
0132     delete doc;
0133     delete controller;
0134 }
0135 
0136 QTEST_MAIN(TestAreaWalker)
0137 
0138 #include "moc_test_areawalker.cpp"