mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Merge pull request #5440 from OPM/improve-robustness-parser
Improve robustness parser
This commit is contained in:
commit
7aea799a70
@ -1359,6 +1359,12 @@ int RiaApplication::launchUnitTests()
|
|||||||
|
|
||||||
testing::InitGoogleTest( &argc, argv );
|
testing::InitGoogleTest( &argc, argv );
|
||||||
|
|
||||||
|
//
|
||||||
|
// Use the gtest filter to execute a subset of tests
|
||||||
|
//::testing::GTEST_FLAG( filter ) = "*RifCaseRealizationParametersReaderTest*";
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
// Use this macro in main() to run all tests. It returns 0 if all
|
// Use this macro in main() to run all tests. It returns 0 if all
|
||||||
// tests are successful, or 1 otherwise.
|
// tests are successful, or 1 otherwise.
|
||||||
//
|
//
|
||||||
|
@ -28,12 +28,6 @@
|
|||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
|
||||||
/// Constants
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
|
||||||
#define PARAMETERS_FILE_NAME "parameters.txt"
|
|
||||||
#define RUNSPEC_FILE_NAME "runspecification.xml"
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -67,11 +61,11 @@ std::shared_ptr<RifCaseRealizationReader> RifCaseRealizationReader::createReader
|
|||||||
{
|
{
|
||||||
std::shared_ptr<RifCaseRealizationReader> reader;
|
std::shared_ptr<RifCaseRealizationReader> reader;
|
||||||
|
|
||||||
if ( fileName.endsWith( PARAMETERS_FILE_NAME ) )
|
if ( fileName.endsWith( parametersFileName() ) )
|
||||||
{
|
{
|
||||||
reader.reset( new RifCaseRealizationParametersReader( fileName ) );
|
reader.reset( new RifCaseRealizationParametersReader( fileName ) );
|
||||||
}
|
}
|
||||||
else if ( fileName.endsWith( RUNSPEC_FILE_NAME ) )
|
else if ( fileName.endsWith( runSpecificationFileName() ) )
|
||||||
{
|
{
|
||||||
reader.reset( new RifCaseRealizationRunspecificationReader( fileName ) );
|
reader.reset( new RifCaseRealizationRunspecificationReader( fileName ) );
|
||||||
}
|
}
|
||||||
@ -108,6 +102,22 @@ void RifCaseRealizationReader::closeFile()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
QString RifCaseRealizationReader::parametersFileName()
|
||||||
|
{
|
||||||
|
return "parameters.txt";
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
QString RifCaseRealizationReader::runSpecificationFileName()
|
||||||
|
{
|
||||||
|
return "runspecification.xml";
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -136,6 +146,8 @@ void RifCaseRealizationParametersReader::parse()
|
|||||||
int lineNo = 0;
|
int lineNo = 0;
|
||||||
QTextStream* dataStream = openDataStream();
|
QTextStream* dataStream = openDataStream();
|
||||||
|
|
||||||
|
QStringList errors;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
while ( !dataStream->atEnd() )
|
while ( !dataStream->atEnd() )
|
||||||
@ -147,34 +159,30 @@ void RifCaseRealizationParametersReader::parse()
|
|||||||
|
|
||||||
if ( cols.size() != 2 )
|
if ( cols.size() != 2 )
|
||||||
{
|
{
|
||||||
throw FileParseException(
|
errors << QString( "RifEnsembleParametersReader: Invalid file format in line %1" ).arg( lineNo );
|
||||||
QString( "RifEnsembleParametersReader: Invalid file format in line %1" ).arg( lineNo ) );
|
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString& name = cols[0];
|
QString& name = cols[0];
|
||||||
QString& strValue = cols[1];
|
QString& strValue = cols[1];
|
||||||
|
|
||||||
if ( RiaStdStringTools::startsWithAlphabetic( strValue.toStdString() ) )
|
if ( RiaStdStringTools::isNumber( strValue.toStdString(), QLocale::c().decimalPoint().toLatin1() ) )
|
||||||
{
|
{
|
||||||
m_parameters->addParameter( name, strValue );
|
bool parseOk = true;
|
||||||
|
double value = QLocale::c().toDouble( strValue, &parseOk );
|
||||||
|
if ( parseOk )
|
||||||
|
{
|
||||||
|
m_parameters->addParameter( name, value );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( !RiaStdStringTools::isNumber( strValue.toStdString(), QLocale::c().decimalPoint().toLatin1() ) )
|
errors << QString( "RifEnsembleParametersReader: Invalid number format in line %1" ).arg( lineNo );
|
||||||
{
|
|
||||||
throw FileParseException(
|
|
||||||
QString( "RifEnsembleParametersReader: Invalid number format in line %1" ).arg( lineNo ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool parseOk = true;
|
|
||||||
double value = QLocale::c().toDouble( strValue, &parseOk );
|
|
||||||
if ( !parseOk )
|
|
||||||
{
|
|
||||||
throw FileParseException(
|
|
||||||
QString( "RifEnsembleParametersReader: Invalid number format in line %1" ).arg( lineNo ) );
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
m_parameters->addParameter( name, value );
|
{
|
||||||
|
m_parameters->addParameter( name, strValue );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,6 +193,11 @@ void RifCaseRealizationParametersReader::parse()
|
|||||||
closeDataStream();
|
closeDataStream();
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for ( const auto& s : errors )
|
||||||
|
{
|
||||||
|
RiaLogging::warning( s );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -232,6 +245,8 @@ void RifCaseRealizationRunspecificationReader::parse()
|
|||||||
auto file = openFile();
|
auto file = openFile();
|
||||||
QXmlStreamReader xml( file );
|
QXmlStreamReader xml( file );
|
||||||
|
|
||||||
|
QStringList errors;
|
||||||
|
|
||||||
QString paramName;
|
QString paramName;
|
||||||
|
|
||||||
while ( !xml.atEnd() )
|
while ( !xml.atEnd() )
|
||||||
@ -256,30 +271,24 @@ void RifCaseRealizationRunspecificationReader::parse()
|
|||||||
|
|
||||||
if ( paramName.isEmpty() ) continue;
|
if ( paramName.isEmpty() ) continue;
|
||||||
|
|
||||||
if ( RiaStdStringTools::startsWithAlphabetic( paramStrValue.toStdString() ) )
|
if ( RiaStdStringTools::isNumber( paramStrValue.toStdString(), QLocale::c().decimalPoint().toLatin1() ) )
|
||||||
{
|
{
|
||||||
m_parameters->addParameter( paramName, paramStrValue );
|
bool parseOk = true;
|
||||||
|
double value = QLocale::c().toDouble( paramStrValue, &parseOk );
|
||||||
|
if ( parseOk )
|
||||||
|
{
|
||||||
|
m_parameters->addParameter( paramName, value );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( !RiaStdStringTools::isNumber( paramStrValue.toStdString(),
|
errors << QString(
|
||||||
QLocale::c().decimalPoint().toLatin1() ) )
|
"RifCaseRealizationRunspecificationReader: Invalid number format in line %1" )
|
||||||
{
|
.arg( xml.lineNumber() );
|
||||||
throw FileParseException(
|
|
||||||
QString( "RifEnsembleParametersReader: Invalid number format in line %1" )
|
|
||||||
.arg( xml.lineNumber() ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool parseOk = true;
|
|
||||||
double value = QLocale::c().toDouble( paramStrValue, &parseOk );
|
|
||||||
if ( !parseOk )
|
|
||||||
{
|
|
||||||
throw FileParseException(
|
|
||||||
QString( "RifEnsembleParametersReader: Invalid number format in line %1" )
|
|
||||||
.arg( xml.lineNumber() ) );
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
m_parameters->addParameter( paramName, value );
|
{
|
||||||
|
m_parameters->addParameter( paramName, paramStrValue );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -293,6 +302,11 @@ void RifCaseRealizationRunspecificationReader::parse()
|
|||||||
}
|
}
|
||||||
|
|
||||||
closeFile();
|
closeFile();
|
||||||
|
|
||||||
|
for ( const auto& s : errors )
|
||||||
|
{
|
||||||
|
RiaLogging::warning( s );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -316,8 +330,8 @@ QString RifCaseRealizationParametersFileLocator::locate( const QString& modelPat
|
|||||||
QStringList files = qdir.entryList( QDir::Files | QDir::NoDotAndDotDot );
|
QStringList files = qdir.entryList( QDir::Files | QDir::NoDotAndDotDot );
|
||||||
for ( const QString& file : files )
|
for ( const QString& file : files )
|
||||||
{
|
{
|
||||||
if ( QString::compare( file, PARAMETERS_FILE_NAME, Qt::CaseInsensitive ) == 0 ||
|
if ( QString::compare( file, RifCaseRealizationReader::parametersFileName(), Qt::CaseInsensitive ) == 0 ||
|
||||||
QString::compare( file, RUNSPEC_FILE_NAME, Qt::CaseInsensitive ) == 0 )
|
QString::compare( file, RifCaseRealizationReader::runSpecificationFileName(), Qt::CaseInsensitive ) == 0 )
|
||||||
{
|
{
|
||||||
return qdir.absoluteFilePath( file );
|
return qdir.absoluteFilePath( file );
|
||||||
}
|
}
|
||||||
|
@ -52,6 +52,9 @@ public:
|
|||||||
|
|
||||||
static std::shared_ptr<RifCaseRealizationReader> createReaderFromFileName( const QString& fileName );
|
static std::shared_ptr<RifCaseRealizationReader> createReaderFromFileName( const QString& fileName );
|
||||||
|
|
||||||
|
static QString parametersFileName();
|
||||||
|
static QString runSpecificationFileName();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QFile* openFile();
|
QFile* openFile();
|
||||||
void closeFile();
|
void closeFile();
|
||||||
|
@ -61,49 +61,3 @@ TEST( RifCaseRealizationParametersReaderTest, SuccessfulParsing )
|
|||||||
EXPECT_TRUE( false );
|
EXPECT_TRUE( false );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
|
||||||
///
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
|
||||||
TEST( RifCaseRealizationParametersReaderTest, ParseFailed_InvalidFormat )
|
|
||||||
{
|
|
||||||
RifCaseRealizationParametersReader reader( CASE_REAL_TEST_DATA_DIRECTORY + "parameters_invalid_format.txt" );
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
reader.parse();
|
|
||||||
|
|
||||||
EXPECT_TRUE( false );
|
|
||||||
}
|
|
||||||
catch ( FileParseException e )
|
|
||||||
{
|
|
||||||
EXPECT_TRUE( e.message.contains( "Invalid file format in line 10" ) );
|
|
||||||
}
|
|
||||||
catch ( ... )
|
|
||||||
{
|
|
||||||
EXPECT_TRUE( false );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
|
||||||
///
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
|
||||||
TEST( RifCaseRealizationParametersReaderTest, ParseFailed_InvalidNumberFormat )
|
|
||||||
{
|
|
||||||
RifCaseRealizationParametersReader reader( CASE_REAL_TEST_DATA_DIRECTORY + "parameters_invalid_number_format.txt" );
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
reader.parse();
|
|
||||||
|
|
||||||
EXPECT_TRUE( false );
|
|
||||||
}
|
|
||||||
catch ( FileParseException e )
|
|
||||||
{
|
|
||||||
EXPECT_TRUE( e.message.contains( "Invalid number format in line 10" ) );
|
|
||||||
}
|
|
||||||
catch ( ... )
|
|
||||||
{
|
|
||||||
EXPECT_TRUE( false );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user