From: Anthony Geay Date: Tue, 7 May 2019 12:15:50 +0000 (+0200) Subject: YACS does not support Node names with . So now an exception is thrown when attempting... X-Git-Tag: EMC2P_V1_1_0~9 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=9a8701b485430ce46ca2efe57ea2b4332e893c15;p=modules%2Fyacs.git YACS does not support Node names with . So now an exception is thrown when attempting to set a name with . --- diff --git a/src/engine/ComposedNode.hxx b/src/engine/ComposedNode.hxx index 177e9404d..0d6e78314 100644 --- a/src/engine/ComposedNode.hxx +++ b/src/engine/ComposedNode.hxx @@ -45,7 +45,7 @@ namespace YACS friend class Loop; friend class OutPort; friend class ElementaryNode; - protected: + public: static const char SEP_CHAR_BTW_LEVEL[]; protected: ComposedNode(const std::string& name); diff --git a/src/engine/Node.cxx b/src/engine/Node.cxx index 5c9d8fdb2..f7d8196ad 100644 --- a/src/engine/Node.cxx +++ b/src/engine/Node.cxx @@ -69,6 +69,7 @@ Node::Node(const std::string& name):_name(name),_inGate(this),_outGate(this),_fa _implementation(Runtime::RUNTIME_ENGINE_INTERACTION_IMPL_NAME),_modified(1) { // Should be protected by lock ?? + Node::checkValidityOfNodeName(_name); _numId = _total++; idMap[_numId]=this; @@ -158,6 +159,7 @@ Node *Node::cloneWithoutCompAndContDeepCpy(ComposedNode *father, bool editionOnl */ void Node::setName(const std::string& name) { + Node::checkValidityOfNodeName(name); if(_father) { if(_father->isNameAlreadyUsed(name)) @@ -448,6 +450,15 @@ void Node::checkValidityOfPortName(const std::string& name) throw(YACS::Exceptio } } +void Node::checkValidityOfNodeName(const std::string& name) +{ + if(name.find(ComposedNode::SEP_CHAR_BTW_LEVEL,0)!=string::npos) + { + string what("Node name "); what+=name; what+="not valid because it contains character "; what+=ComposedNode::SEP_CHAR_BTW_LEVEL; + throw Exception(what); + } +} + /** * @note : Check that 'node1' and 'node2' have exactly the same father * @exception : If 'node1' and 'node2' have NOT exactly the same father diff --git a/src/engine/Node.hxx b/src/engine/Node.hxx index d43241331..fbd227670 100644 --- a/src/engine/Node.hxx +++ b/src/engine/Node.hxx @@ -202,6 +202,8 @@ namespace YACS virtual void edDisconnectAllLinksWithMe(); static void checkValidityOfPortName(const std::string& name) throw(Exception); static ComposedNode *checkHavingCommonFather(Node *node1, Node *node2) throw(Exception); + public: + static void checkValidityOfNodeName(const std::string& name); }; } diff --git a/src/engine/Proc.cxx b/src/engine/Proc.cxx index 8b9b92d62..f2499cd0f 100644 --- a/src/engine/Proc.cxx +++ b/src/engine/Proc.cxx @@ -203,6 +203,7 @@ void Proc::accept(Visitor *visitor) void Proc::setName(const std::string& name) { + Node::checkValidityOfNodeName(name); _name = name; } diff --git a/src/engine/Test/engineIntegrationTest.cxx b/src/engine/Test/engineIntegrationTest.cxx index f118deb36..7c990762f 100644 --- a/src/engine/Test/engineIntegrationTest.cxx +++ b/src/engine/Test/engineIntegrationTest.cxx @@ -3272,3 +3272,11 @@ void EngineIntegrationTest::testRemoveRuntime() Runtime* r=YACS::ENGINE::getRuntime(); delete r; } + +void EngineIntegrationTest::testWrongNodeNameDetection() +{ + ToyNode *n1=new ToyNode("T1"); + CPPUNIT_ASSERT_THROW(n1->setName("jjj.jj"),YACS::Exception); + delete n1; + CPPUNIT_ASSERT_THROW(ToyNode("T1.DD"),YACS::Exception); +} diff --git a/src/engine/Test/engineIntegrationTest.hxx b/src/engine/Test/engineIntegrationTest.hxx index a6b62ec47..1303a1903 100644 --- a/src/engine/Test/engineIntegrationTest.hxx +++ b/src/engine/Test/engineIntegrationTest.hxx @@ -70,6 +70,7 @@ namespace YACS CPPUNIT_TEST( testForCheckConsistency3 ); CPPUNIT_TEST( testForCheckConsistency4 ); CPPUNIT_TEST( testRemoveRuntime ); + CPPUNIT_TEST( testWrongNodeNameDetection ); CPPUNIT_TEST_SUITE_END(); public: void setUp(); @@ -112,6 +113,7 @@ namespace YACS void testForCheckConsistency3(); void testForCheckConsistency4(); void testRemoveRuntime(); + void testWrongNodeNameDetection(); protected: template static void checkListsEqual(const std::list& setToTest1, const std::list& setToTest2);