mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#5434 Ensemble Parameters : Improve robustness
Avoid throwing when errors are detected
This commit is contained in:
parent
96fd4a1c9f
commit
7de8b6bb08
@ -1359,6 +1359,12 @@ int RiaApplication::launchUnitTests()
|
||||
|
||||
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
|
||||
// tests are successful, or 1 otherwise.
|
||||
//
|
||||
|
@ -28,12 +28,6 @@
|
||||
|
||||
#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;
|
||||
|
||||
if ( fileName.endsWith( PARAMETERS_FILE_NAME ) )
|
||||
if ( fileName.endsWith( parametersFileName() ) )
|
||||
{
|
||||
reader.reset( new RifCaseRealizationParametersReader( fileName ) );
|
||||
}
|
||||
else if ( fileName.endsWith( RUNSPEC_FILE_NAME ) )
|
||||
else if ( fileName.endsWith( runSpecificationFileName() ) )
|
||||
{
|
||||
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;
|
||||
QTextStream* dataStream = openDataStream();
|
||||
|
||||
QStringList errors;
|
||||
|
||||
try
|
||||
{
|
||||
while ( !dataStream->atEnd() )
|
||||
@ -147,34 +159,30 @@ void RifCaseRealizationParametersReader::parse()
|
||||
|
||||
if ( cols.size() != 2 )
|
||||
{
|
||||
throw FileParseException(
|
||||
QString( "RifEnsembleParametersReader: Invalid file format in line %1" ).arg( lineNo ) );
|
||||
errors << QString( "RifEnsembleParametersReader: Invalid file format in line %1" ).arg( lineNo );
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
QString& name = cols[0];
|
||||
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
|
||||
{
|
||||
errors << QString( "RifEnsembleParametersReader: Invalid number format in line %1" ).arg( lineNo );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !RiaStdStringTools::isNumber( strValue.toStdString(), QLocale::c().decimalPoint().toLatin1() ) )
|
||||
{
|
||||
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 ) );
|
||||
}
|
||||
|
||||
m_parameters->addParameter( name, value );
|
||||
m_parameters->addParameter( name, strValue );
|
||||
}
|
||||
}
|
||||
|
||||
@ -185,6 +193,11 @@ void RifCaseRealizationParametersReader::parse()
|
||||
closeDataStream();
|
||||
throw;
|
||||
}
|
||||
|
||||
for ( const auto& s : errors )
|
||||
{
|
||||
RiaLogging::warning( s );
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -316,8 +329,8 @@ QString RifCaseRealizationParametersFileLocator::locate( const QString& modelPat
|
||||
QStringList files = qdir.entryList( QDir::Files | QDir::NoDotAndDotDot );
|
||||
for ( const QString& file : files )
|
||||
{
|
||||
if ( QString::compare( file, PARAMETERS_FILE_NAME, Qt::CaseInsensitive ) == 0 ||
|
||||
QString::compare( file, RUNSPEC_FILE_NAME, Qt::CaseInsensitive ) == 0 )
|
||||
if ( QString::compare( file, RifCaseRealizationReader::parametersFileName(), Qt::CaseInsensitive ) == 0 ||
|
||||
QString::compare( file, RifCaseRealizationReader::runSpecificationFileName(), Qt::CaseInsensitive ) == 0 )
|
||||
{
|
||||
return qdir.absoluteFilePath( file );
|
||||
}
|
||||
|
@ -52,6 +52,9 @@ public:
|
||||
|
||||
static std::shared_ptr<RifCaseRealizationReader> createReaderFromFileName( const QString& fileName );
|
||||
|
||||
static QString parametersFileName();
|
||||
static QString runSpecificationFileName();
|
||||
|
||||
protected:
|
||||
QFile* openFile();
|
||||
void closeFile();
|
||||
|
@ -61,49 +61,3 @@ TEST( RifCaseRealizationParametersReaderTest, SuccessfulParsing )
|
||||
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