File indexing completed on 2024-04-28 03:48:19

0001 /*
0002     File                 : MultiRangeTest3.cpp
0003     Project              : LabPlot
0004     Description          : Third tests for multi ranges
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2021 Martin Marmsoler <martin.marmsoler@gmail.com>
0007     SPDX-FileCopyrightText: 2021 Stefan Gerlach <stefan.gerlach@uni.kn>
0008 
0009     SPDX-License-Identifier: GPL-2.0-or-later
0010 */
0011 
0012 #include "MultiRangeTest3.h"
0013 #include "MultiRangeTest_macros.h"
0014 
0015 void MultiRangeTest3::baseDockSetAspects_NoPlotRangeChange() {
0016     LOAD_PROJECT
0017 
0018     const int sinCurveCSystemIndex = sinCurve->coordinateSystemIndex();
0019     const int tanCurveCSystemIndex = tanCurve->coordinateSystemIndex();
0020     QVERIFY(sinCurveCSystemIndex != tanCurveCSystemIndex);
0021     // checks directly the plot. In the basedock the element is used and not the plot, so do it here too
0022     QVERIFY(sinCurve->coordinateSystemCount() == 3);
0023 
0024     XYCurveDock dock(nullptr);
0025     dock.setupGeneral();
0026     dock.setCurves(QList<XYCurve*>({sinCurve, tanCurve}));
0027 
0028     dock.updatePlotRangeList();
0029 
0030     // The coordinatesystem indices shall not change
0031     QCOMPARE(sinCurveCSystemIndex, sinCurve->coordinateSystemIndex());
0032     QCOMPARE(tanCurveCSystemIndex, tanCurve->coordinateSystemIndex());
0033 }
0034 
0035 /*!
0036  * \brief MultiRangeTest3::curveRangeChange
0037  * When changing the coordinatesystem of an object like a curve, the
0038  * curve shall be updated accordingly also for undo/redo
0039  */
0040 void MultiRangeTest3::curveRangeChange() {
0041     Project project;
0042     auto* ws = new Worksheet(QStringLiteral("worksheet"));
0043     QVERIFY(ws != nullptr);
0044     project.addChild(ws);
0045 
0046     auto* plot = new CartesianPlot(QStringLiteral("plot"));
0047     QVERIFY(plot != nullptr);
0048     ws->addChild(plot);
0049 
0050     auto* curve{new XYEquationCurve(QStringLiteral("f(x)"))};
0051     curve->setCoordinateSystemIndex(plot->defaultCoordinateSystemIndex());
0052     plot->addChild(curve);
0053 
0054     XYEquationCurve::EquationData data;
0055     data.min = QStringLiteral("0");
0056     data.max = QStringLiteral("10");
0057     data.count = 100;
0058     data.expression1 = QStringLiteral("sin(x*2*pi*3)");
0059     curve->setEquationData(data);
0060     curve->recalculate();
0061 
0062     CHECK_RANGE(plot, curve, Dimension::X, 0., 10.);
0063     CHECK_RANGE(plot, curve, Dimension::Y, -1., 1.);
0064 
0065     // Create new cSystem
0066     Range<double> yRange;
0067     yRange.setFormat(RangeT::Format::Numeric);
0068     yRange.setAutoScale(false);
0069     yRange.setRange(0, 10);
0070     plot->addYRange(yRange);
0071     CartesianCoordinateSystem* cSystem = new CartesianCoordinateSystem(plot);
0072     cSystem->setIndex(Dimension::X, 0);
0073     cSystem->setIndex(Dimension::Y, 1);
0074     plot->addCoordinateSystem(cSystem);
0075 
0076     QCOMPARE(plot->coordinateSystemCount(), 2);
0077     QCOMPARE(plot->coordinateSystem(1), cSystem);
0078 
0079     CHECK_RANGE(plot, curve, Dimension::X, 0., 10.);
0080     CHECK_RANGE(plot, curve, Dimension::Y, -1., 1.);
0081 
0082     curve->setCoordinateSystemIndex(1);
0083 
0084     CHECK_RANGE(plot, curve, Dimension::X, 0., 10.);
0085     CHECK_RANGE(plot, curve, Dimension::Y, 0., 10.);
0086 
0087     curve->undoStack()->undo();
0088 
0089     QCOMPARE(curve->coordinateSystemIndex(), 0);
0090     CHECK_RANGE(plot, curve, Dimension::X, 0., 10.);
0091     CHECK_RANGE(plot, curve, Dimension::Y, -1., 1.);
0092 
0093     curve->undoStack()->redo();
0094 
0095     QCOMPARE(curve->coordinateSystemIndex(), 1);
0096     CHECK_RANGE(plot, curve, Dimension::X, 0., 10.);
0097     CHECK_RANGE(plot, curve, Dimension::Y, 0., 10.);
0098 }
0099 
0100 QTEST_MAIN(MultiRangeTest3)