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);
+}