diff --git a/RavelCAPI b/RavelCAPI index 909de651e..be1837d64 160000 --- a/RavelCAPI +++ b/RavelCAPI @@ -1 +1 @@ -Subproject commit 909de651ee9d7dc5d99f8926b42b5945b7619d42 +Subproject commit be1837d64c34df8febb425520dd962ee4bee9cbe diff --git a/model/ravelWrap.cc b/model/ravelWrap.cc index 3299c1108..75ba49d8e 100644 --- a/model/ravelWrap.cc +++ b/model/ravelWrap.cc @@ -593,6 +593,7 @@ namespace minsky { lockGroup=ravel->lockGroup; lockGroup->addRavel(ravelPtr); + lockGroup->initialBroadcast(); return true; } } diff --git a/test/testLockGroup.cc b/test/testLockGroup.cc index 592423c50..ac74fc8f5 100644 --- a/test/testLockGroup.cc +++ b/test/testLockGroup.cc @@ -17,9 +17,7 @@ along with Minsky. If not, see . */ -#include "cairoItems.h" -#include "ravelWrap.h" -#include "canvas.h" +#include "minsky.h" #include "minsky_epilogue.h" #undef True @@ -34,6 +32,8 @@ namespace class RavelLockGroupTest : public Canvas, public ::testing::Test { + Minsky minsky; // provides model and selection + LocalMinsky lminsky{minsky}; public: RavelLockGroupTest() : Canvas(make_shared()) {} }; @@ -95,3 +95,41 @@ TEST_F(RavelLockGroupTest, LockGroup) EXPECT_TRUE(b->lockGroup==c->lockGroup); EXPECT_FALSE(d->lockGroup); } + +TEST_F(RavelLockGroupTest, JoinLockGroupBroadcast) +{ + auto a=make_shared(), b=make_shared(); + + // Add ravels to model so joinLockGroup can find them + minsky::minsky().model->addItem(a); + minsky::minsky().model->addItem(b); + + // Create a lock group with ravel a and set some state + a->lockGroup.reset(new RavelLockGroup); + a->lockGroup->addRavel(a); + auto colour=a->lockGroup->colour(); + + // Set calipers on ravel a to have some distinguishable state + auto aState=a->getState(); + ASSERT_FALSE(aState.handleStates.empty()); + aState.handleStates[0].displayFilterCaliper=true; + aState.handleStates[0].minLabel="1991"; + aState.handleStates[0].maxLabel="1991"; + a->applyState(aState); + + // Verify ravel b has different state + ASSERT_FALSE(b->getState().handleStates.empty()); + EXPECT_FALSE(b->getState().handleStates[0].displayFilterCaliper); + EXPECT_NE("1991",b->getState().handleStates[0].minLabel); + EXPECT_NE("1991",b->getState().handleStates[0].maxLabel); + + // Now have b join the lock group using joinLockGroup method + b->joinLockGroup(colour); + + // Verify both ravels are in the same lock group + EXPECT_EQ(a->lockGroup, b->lockGroup); + EXPECT_EQ(2, a->lockGroup->ravels().size()); + + // Verify state was broadcast - check if b got a's caliper settings + EXPECT_TRUE(b->getState()==aState); +}