From c4e1021f3ad9798132c7e952c1c3f72d291b7696 Mon Sep 17 00:00:00 2001 From: Stefan Bienert <stefan.bienert@unibas.ch> Date: Thu, 12 May 2011 16:21:34 +0200 Subject: [PATCH] Fixed small bug in RenameChain: now it's allowed to rename a chain with its own current name. Also enhanced test on RenameChain. Fixed documentation of RenameChain, RenameAtom --- modules/mol/base/doc/editors.rst | 8 ++++---- modules/mol/base/src/impl/entity_impl.cc | 4 ++-- modules/mol/base/tests/test_chain.cc | 10 ++++++++-- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/modules/mol/base/doc/editors.rst b/modules/mol/base/doc/editors.rst index 02a97514e..71bcae0a9 100644 --- a/modules/mol/base/doc/editors.rst +++ b/modules/mol/base/doc/editors.rst @@ -85,8 +85,8 @@ The basic functionality of editors is implemented in the EditorBase class. identifiers. If new_name is already in use by any chain, an exception will be generated. - :param chain: Must be a valid chain - :type residue: :class:`ChainHandle` + :param chain: Must be a valid chain + :type chain: :class:`ChainHandle` :param new_name: is the new name :type new_name: string @@ -196,8 +196,8 @@ The basic functionality of editors is implemented in the EditorBase class. Change the name of atom to new_name without changing anything else. - :param residue: Must be a valid atom - :type residue: :class:`AtomHandle` + :param atom: Must be a valid atom + :type atom: :class:`AtomHandle` :param new_name: is the new name. Free to choose and not verified to be a valid atom identifier. :type new_name: string diff --git a/modules/mol/base/src/impl/entity_impl.cc b/modules/mol/base/src/impl/entity_impl.cc index 58d2bce06..26709b431 100644 --- a/modules/mol/base/src/impl/entity_impl.cc +++ b/modules/mol/base/src/impl/entity_impl.cc @@ -1177,9 +1177,9 @@ pointer_it<ChainImplPtr> EntityImpl::GetChainIter(const String& name) void EntityImpl::RenameChain(ChainImplPtr chain, const String& new_name) { - ChainImplList::iterator i; + //ChainImplList::iterator i; ChainImplPtr ch=this->FindChain(new_name); - if (ch) { + if ((ch) && (ch != chain)) { throw IntegrityError("unable to rename chain '"+chain->GetName()+ "' to '"+new_name+"', since there is already a chain " "with that name"); diff --git a/modules/mol/base/tests/test_chain.cc b/modules/mol/base/tests/test_chain.cc index a0fd47ba3..a2bdda81f 100644 --- a/modules/mol/base/tests/test_chain.cc +++ b/modules/mol/base/tests/test_chain.cc @@ -21,6 +21,7 @@ */ #include <ost/mol/mol.hh> #include <ost/message.hh> +#include <ost/integrity_error.hh> #define BOOST_TEST_DYN_LINK #include <boost/test/unit_test.hpp> @@ -192,8 +193,13 @@ BOOST_AUTO_TEST_CASE(rename_chain) EntityHandle eh=CreateEntity(); XCSEditor e=eh.EditXCS(); ChainHandle ch1=e.InsertChain("A"); - e.RenameChain(ch1, "B"); - BOOST_CHECK_EQUAL(ch1.GetName(), "B"); + ChainHandle ch2=e.InsertChain("B"); + e.RenameChain(ch1, "A"); // renaming chain with its current name should work + BOOST_CHECK_EQUAL(ch1.GetName(), "A"); + BOOST_CHECK_THROW(e.RenameChain(ch1, "B"), IntegrityError); + e.RenameChain(ch2, "C"); + BOOST_CHECK_EQUAL(ch2.GetName(), "C"); + BOOST_CHECK_EQUAL(eh.GetChainCount(), 2); } BOOST_AUTO_TEST_SUITE_END() -- GitLab