mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-09 23:16:00 -06:00
#3378 Fix boolean reading form command file.
This commit is contained in:
parent
cc2faae87d
commit
09d263cc39
@ -86,3 +86,47 @@ void RicfFieldWriter<QString>::writeFieldData(const QString& fieldValue, QTextSt
|
||||
}
|
||||
outputStream << "\"";
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RicfFieldReader<bool>::readFieldData(bool& fieldValue, QTextStream& inputStream, RicfMessages* errorMessageContainer)
|
||||
{
|
||||
errorMessageContainer->skipWhiteSpaceWithLineNumberCount(inputStream);
|
||||
QString accumulatedFieldValue;
|
||||
QChar nextChar;
|
||||
QChar currentChar;
|
||||
while (!inputStream.atEnd())
|
||||
{
|
||||
nextChar = errorMessageContainer->peekNextChar(inputStream);
|
||||
if (nextChar.isLetter())
|
||||
{
|
||||
currentChar = errorMessageContainer->readCharWithLineNumberCount(inputStream);
|
||||
accumulatedFieldValue += currentChar;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Accept TRUE or False in any case combination.
|
||||
bool evaluatesToTrue = QString::compare(accumulatedFieldValue, QString("true"), Qt::CaseInsensitive) == 0;
|
||||
bool evaluatesToFalse = QString::compare(accumulatedFieldValue, QString("false"), Qt::CaseInsensitive) == 0;
|
||||
if (evaluatesToTrue == evaluatesToFalse)
|
||||
{
|
||||
QString formatString("Boolean argument \"%1\" for the command \"%2\" does not evaluate to either true or false");
|
||||
QString errorMessage = formatString.arg(errorMessageContainer->currentArgument).arg(errorMessageContainer->currentCommand);
|
||||
errorMessageContainer->addError(errorMessage);
|
||||
}
|
||||
fieldValue = evaluatesToTrue;
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RicfFieldWriter<bool>::writeFieldData(const bool& fieldValue, QTextStream& outputStream)
|
||||
{
|
||||
// Lower-case true/false is used in the documentation.
|
||||
outputStream << (fieldValue ? "true" : "false");
|
||||
}
|
||||
|
@ -65,6 +65,19 @@ struct RicfFieldWriter<QString>
|
||||
static void writeFieldData(const QString & fieldValue, QTextStream& outputStream);
|
||||
};
|
||||
|
||||
template <>
|
||||
struct RicfFieldReader<bool>
|
||||
{
|
||||
static void readFieldData(bool& fieldValue, QTextStream& inputStream, RicfMessages* errorMessageContainer);
|
||||
};
|
||||
|
||||
template <>
|
||||
struct RicfFieldWriter<bool>
|
||||
{
|
||||
static void writeFieldData(const bool& fieldValue, QTextStream& outputStream);
|
||||
};
|
||||
|
||||
|
||||
template <typename T>
|
||||
struct RicfFieldReader< caf::AppEnum<T> >
|
||||
{
|
||||
|
@ -16,15 +16,18 @@ public:
|
||||
RICF_InitField(&m_textArgument, "TextArgument", QString(), "TextArgument", "", "", "");
|
||||
RICF_InitField(&m_doubleArgument, "DoubleArgument", 0.0, "DoubleArgument", "", "", "");
|
||||
RICF_InitField(&m_intArgument, "IntArgument", 0, "IntArgument", "", "", "");
|
||||
RICF_InitField(&m_boolArgument, "BoolArgument", false, "BoolArgument", "", "", "");
|
||||
}
|
||||
|
||||
virtual void execute() override { std::cout << "TestCommand1::execute(" << "\"" << m_textArgument().toStdString() << "\", "
|
||||
<< m_doubleArgument() << ", "
|
||||
<< m_intArgument << ");" << std::endl; }
|
||||
<< m_intArgument << ", "
|
||||
<< m_boolArgument << ");" << std::endl; }
|
||||
|
||||
caf::PdmField<QString> m_textArgument;
|
||||
caf::PdmField<double> m_doubleArgument;
|
||||
caf::PdmField<int> m_intArgument;
|
||||
caf::PdmField<bool> m_boolArgument;
|
||||
};
|
||||
|
||||
CAF_PDM_SOURCE_INIT(TestCommand1, "TestCommand1");
|
||||
@ -39,15 +42,17 @@ public:
|
||||
RICF_InitField(&m_textArgument, "ta", QString(), "TextArgument", "", "", "");
|
||||
RICF_InitField(&m_doubleArgument, "da", 0.0, "DoubleArgument", "", "", "");
|
||||
RICF_InitField(&m_intArgument, "ia", 0,"IntArgument", "", "", "");
|
||||
RICF_InitField(&m_boolArgument, "ba", false,"BoolArgument", "", "", "");
|
||||
}
|
||||
|
||||
virtual void execute() override { std::cout << "TC2::execute(" << "\"" << m_textArgument().toStdString() << "\", "
|
||||
<< m_doubleArgument() << ", "
|
||||
<< m_intArgument << ");" << std::endl; }
|
||||
<< m_intArgument() << ", " << m_boolArgument() << ");" << std::endl; }
|
||||
|
||||
caf::PdmField<QString> m_textArgument;
|
||||
caf::PdmField<double> m_doubleArgument;
|
||||
caf::PdmField<int> m_intArgument;
|
||||
caf::PdmField<bool> m_boolArgument;
|
||||
};
|
||||
|
||||
CAF_PDM_SOURCE_INIT(TC2, "TC2");
|
||||
@ -60,8 +65,9 @@ TEST(RicfCommands, Test1)
|
||||
{
|
||||
QString commandString("TestCommand1(IntArgument=3, TextArgument=\"Dette er en tekst, \\\"og\\\" jeg er: (happy)\", DoubleArgument=5.0e3) \n"
|
||||
"TestCommand1 ( IntArgument = 4 , \n TextArgument = \"Dette er en tekst, \\\"og\\\" jeg er: (happy)\", \n DoubleArgument = 5.0e-3 ) \n"
|
||||
" TestCommand1(TextArgument=\"Litt kortere tekst.\") \n"
|
||||
"TC2 ( ta = \"Hepp\", ia = 3, da= 0.123)");
|
||||
" TestCommand1(TextArgument=\"Litt kortere tekst.\", BoolArgument=true) \n"
|
||||
"TC2( ia = -12, ba=True, ta = \"Floff\", da =-662.518)\n"
|
||||
"TC2 ( ta = \"Hepp\", ia = 3, ba = false, da= 0.123)");
|
||||
|
||||
//std::cout << commandString.toStdString() << std::endl;
|
||||
|
||||
@ -69,24 +75,34 @@ TEST(RicfCommands, Test1)
|
||||
RicfMessages errors;
|
||||
|
||||
auto objects = RicfCommandFileReader::readCommands(inputStream, caf::PdmDefaultObjectFactory::instance(), &errors);
|
||||
EXPECT_EQ((size_t)4, objects.size());
|
||||
EXPECT_EQ((size_t)5, objects.size());
|
||||
|
||||
auto tc2 = dynamic_cast<TestCommand1*>(objects[0]);
|
||||
EXPECT_EQ(39, tc2->m_textArgument().size());
|
||||
EXPECT_EQ(5.0e3, tc2->m_doubleArgument());
|
||||
auto tc1 = dynamic_cast<TestCommand1*>(objects[0]);
|
||||
EXPECT_EQ(39, tc1->m_textArgument().size());
|
||||
EXPECT_EQ(5.0e3, tc1->m_doubleArgument());
|
||||
EXPECT_EQ(false, tc1->m_boolArgument());
|
||||
|
||||
tc2 = dynamic_cast<TestCommand1*>(objects[1]);
|
||||
EXPECT_EQ(39, tc2->m_textArgument().size());
|
||||
EXPECT_EQ(5e-3, tc2->m_doubleArgument());
|
||||
tc1 = dynamic_cast<TestCommand1*>(objects[1]);
|
||||
EXPECT_EQ(39, tc1->m_textArgument().size());
|
||||
EXPECT_EQ(5e-3, tc1->m_doubleArgument());
|
||||
EXPECT_EQ(false, tc1->m_boolArgument());
|
||||
|
||||
tc2 = dynamic_cast<TestCommand1*>(objects[2]);
|
||||
EXPECT_EQ(19, tc2->m_textArgument().size());
|
||||
EXPECT_EQ(0.0, tc2->m_doubleArgument());
|
||||
tc1 = dynamic_cast<TestCommand1*>(objects[2]);
|
||||
EXPECT_EQ(19, tc1->m_textArgument().size());
|
||||
EXPECT_EQ(0.0, tc1->m_doubleArgument());
|
||||
EXPECT_EQ(true, tc1->m_boolArgument());
|
||||
|
||||
auto tc3 = dynamic_cast<TC2*>(objects[3]);
|
||||
EXPECT_EQ(4, tc3->m_textArgument().size());
|
||||
EXPECT_EQ(0.123, tc3->m_doubleArgument());
|
||||
EXPECT_EQ(3, tc3->m_intArgument());
|
||||
auto tc2 = dynamic_cast<TC2*>(objects[3]);
|
||||
EXPECT_EQ(5, tc2->m_textArgument().size());
|
||||
EXPECT_EQ(-662.518, tc2->m_doubleArgument());
|
||||
EXPECT_EQ(-12, tc2->m_intArgument());
|
||||
EXPECT_EQ(true, tc2->m_boolArgument());
|
||||
|
||||
tc2 = dynamic_cast<TC2*>(objects[4]);
|
||||
EXPECT_EQ(4, tc2->m_textArgument().size());
|
||||
EXPECT_EQ(0.123, tc2->m_doubleArgument());
|
||||
EXPECT_EQ(3, tc2->m_intArgument());
|
||||
EXPECT_EQ(false, tc2->m_boolArgument());
|
||||
|
||||
for (auto obj: objects)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user