diff --git a/ApplicationCode/ProjectDataModel/RimCalculation.cpp b/ApplicationCode/ProjectDataModel/RimCalculation.cpp index 8d223a35e0..1e414293a6 100644 --- a/ApplicationCode/ProjectDataModel/RimCalculation.cpp +++ b/ApplicationCode/ProjectDataModel/RimCalculation.cpp @@ -277,15 +277,17 @@ bool RimCalculation::calculate() //-------------------------------------------------------------------------------------------------- QString RimCalculation::findLeftHandSide(const QString& expresion) { - QString exprWithSpace = expresion; - exprWithSpace.replace("\n", " "); - - QStringList words = exprWithSpace.split(" ", QString::SkipEmptyParts); - - int index = words.lastIndexOf(":="); + int index = expresion.lastIndexOf(":="); if (index > 0) { - return words[index - 1]; + QString s = expresion.left(index).simplified(); + + QStringList words = s.split(" "); + + if (words.size() > 0) + { + return words.back(); + } } return ""; diff --git a/ApplicationCode/ProjectDataModel/RimCalculation.h b/ApplicationCode/ProjectDataModel/RimCalculation.h index 7fc7126753..400884b80f 100644 --- a/ApplicationCode/ProjectDataModel/RimCalculation.h +++ b/ApplicationCode/ProjectDataModel/RimCalculation.h @@ -51,8 +51,9 @@ public: virtual caf::PdmFieldHandle* userDescriptionField() override; -private: static QString findLeftHandSide(const QString& expresion); + +private: RimCalculationVariable* findByName(const QString& name) const; QString buildCalculationName() const; diff --git a/ApplicationCode/UnitTests/RicExpressionParser-Test.cpp b/ApplicationCode/UnitTests/RicExpressionParser-Test.cpp index bcbdf14cec..9617dd0d46 100644 --- a/ApplicationCode/UnitTests/RicExpressionParser-Test.cpp +++ b/ApplicationCode/UnitTests/RicExpressionParser-Test.cpp @@ -1,5 +1,6 @@ #include "gtest/gtest.h" +#include "RimCalculation.h" #include "expressionparser/ExpressionParser.h" @@ -46,3 +47,33 @@ TEST(RicExpressionParserTest, DetectVariables) EXPECT_STREQ(variables[3].toStdString().data(), "y"); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +TEST(RicExpressionParserTest, FindLeftHandSide) +{ + { + QString expr = "c := a"; + + QString s = RimCalculation::findLeftHandSide(expr); + + EXPECT_STREQ(s.toStdString().data(), "c"); + } + + { + QString expr = "c:=a"; + + QString s = RimCalculation::findLeftHandSide(expr); + + EXPECT_STREQ(s.toStdString().data(), "c"); + } + + { + QString expr = "\na:=b\n\nc:=a"; + + QString s = RimCalculation::findLeftHandSide(expr); + + EXPECT_STREQ(s.toStdString().data(), "c"); + } +} +