void Reset(Keys keyUpIn, Keys keyDownIn, std::shared_ptr<Keyboard> const& keyboard) { keyUp = keyUpIn; keyDown = keyDownIn; connections.Disconnect(); auto & connect = connections; connect(keyboard->KeyUp, [this](Keys key) { POMDOG_ASSERT(keyUp != keyDown); if (key == keyUp) { up = ButtonState::Released; } else if (key == keyDown) { down = ButtonState::Released; } }); connect(keyboard->KeyDown, [this](Keys key) { POMDOG_ASSERT(keyUp != keyDown); if (key == keyUp) { up = ButtonState::Pressed; } else if (key == keyDown) { down = ButtonState::Pressed; } }); }
TEST(ConnectionList, Disconnect) { Signal<void(std::string)> nameChanged; ConnectionList connections; std::string name; connections += nameChanged.Connect([&](std::string const& n) { name = n; }); nameChanged("alice"); EXPECT_EQ("alice", name); nameChanged("bob"); EXPECT_EQ("bob", name); nameChanged("chuck"); EXPECT_EQ("chuck", name); connections.Disconnect(); nameChanged("norris"); EXPECT_EQ("chuck", name); }