From 8405111f3940f3d23832690c95021413ca5f9663 Mon Sep 17 00:00:00 2001 From: Vincent Payet Date: Wed, 6 Nov 2024 16:11:04 +0100 Subject: [PATCH] test exception --- .../modelConverter/convertorVisitor.cpp | 8 ++--- .../modelParser/testConvertorVisitor.cpp | 31 +++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/solver/modelConverter/convertorVisitor.cpp b/src/solver/modelConverter/convertorVisitor.cpp index cf01873261..690ba75852 100644 --- a/src/solver/modelConverter/convertorVisitor.cpp +++ b/src/solver/modelConverter/convertorVisitor.cpp @@ -73,18 +73,18 @@ std::any ConvertorVisitor::visit(antlr4::tree::ParseTree* tree) class NoParameterOrVariableWithThisName: public std::exception { public: - NoParameterOrVariableWithThisName(std::string id): - id_(id) + NoParameterOrVariableWithThisName(const std::string& id) { + msg_ = "No parameter or variable found for this identifier: " + id; } const char* what() const noexcept override { - return ("No parameter or variable found for this identifier: " + id_).c_str(); + return msg_.c_str(); } private: - std::string id_ = ""; + std::string msg_; }; std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* context) diff --git a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp index 172901ba96..2d2be338bb 100644 --- a/src/tests/src/solver/modelParser/testConvertorVisitor.cpp +++ b/src/tests/src/solver/modelParser/testConvertorVisitor.cpp @@ -81,6 +81,37 @@ BOOST_FIXTURE_TEST_CASE(identifier, Fixture) std::string expression = "param1"; auto* n = ModelConverter::convertExpressionToNode(expression, registry, model0); BOOST_CHECK_EQUAL(n->name(), "ParameterNode"); + + expression = "varP"; + n = ModelConverter::convertExpressionToNode(expression, registry, model0); + BOOST_CHECK_EQUAL(n->name(), "VariableNode"); +} + +bool expectedMessage(const std::exception& ex) +{ + BOOST_CHECK_EQUAL(ex.what(), + std::string("No parameter or variable found for this identifier: abc")); + return true; +} + +BOOST_FIXTURE_TEST_CASE(identifierNotFound, Fixture) +{ + ModelParser::Library library; + ModelParser::Model model0{ + .id = "model0", + .description = "description", + .parameters = {{"param1", true, false}, {"param2", false, false}}, + .variables = {{"varP", "7", "pmin", ModelParser::ValueType::CONTINUOUS}, + {"var2", "0", "param2", ModelParser::ValueType::CONTINUOUS}}, + .ports = {}, + .port_field_definitions = {}, + .constraints = {}, + .objective = "objectives"}; + + std::string expression = "abc"; // not a param or var + BOOST_CHECK_EXCEPTION(ModelConverter::convertExpressionToNode(expression, registry, model0), + std::exception, + expectedMessage); } BOOST_FIXTURE_TEST_CASE(AddSub, Fixture)