Added action: THROW_EXCEPTION

This commit is contained in:
Joakim Hove 2013-10-08 16:54:41 +02:00
parent 8e550b7f32
commit 6dce82c5a5
6 changed files with 39 additions and 9 deletions

View File

@ -38,14 +38,21 @@ using namespace Opm;
BOOST_AUTO_TEST_CASE( parse_ACTION_OK ) {
ParserPtr parser(new Parser( false ));
boost::filesystem::path actionFile("testdata/integration_tests/ACTION/ACTION.txt");
boost::filesystem::path actionFile2("testdata/integration_tests/ACTION/ACTION_EXCEPTION.txt");
ParserKeywordConstPtr DIMENS( new ParserKeyword("DIMENS" , (size_t) 1 , IGNORE_WARNING ));
ParserKeywordConstPtr THROW( new ParserKeyword("THROW" , THROW_EXCEPTION ));
BOOST_REQUIRE( parser->loadKeywordFromFile( boost::filesystem::path( std::string(KEYWORD_DIRECTORY) + std::string("/W/WCONHIST") )) );
parser->addKeyword( DIMENS );
parser->addKeyword( THROW );
BOOST_REQUIRE( parser->hasKeyword( "DIMENS" ));
BOOST_REQUIRE( parser->hasKeyword( "WCONHIST" ));
BOOST_REQUIRE( parser->hasKeyword( "THROW" ));
BOOST_REQUIRE_THROW( parser->parse( actionFile2.string() , false) , std::invalid_argument );
DeckPtr deck = parser->parse(actionFile.string() , false);
DeckKeywordConstPtr kw1 = deck->getKeyword("WCONHIST" , 0);
BOOST_CHECK_EQUAL( 3U , kw1->size() );
@ -83,5 +90,4 @@ BOOST_AUTO_TEST_CASE( parse_ACTION_OK ) {
BOOST_CHECK_EQUAL( 6U , location.second);
}
}

View File

