diff --git a/ChangeLog.txt b/ChangeLog.txt index 42628077d..8157df0ca 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -50,6 +50,7 @@ - [#819] Use OpenGL as render for view. - [#826] New Feature. Add and remove items to groups from the context menu. - Mouse double click zoom fit best current pattern piece. +- [#862] Force Valentina to immediately terminate if a pattern contains a parsing warning. # Version 0.5.1 (unreleased) - [#683] Tool Seam allowance's dialog is off screen on small resolutions. diff --git a/dist/OBS_debian/debian.valentina.1 b/dist/OBS_debian/debian.valentina.1 index 011f44b60..9e128e02d 100644 --- a/dist/OBS_debian/debian.valentina.1 +++ b/dist/OBS_debian/debian.valentina.1 @@ -1,6 +1,6 @@ .\" Manpage for valentina. .\" Contact dismine@gmail.com to correct errors. -.TH valentina 1 "10 December, 2017" "valentina man page" +.TH valentina 1 "13 July, 2018" "valentina man page" .SH NAME Valentina \- Pattern making program. .SH SYNOPSIS @@ -201,7 +201,9 @@ The path to output destination folder. By default the directory at which the app .BR "*" " Descending area = 2." .RE .IP "-t, --test" -Run the program in a test mode. The program in this mode loads a single pattern file and silently quit without showing the main window. The key have priority before key \*(lqbasename\*(rq. +.RB "Run the program in a test mode. The program in this mode loads a single pattern file and silently quit without showing the main window. The key have priority before key \*(lqbasename\*(rq." +.IP "--pedantic" +.RB "Make all parsing warnings into errors. Have effect only in console mode. Use to force Valentina to immediately terminate if a pattern contains a parsing warning." .IP "--no-scaling" .RB "Disable high dpi scaling. Call this option if has problem with scaling (by default scaling enabled). Alternatively you can use the QT_AUTO_SCREEN_SCALE_FACTOR=0 environment variable." .IP "--csvWithHeader" diff --git a/dist/debian/valentina.1 b/dist/debian/valentina.1 index 011f44b60..9e128e02d 100644 --- a/dist/debian/valentina.1 +++ b/dist/debian/valentina.1 @@ -1,6 +1,6 @@ .\" Manpage for valentina. .\" Contact dismine@gmail.com to correct errors. -.TH valentina 1 "10 December, 2017" "valentina man page" +.TH valentina 1 "13 July, 2018" "valentina man page" .SH NAME Valentina \- Pattern making program. .SH SYNOPSIS @@ -201,7 +201,9 @@ The path to output destination folder. By default the directory at which the app .BR "*" " Descending area = 2." .RE .IP "-t, --test" -Run the program in a test mode. The program in this mode loads a single pattern file and silently quit without showing the main window. The key have priority before key \*(lqbasename\*(rq. +.RB "Run the program in a test mode. The program in this mode loads a single pattern file and silently quit without showing the main window. The key have priority before key \*(lqbasename\*(rq." +.IP "--pedantic" +.RB "Make all parsing warnings into errors. Have effect only in console mode. Use to force Valentina to immediately terminate if a pattern contains a parsing warning." .IP "--no-scaling" .RB "Disable high dpi scaling. Call this option if has problem with scaling (by default scaling enabled). Alternatively you can use the QT_AUTO_SCREEN_SCALE_FACTOR=0 environment variable." .IP "--csvWithHeader" diff --git a/src/app/valentina/core/vapplication.cpp b/src/app/valentina/core/vapplication.cpp index f2f6dec9b..9fe9c4eca 100644 --- a/src/app/valentina/core/vapplication.cpp +++ b/src/app/valentina/core/vapplication.cpp @@ -696,6 +696,12 @@ bool VApplication::IsAppInGUIMode() const return IsGUIMode(); } +//--------------------------------------------------------------------------------------------------------------------- +bool VApplication::IsPedantic() const +{ + return (VCommandLine::instance != nullptr) && VCommandLine::instance->IsPedantic(); +} + //--------------------------------------------------------------------------------------------------------------------- const VCommandLinePtr VApplication::CommandLine() const { diff --git a/src/app/valentina/core/vapplication.h b/src/app/valentina/core/vapplication.h index 2e5a864d6..a8fc6b1bb 100644 --- a/src/app/valentina/core/vapplication.h +++ b/src/app/valentina/core/vapplication.h @@ -72,6 +72,7 @@ public: bool static IsGUIMode(); virtual bool IsAppInGUIMode() const override; + virtual bool IsPedantic() const override; virtual void OpenSettings() override; VSettings *ValentinaSettings(); diff --git a/src/app/valentina/core/vcmdexport.cpp b/src/app/valentina/core/vcmdexport.cpp index 48099b975..0dad86d35 100644 --- a/src/app/valentina/core/vcmdexport.cpp +++ b/src/app/valentina/core/vcmdexport.cpp @@ -268,6 +268,13 @@ void VCommandLine::InitOptions(VCommandLineOptions &options, QMap "showing the main window. The key have priority before key '%1'.") .arg(LONG_OPTION_BASENAME))); + optionsIndex.insert(LONG_OPTION_PENDANTIC, index++); + options.append(new QCommandLineOption(QStringList() << LONG_OPTION_PENDANTIC, + translate("VCommandLine", + "Make all parsing warnings into errors. Have effect only in " + "console mode. Use to force Valentina to immediately terminate if " + "a pattern contains a parsing warning."))); + optionsIndex.insert(LONG_OPTION_NO_HDPI_SCALING, index++); options.append(new QCommandLineOption(QStringList() << LONG_OPTION_NO_HDPI_SCALING, translate("VCommandLine", "Disable high dpi scaling. Call this option if has " @@ -599,6 +606,19 @@ bool VCommandLine::IsTestModeEnabled() const return r; } +//--------------------------------------------------------------------------------------------------------------------- +bool VCommandLine::IsPedantic() const +{ + if (IsGuiEnabled()) + { + return false; // Doesn't work in GUI mode + } + else + { + return parser.isSet(*optionsUsed.value(optionsIndex.value(LONG_OPTION_PENDANTIC))); + } +} + //--------------------------------------------------------------------------------------------------------------------- bool VCommandLine::IsNoScalingEnabled() const { diff --git a/src/app/valentina/core/vcmdexport.h b/src/app/valentina/core/vcmdexport.h index cd8d1f897..1d500f6a4 100644 --- a/src/app/valentina/core/vcmdexport.h +++ b/src/app/valentina/core/vcmdexport.h @@ -56,6 +56,10 @@ public: //case test mode enabled bool IsTestModeEnabled() const; + //@brief Make all parsing warnings into errors. Have effect only in console mode. Use to force Valentina to + //immediately terminate if a pattern contains a parsing warning. + bool IsPedantic() const; + bool IsNoScalingEnabled() const; //@brief tests if user enabled export from cmd, throws exception if not exactly 1 input VAL file supplied in case diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index c0f2abdc1..8a62d6471 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -3093,7 +3093,7 @@ void MainWindow::FullParseFile() SetEnabledGUI(false); if (not VApplication::IsGUIMode()) { - qApp->exit(V_EX_NOINPUT); + qApp->exit(V_EX_DATAERR); } return; } @@ -3104,7 +3104,7 @@ void MainWindow::FullParseFile() SetEnabledGUI(false); if (not VApplication::IsGUIMode()) { - qApp->exit(V_EX_NOINPUT); + qApp->exit(V_EX_DATAERR); } return; } @@ -3115,7 +3115,7 @@ void MainWindow::FullParseFile() SetEnabledGUI(false); if (not VApplication::IsGUIMode()) { - qApp->exit(V_EX_NOINPUT); + qApp->exit(V_EX_DATAERR); } return; } @@ -3126,7 +3126,7 @@ void MainWindow::FullParseFile() SetEnabledGUI(false); if (not VApplication::IsGUIMode()) { - qApp->exit(V_EX_NOINPUT); + qApp->exit(V_EX_DATAERR); } return; } @@ -3137,7 +3137,7 @@ void MainWindow::FullParseFile() SetEnabledGUI(false); if (not VApplication::IsGUIMode()) { - qApp->exit(V_EX_NOINPUT); + qApp->exit(V_EX_DATAERR); } return; } @@ -3147,7 +3147,7 @@ void MainWindow::FullParseFile() SetEnabledGUI(false); if (not VApplication::IsGUIMode()) { - qApp->exit(V_EX_NOINPUT); + qApp->exit(V_EX_DATAERR); } return; } diff --git a/src/libs/ifc/exception/vexceptionobjecterror.cpp b/src/libs/ifc/exception/vexceptionobjecterror.cpp index 1d3020d55..d52f40d3c 100644 --- a/src/libs/ifc/exception/vexceptionobjecterror.cpp +++ b/src/libs/ifc/exception/vexceptionobjecterror.cpp @@ -49,6 +49,11 @@ VExceptionObjectError::VExceptionObjectError(const QString &what, const QDomElem lineNumber = domElement.lineNumber(); } +//--------------------------------------------------------------------------------------------------------------------- +VExceptionObjectError::VExceptionObjectError(const QString &what) + :VException(what), tagText(QString()), tagName(QString()), lineNumber(-1) +{} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief VExceptionObjectError copy constructor diff --git a/src/libs/ifc/exception/vexceptionobjecterror.h b/src/libs/ifc/exception/vexceptionobjecterror.h index d24da83df..c7d6737e4 100644 --- a/src/libs/ifc/exception/vexceptionobjecterror.h +++ b/src/libs/ifc/exception/vexceptionobjecterror.h @@ -45,6 +45,7 @@ class VExceptionObjectError : public VException { public: VExceptionObjectError(const QString &what, const QDomElement &domElement); + VExceptionObjectError(const QString &what); VExceptionObjectError(const VExceptionObjectError &e); VExceptionObjectError &operator=(const VExceptionObjectError &e); virtual ~VExceptionObjectError() V_NOEXCEPT_EXPR (true) Q_DECL_EQ_DEFAULT; diff --git a/src/libs/vmisc/commandoptions.cpp b/src/libs/vmisc/commandoptions.cpp index 16a9842bc..3a521e4cc 100644 --- a/src/libs/vmisc/commandoptions.cpp +++ b/src/libs/vmisc/commandoptions.cpp @@ -90,6 +90,8 @@ const QString SINGLE_OPTION_GROUPPING = QStringLiteral("g"); const QString LONG_OPTION_TEST = QStringLiteral("test"); const QString SINGLE_OPTION_TEST = QStringLiteral("t"); +const QString LONG_OPTION_PENDANTIC = QStringLiteral("pedantic"); + const QString LONG_OPTION_GRADATIONSIZE = QStringLiteral("gsize"); const QString SINGLE_OPTION_GRADATIONSIZE = QStringLiteral("x"); diff --git a/src/libs/vmisc/commandoptions.h b/src/libs/vmisc/commandoptions.h index 94711b9c6..3573332e5 100644 --- a/src/libs/vmisc/commandoptions.h +++ b/src/libs/vmisc/commandoptions.h @@ -87,6 +87,8 @@ extern const QString SINGLE_OPTION_GROUPPING; extern const QString LONG_OPTION_TEST; extern const QString SINGLE_OPTION_TEST; +extern const QString LONG_OPTION_PENDANTIC; + extern const QString LONG_OPTION_GRADATIONSIZE; extern const QString SINGLE_OPTION_GRADATIONSIZE; diff --git a/src/libs/vmisc/vabstractapplication.cpp b/src/libs/vmisc/vabstractapplication.cpp index d4408a191..03447d9f2 100644 --- a/src/libs/vmisc/vabstractapplication.cpp +++ b/src/libs/vmisc/vabstractapplication.cpp @@ -235,6 +235,12 @@ QUndoStack *VAbstractApplication::getUndoStack() const return undoStack; } +//--------------------------------------------------------------------------------------------------------------------- +bool VAbstractApplication::IsPedantic() const +{ + return false; +} + //--------------------------------------------------------------------------------------------------------------------- /** * @brief ClearMessage helps to clear a message string from standard Qt function. diff --git a/src/libs/vmisc/vabstractapplication.h b/src/libs/vmisc/vabstractapplication.h index 67d0a0ff8..10d18a339 100644 --- a/src/libs/vmisc/vabstractapplication.h +++ b/src/libs/vmisc/vabstractapplication.h @@ -107,6 +107,7 @@ public: QUndoStack *getUndoStack() const; virtual bool IsAppInGUIMode()const =0; + virtual bool IsPedantic() const; QString GetPatternPath() const; void SetPatternPath(const QString &value); diff --git a/src/libs/vtest/abstracttest.cpp b/src/libs/vtest/abstracttest.cpp index 380305b70..4a1f238b0 100644 --- a/src/libs/vtest/abstracttest.cpp +++ b/src/libs/vtest/abstracttest.cpp @@ -140,7 +140,8 @@ int AbstractTest::Run(int exit, const QString &program, const QStringList &argum if (process->exitCode() != exit) { - error = QStringLiteral("Unexpected finish.\n%1").arg(QString(process->readAllStandardError())); + error = QStringLiteral("Unexpected finish. Exit code: %1\n%2").arg(process->exitCode()) + .arg(QString(process->readAllStandardError())); return process->exitCode(); } diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp index b24b61134..e40c31441 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoolcurveintersectaxis.cpp @@ -43,6 +43,7 @@ #include "../../../../../dialogs/tools/dialogcurveintersectaxis.h" #include "../ifc/ifcdef.h" #include "../ifc/exception/vexception.h" +#include "../ifc/exception/vexceptionobjecterror.h" #include "../qmuparser/qmudef.h" #include "../toolcut/vtoolcutsplinepath.h" #include "../vgeometry/vabstractcubicbezier.h" @@ -138,9 +139,10 @@ VToolCurveIntersectAxis *VToolCurveIntersectAxis::Create(VToolCurveIntersectAxis if (not success) { - qWarning() << tr("Error calculating point '%1'. There is no intersection with curve '%2' and axis through " - "point '%3' with angle %4°") - .arg(initData.name, curve->name(), basePoint->name()).arg(angle); + const QString errorMsg = tr("Error calculating point '%1'. There is no intersection with curve '%2' and axis" + " through point '%3' with angle %4°") + .arg(initData.name, curve->name(), basePoint->name()).arg(angle); + qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) : qWarning() << errorMsg; } const qreal segLength = curve->GetLengthByPoint(fPoint); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.cpp index 1e53efd74..bda7524e4 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/toollinepoint/vtoollineintersectaxis.cpp @@ -40,6 +40,7 @@ #include "../../../../../visualization/visualization.h" #include "../../../../../visualization/line/vistoollineintersectaxis.h" #include "../ifc/exception/vexception.h" +#include "../ifc/exception/vexceptionobjecterror.h" #include "../ifc/ifcdef.h" #include "../vgeometry/vpointf.h" #include "../vmisc/vabstractapplication.h" @@ -129,9 +130,10 @@ VToolLineIntersectAxis *VToolLineIntersectAxis::Create(VToolLineIntersectAxisIni if (not success) { - qWarning() << tr("Error calculating point '%1'. Line (%2;%3) doesn't have intersection with axis through " - "point '%4' and angle %5°") + const QString errorMsg = tr("Error calculating point '%1'. Line (%2;%3) doesn't have intersection with axis " + "through point '%4' and angle %5°") .arg(initData.name, firstPoint->name(), secondPoint->name(), basePoint->name()).arg(axis.angle()); + qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) : qWarning() << errorMsg; } VPointF *p = new VPointF(fPoint, initData.name, initData.mx, initData.my); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp index e587be69c..1cd9c3bf8 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromarcandtangent.cpp @@ -40,6 +40,7 @@ #include "../../../../visualization/visualization.h" #include "../../../../visualization/line/vistoolpointfromarcandtangent.h" #include "../ifc/exception/vexception.h" +#include "../ifc/exception/vexceptionobjecterror.h" #include "../ifc/ifcdef.h" #include "../vgeometry/varc.h" #include "../vgeometry/vgobject.h" @@ -118,8 +119,9 @@ VToolPointFromArcAndTangent *VToolPointFromArcAndTangent::Create(VToolPointFromA if (not success) { - qWarning() << tr("Error calculating point '%1'. Tangent to arc '%2' from point '%3' cannot be found") - .arg(initData.name, arc.name(), tPoint.name()); + const QString errorMsg = tr("Error calculating point '%1'. Tangent to arc '%2' from point '%3' cannot be found") + .arg(initData.name, arc.name(), tPoint.name()); + qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) : qWarning() << errorMsg; } VPointF *p = new VPointF(point, initData.name, initData.mx, initData.my); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.cpp index 6addf2b09..fc53b3292 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointfromcircleandtangent.cpp @@ -39,6 +39,7 @@ #include "../../../../visualization/visualization.h" #include "../../../../visualization/line/vistoolpointfromcircleandtangent.h" #include "../ifc/exception/vexception.h" +#include "../ifc/exception/vexceptionobjecterror.h" #include "../ifc/xml/vdomdocument.h" #include "../ifc/ifcdef.h" #include "../vgeometry/vgobject.h" @@ -123,9 +124,11 @@ VToolPointFromCircleAndTangent *VToolPointFromCircleAndTangent::Create(VToolPoin initData.crossPoint, &point); if (not success) { - qWarning() << tr("Error calculating point '%1'. Tangent to circle with center '%2' and radius '%3' from " - "point '%4' cannot be found") - .arg(initData.name, cPoint.name()).arg(radius).arg(tPoint.name()); + const QString errorMsg = tr("Error calculating point '%1'. Tangent to circle with center '%2' and radius '%3' " + "from point '%4' cannot be found") + .arg(initData.name, cPoint.name()).arg(radius).arg(tPoint.name()); + + qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) : qWarning() << errorMsg; } VPointF *p = new VPointF(point, initData.name, initData.mx, initData.my); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.cpp index 30e092070..098b2edef 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofcontact.cpp @@ -42,6 +42,7 @@ #include "../../../../visualization/visualization.h" #include "../../../../visualization/line/vistoolpointofcontact.h" #include "../ifc/exception/vexception.h" +#include "../ifc/exception/vexceptionobjecterror.h" #include "../ifc/xml/vdomdocument.h" #include "../ifc/ifcdef.h" #include "../vgeometry/vgobject.h" @@ -212,9 +213,10 @@ VToolPointOfContact* VToolPointOfContact::Create(VToolPointOfContactInitData &in if (not success) { - qWarning() << tr("Error calculating point '%1'. Circle with center '%2' and radius '%3' doesn't have " - "intersection with line (%4;%5)") - .arg(initData.name, centerP->name()).arg(result).arg(firstP->name(), secondP->name()); + const QString errorMsg = tr("Error calculating point '%1'. Circle with center '%2' and radius '%3' doesn't have " + "intersection with line (%4;%5)") + .arg(initData.name, centerP->name()).arg(result).arg(firstP->name(), secondP->name()); + qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) : qWarning() << errorMsg; } VPointF *p = new VPointF(fPoint, initData.name, initData.mx, initData.my); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp index 411ad7bb4..49cd5db84 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectionarcs.cpp @@ -38,6 +38,7 @@ #include "../../../../dialogs/tools/dialogpointofintersectionarcs.h" #include "../../../../visualization/line/vistoolpointofintersectionarcs.h" #include "../ifc/exception/vexception.h" +#include "../ifc/exception/vexceptionobjecterror.h" #include "../ifc/ifcdef.h" #include "../vgeometry/varc.h" #include "../vgeometry/vgobject.h" @@ -117,8 +118,9 @@ VToolPointOfIntersectionArcs *VToolPointOfIntersectionArcs::Create(VToolPointOfI if (not success) { - qWarning() << tr("Error calculating point '%1'. Arcs '%2' and '%3' have no point of intersection") + const QString errorMsg = tr("Error calculating point '%1'. Arcs '%2' and '%3' have no point of intersection") .arg(initData.name, firstArc->name(), secondArc->name()); + qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) : qWarning() << errorMsg; } VPointF *p = new VPointF(point, initData.name, initData.mx, initData.my); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.cpp index b16257968..e6bdd678e 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncircles.cpp @@ -39,6 +39,7 @@ #include "../../../../visualization/visualization.h" #include "../../../../visualization/line/vistoolpointofintersectioncircles.h" #include "../ifc/exception/vexception.h" +#include "../ifc/exception/vexceptionobjecterror.h" #include "../ifc/xml/vdomdocument.h" #include "../ifc/ifcdef.h" #include "../vgeometry/vgobject.h" @@ -130,8 +131,9 @@ VToolPointOfIntersectionCircles::Create(VToolPointOfIntersectionCirclesInitData if (not success) { - qWarning() << tr("Error calculating point '%1'. Circles with centers in points '%2' and '%3' have no point " - "of intersection").arg(initData.name, c1Point.name(), c2Point.name()); + const QString errorMsg = tr("Error calculating point '%1'. Circles with centers in points '%2' and '%3' have " + "no point of intersection").arg(initData.name, c1Point.name(), c2Point.name()); + qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) : qWarning() << errorMsg; } VPointF *p = new VPointF(point, initData.name, initData.mx, initData.my); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp index 3fc03cebb..ca2b6ed03 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolpointofintersectioncurves.cpp @@ -40,6 +40,7 @@ #include "../../../../visualization/path/../visualization.h" #include "../../../../visualization/path/vistoolpointofintersectioncurves.h" #include "../ifc/exception/vexception.h" +#include "../ifc/exception/vexceptionobjecterror.h" #include "../ifc/ifcdef.h" #include "../vgeometry/vabstractcurve.h" #include "../vgeometry/vgobject.h" @@ -121,8 +122,9 @@ VToolPointOfIntersectionCurves *VToolPointOfIntersectionCurves::Create(VToolPoin if (not success) { - qWarning() << tr("Error calculating point '%1'. Curves '%2' and '%3' have no point of intersection") - .arg(initData.name, curve1->name(), curve2->name()); + const QString errorMsg = tr("Error calculating point '%1'. Curves '%2' and '%3' have no point of intersection") + .arg(initData.name, curve1->name(), curve2->name()); + qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) : qWarning() << errorMsg; } VPointF *p = new VPointF(point, initData.name, initData.mx, initData.my); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.cpp index eb4dabfc9..d40accc2c 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtooltriangle.cpp @@ -41,6 +41,7 @@ #include "../../../../visualization/visualization.h" #include "../../../../visualization/line/vistooltriangle.h" #include "../ifc/exception/vexception.h" +#include "../ifc/exception/vexceptionobjecterror.h" #include "../ifc/ifcdef.h" #include "../vgeometry/vgobject.h" #include "../vgeometry/vpointf.h" @@ -143,8 +144,9 @@ VToolTriangle* VToolTriangle::Create(VToolTriangleInitData initData) if (not success) { - qWarning() << tr("Error calculating point '%1'. Point of intersection cannot be finded") + const QString errorMsg = tr("Error calculating point '%1'. Point of intersection cannot be finded") .arg(initData.name); + qApp->IsPedantic() ? throw VExceptionObjectError(errorMsg) : qWarning() << errorMsg; } VPointF *p = new VPointF(point, initData.name, initData.mx, initData.my); diff --git a/src/test/CollectionTest/CollectionTest.pro b/src/test/CollectionTest/CollectionTest.pro index 920818aca..7e5399bf2 100644 --- a/src/test/CollectionTest/CollectionTest.pro +++ b/src/test/CollectionTest/CollectionTest.pro @@ -221,7 +221,8 @@ VALENTINA_TEST_FILES += \ tst_valentina/issue_256_wrong.vit \ tst_valentina/issue_256_correct.vst \ tst_valentina/issue_256_wrong.vit \ - tst_valentina/wrong_formula.val + tst_valentina/wrong_formula.val \ + tst_valentina/test_pedantic.val COLLECTION_FILES += \ $${PWD}/../../app/share/tables/multisize/GOST_man_ru.vst \ diff --git a/src/test/CollectionTest/tst_valentina/test_pedantic.val b/src/test/CollectionTest/tst_valentina/test_pedantic.val new file mode 100644 index 000000000..e9b501317 --- /dev/null +++ b/src/test/CollectionTest/tst_valentina/test_pedantic.val @@ -0,0 +1,23 @@ + + + + 0.7.8 + cm + + + + + + + + + + + + + + +
+ + + diff --git a/src/test/CollectionTest/tst_valentinacommandline.cpp b/src/test/CollectionTest/tst_valentinacommandline.cpp index 0e5d277c9..a936628b8 100644 --- a/src/test/CollectionTest/tst_valentinacommandline.cpp +++ b/src/test/CollectionTest/tst_valentinacommandline.cpp @@ -84,20 +84,29 @@ void TST_ValentinaCommandLine::initTestCase() void TST_ValentinaCommandLine::OpenPatterns_data() const { QTest::addColumn("file"); + QTest::addColumn("arguments"); QTest::addColumn("exitCode"); // The file doesn't exist! QTest::newRow("Send wrong path to a file") << "wrongPath.val" + << "--test" << V_EX_NOINPUT; QTest::newRow("Measurement independent empty file") << "empty.val" + << "--test" << V_EX_OK; QTest::newRow("File with invalid object type") << "wrong_obj_type.val" + << "--test" << V_EX_NOINPUT; QTest::newRow("Empty text VAL file") << "txt.val" + << "--test" << V_EX_NOINPUT; + + QTest::newRow("Pattern with a warning") << "test_pedantic.val" + << "--test;;--pedantic" + << V_EX_DATAERR; } //--------------------------------------------------------------------------------------------------------------------- @@ -105,11 +114,12 @@ void TST_ValentinaCommandLine::OpenPatterns_data() const void TST_ValentinaCommandLine::OpenPatterns() { QFETCH(QString, file); + QFETCH(QString, arguments); QFETCH(int, exitCode); QString error; const QString tmp = QCoreApplication::applicationDirPath() + QDir::separator() + *tmpTestFolder; - const int exit = Run(exitCode, ValentinaPath(), QStringList() << "--test" + const int exit = Run(exitCode, ValentinaPath(), QStringList() << arguments.split(";;") << tmp + QDir::separator() + file, error); QVERIFY2(exit == exitCode, qUtf8Printable(error));