diff --git a/src/app/tape/tmainwindow.cpp b/src/app/tape/tmainwindow.cpp index ccb0c4362..e97295c53 100644 --- a/src/app/tape/tmainwindow.cpp +++ b/src/app/tape/tmainwindow.cpp @@ -194,11 +194,17 @@ void TMainWindow::LoadFile(const QString &path) m = new VMeasurements(data); m->setXMLContent(path); + if (not m->IsDefinedKnownNamesValid()) + { + VException e(tr("File contains invalid known measurement(s).")); + throw e; + } + mType = m->Type(); if (mType == MeasurementsType::Unknown) { - VException e("File has unknown format."); + VException e(tr("File has unknown format.")); throw e; } diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index 4844554a3..d74cb505d 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -245,9 +245,15 @@ bool MainWindow::LoadMeasurements(const QString &path) m = new VMeasurements(pattern); m->setXMLContent(path); + if (not m->IsDefinedKnownNamesValid()) + { + VException e(tr("Measurement file contains invalid known measurement(s).")); + throw e; + } + if (m->Type() == MeasurementsType::Unknown) { - VException e("Measurement file has unknown format."); + VException e(tr("Measurement file has unknown format.")); throw e; } @@ -274,9 +280,8 @@ bool MainWindow::LoadMeasurements(const QString &path) const QSet match = pList.toSet().subtract(mList.toSet()); if (not match.isEmpty()) { - VException e("Measurement file doesn't include all required measurements."); - e.AddMoreInformation(QString("Please, additionaly provide: %1") - .arg(QStringList(match.toList()).join(", "))); + VException e(tr("Measurement file doesn't include all required measurements.")); + e.AddMoreInformation(tr("Please, additionaly provide: %1").arg(QStringList(match.toList()).join(", "))); throw e; } @@ -3430,11 +3435,17 @@ QString MainWindow::CheckPathToMeasurements(const QString &patternPath, const QS VMeasurements *m = new VMeasurements(pattern); m->setXMLContent(mPath); + if (not m->IsDefinedKnownNamesValid()) + { + VException e(tr("Measurement file contains invalid known measurement(s).")); + throw e; + } + patternType = m->Type(); if (patternType == MeasurementsType::Unknown) { - VException e("Measurement file has unknown format."); + VException e(tr("Measurement file has unknown format.")); throw e; } @@ -3463,8 +3474,8 @@ QString MainWindow::CheckPathToMeasurements(const QString &patternPath, const QS const QSet match = pList.toSet().subtract(mList.toSet()); if (not match.isEmpty()) { - VException e("Measurement file doesn't include all required measurements."); - e.AddMoreInformation(QString("Please, additionaly provide: %1") + VException e(tr("Measurement file doesn't include all required measurements.")); + e.AddMoreInformation(tr("Please, additionaly provide: %1") .arg(QStringList(match.toList()).join(", "))); throw e; } diff --git a/src/libs/vformat/vmeasurements.cpp b/src/libs/vformat/vmeasurements.cpp index ebbdeef56..c9d34f92d 100644 --- a/src/libs/vformat/vmeasurements.cpp +++ b/src/libs/vformat/vmeasurements.cpp @@ -533,6 +533,28 @@ QStringList VMeasurements::ListKnown() const return listNames; } +//--------------------------------------------------------------------------------------------------------------------- +bool VMeasurements::IsDefinedKnownNamesValid() const +{ + QStringList names = AllGroupNames(); + QSet set; + foreach (const QString &var, names) + { + set.insert(var); + } + + names = ListKnown(); + foreach (const QString &var, names) + { + if (not set.contains(var)) + { + return false; + } + } + + return true; +} + //--------------------------------------------------------------------------------------------------------------------- void VMeasurements::SetDataSize() { diff --git a/src/libs/vformat/vmeasurements.h b/src/libs/vformat/vmeasurements.h index 62ee53022..b7b9f1568 100644 --- a/src/libs/vformat/vmeasurements.h +++ b/src/libs/vformat/vmeasurements.h @@ -121,6 +121,8 @@ public: QStringList ListAll() const; QStringList ListKnown() const; + bool IsDefinedKnownNamesValid() const; + void SetDataSize(); void SetDataHeight(); diff --git a/src/libs/vmisc/def.cpp b/src/libs/vmisc/def.cpp index 65f3c7ac9..8bc3d4969 100644 --- a/src/libs/vmisc/def.cpp +++ b/src/libs/vmisc/def.cpp @@ -935,3 +935,27 @@ QStringList SupportedLocales() return locales; } + +//--------------------------------------------------------------------------------------------------------------------- +QStringList AllGroupNames() +{ + const QStringList originalNames = QStringList() << ListGroupA() + << ListGroupB() + << ListGroupC() + << ListGroupD() + << ListGroupE() + << ListGroupF() + << ListGroupG() + << ListGroupH() + << ListGroupI() + << ListGroupJ() + << ListGroupK() + << ListGroupL() + << ListGroupM() + << ListGroupN() + << ListGroupO() + << ListGroupP() + << ListGroupQ(); + + return originalNames; +} diff --git a/src/libs/vmisc/def.h b/src/libs/vmisc/def.h index 2e92a8b6f..00dc252b3 100644 --- a/src/libs/vmisc/def.h +++ b/src/libs/vmisc/def.h @@ -577,5 +577,6 @@ qreal UnitConvertor(qreal value, const Unit &from, const Unit &to); void CheckFactor(qreal &oldFactor, const qreal &Newfactor); QStringList SupportedLocales(); +QStringList AllGroupNames(); #endif // DEF_H diff --git a/src/test/ValentinaTest/tst_measurementregexp.cpp b/src/test/ValentinaTest/tst_measurementregexp.cpp index f3be33c65..2af9b7013 100644 --- a/src/test/ValentinaTest/tst_measurementregexp.cpp +++ b/src/test/ValentinaTest/tst_measurementregexp.cpp @@ -55,7 +55,7 @@ TST_MeasurementRegExp::~TST_MeasurementRegExp() // cppcheck-suppress unusedFunction void TST_MeasurementRegExp::TestOriginalMeasurementNamesRegExp() { - const QStringList originalNames = OriginalNames(); + const QStringList originalNames = AllGroupNames(); const QRegularExpression re(NameRegExp()); foreach(const QString &str, originalNames) @@ -454,7 +454,7 @@ void TST_MeasurementRegExp::InitTrMs() //--------------------------------------------------------------------------------------------------------------------- void TST_MeasurementRegExp::CheckNames() const { - const QStringList originalNames = OriginalNames(); + const QStringList originalNames = AllGroupNames(); const QRegularExpression re(NameRegExp()); foreach(const QString &str, originalNames) @@ -463,27 +463,3 @@ void TST_MeasurementRegExp::CheckNames() const QCOMPARE(re.match(translated).hasMatch(), true); } } - -//--------------------------------------------------------------------------------------------------------------------- -QStringList TST_MeasurementRegExp::OriginalNames() const -{ - const QStringList originalNames = QStringList() << ListGroupA() - << ListGroupB() - << ListGroupC() - << ListGroupD() - << ListGroupE() - << ListGroupF() - << ListGroupG() - << ListGroupH() - << ListGroupI() - << ListGroupJ() - << ListGroupK() - << ListGroupL() - << ListGroupM() - << ListGroupN() - << ListGroupO() - << ListGroupP() - << ListGroupQ(); - - return originalNames; -} diff --git a/src/test/ValentinaTest/tst_measurementregexp.h b/src/test/ValentinaTest/tst_measurementregexp.h index 19dbc579f..f9e637e60 100644 --- a/src/test/ValentinaTest/tst_measurementregexp.h +++ b/src/test/ValentinaTest/tst_measurementregexp.h @@ -57,7 +57,6 @@ private: int LoadTranslation(const QString &checkedSystem, const QString &checkedLocale); void InitTrMs(); void CheckNames() const; - QStringList OriginalNames() const; }; #endif // TST_MEASUREMENTREGEXP_H