@ -90,7 +90,7 @@ namespace Opm {
if (inputstream) {
RawKeywordPtr rawKeyword;
while (tryParseKeyword(deck, file.string() , lineNR , inputstream, rawKeyword, parseStrict)) {
if (rawKeyword->getKeywordName() == Opm::RawConsts::include) {
RawRecordConstPtr firstRecord = rawKeyword->getRecord(0);
@ -146,6 +146,11 @@ namespace Opm {
RawKeywordPtr Parser::createRawKeyword(const DeckConstPtr deck, const std::string& filename , size_t lineNR , const std::string& keywordString, bool strictParsing) const {
if (hasKeyword(keywordString)) {
ParserKeywordConstPtr parserKeyword = m_parserKeywords.find(keywordString)->second;
ParserKeywordActionEnum action = parserKeyword->getAction();
if (action == THROW_EXCEPTION)
throw std::invalid_argument("Parsing terminated by fatal keyword: " + keywordString);
if (parserKeyword->getSizeType() == SLASH_TERMINATED)
return RawKeywordPtr(new RawKeyword(keywordString , filename , lineNR));
else {
@ -174,13 +179,14 @@ namespace Opm {
}
}
bool Parser::tryParseKeyword(const DeckConstPtr deck, const std::string& filename , size_t& lineNR , std::ifstream& inputstream, RawKeywordPtr& rawKeyword, bool strictParsing) const {
std::string line;
while (std::getline(inputstream, line)) {
std::string keywordString;
lineNR++;
if (rawKeyword == NULL) {
if (RawKeyword::tryParseKeyword(line, keywordString)) {
rawKeyword = createRawKeyword(deck, filename , lineNR , keywordString, strictParsing);

View File

@ -114,6 +114,9 @@ namespace Opm {
case IGNORE:
return "IGNORE";
break;
case THROW_EXCEPTION:
return "THROW_EXCEPTION";
break;
case IGNORE_WARNING:
return "IGNORE_WARNING";
break;
@ -127,6 +130,8 @@ namespace Opm {
return INTERNALIZE;
else if (stringValue == "IGNORE")
return IGNORE;
else if (stringValue == "THROW_EXCEPTION")
return THROW_EXCEPTION;
else if (stringValue == "IGNORE_WARNING")
return IGNORE_WARNING;
else

View File

@ -50,7 +50,8 @@ namespace Opm {
enum ParserKeywordActionEnum {
INTERNALIZE = 0,
IGNORE = 1,
IGNORE_WARNING = 2
IGNORE_WARNING = 2,
THROW_EXCEPTION = 3
};
const std::string ParserKeywordActionEnum2String(ParserKeywordActionEnum enumValue);

View File

@ -105,9 +105,10 @@ BOOST_AUTO_TEST_CASE(TestValueTypeEnumLoop) {
/*****************************************************************/
BOOST_AUTO_TEST_CASE(TestKeywordActionEnum2String) {
BOOST_CHECK_EQUAL( "INTERNALIZE" , ParserKeywordActionEnum2String(INTERNALIZE));
BOOST_CHECK_EQUAL( "IGNORE" , ParserKeywordActionEnum2String(IGNORE));
BOOST_CHECK_EQUAL( "IGNORE_WARNING" , ParserKeywordActionEnum2String(IGNORE_WARNING));
BOOST_CHECK_EQUAL( "INTERNALIZE" , ParserKeywordActionEnum2String(INTERNALIZE));
BOOST_CHECK_EQUAL( "IGNORE" , ParserKeywordActionEnum2String(IGNORE));
BOOST_CHECK_EQUAL( "IGNORE_WARNING" , ParserKeywordActionEnum2String(IGNORE_WARNING));
BOOST_CHECK_EQUAL( "THROW_EXCEPTION" , ParserKeywordActionEnum2String(THROW_EXCEPTION));
}
@ -116,6 +117,7 @@ BOOST_AUTO_TEST_CASE(TestKeywordActionEnumFromString) {
BOOST_CHECK_EQUAL( INTERNALIZE , ParserKeywordActionEnumFromString("INTERNALIZE"));
BOOST_CHECK_EQUAL( IGNORE_WARNING , ParserKeywordActionEnumFromString("IGNORE_WARNING"));
BOOST_CHECK_EQUAL( IGNORE , ParserKeywordActionEnumFromString("IGNORE"));
BOOST_CHECK_EQUAL( THROW_EXCEPTION , ParserKeywordActionEnumFromString("THROW_EXCEPTION"));
}
@ -124,10 +126,12 @@ BOOST_AUTO_TEST_CASE(TestKeywordActionEnumLoop) {
BOOST_CHECK_EQUAL( INTERNALIZE , ParserKeywordActionEnumFromString( ParserKeywordActionEnum2String( INTERNALIZE ) ));
BOOST_CHECK_EQUAL( IGNORE , ParserKeywordActionEnumFromString( ParserKeywordActionEnum2String( IGNORE ) ));
BOOST_CHECK_EQUAL( IGNORE_WARNING , ParserKeywordActionEnumFromString( ParserKeywordActionEnum2String( IGNORE_WARNING ) ));
BOOST_CHECK_EQUAL( THROW_EXCEPTION , ParserKeywordActionEnumFromString( ParserKeywordActionEnum2String( THROW_EXCEPTION ) ));
BOOST_CHECK_EQUAL( "INTERNALIZE" , ParserKeywordActionEnum2String(ParserKeywordActionEnumFromString( "INTERNALIZE" ) ));
BOOST_CHECK_EQUAL( "IGNORE" , ParserKeywordActionEnum2String(ParserKeywordActionEnumFromString( "IGNORE" ) ));
BOOST_CHECK_EQUAL( "IGNORE_WARNING" , ParserKeywordActionEnum2String(ParserKeywordActionEnumFromString( "IGNORE_WARNING" ) ));
BOOST_CHECK_EQUAL( "THROW_EXCEPTION" , ParserKeywordActionEnum2String(ParserKeywordActionEnumFromString( "THROW_EXCEPTION" ) ));
}

View File

@ -0,0 +1,8 @@
THROW
-- This keyword should raise an exception in the parser
Some data /
/