def test_acc_called_when_subsequent_character_matches(mocker):
    acc = mocker.stub()
    phrase_holder = PhrasesHolder(accepted_char_callback=acc)
    phrase_holder.add_phrase('hello')
    phrase_holder.send_char('h')
    acc.reset_mock()
    phrase_holder.send_char('e')
    acc.assert_called_with('e', 'hello', 'llo')
def test_acc_not_called_when_subsequent_character_does_not_match(mocker):
    acc = mocker.stub()
    phrase_holder = PhrasesHolder(accepted_char_callback=acc)
    phrase_holder.add_phrase('hello')
    phrase_holder.send_char('h')
    acc.reset_mock()
    phrase_holder.send_char('x')
    acc.assert_not_called()
def test_rcc_not_called_when_phrase_is_finished(mocker):
    rcc = mocker.stub()
    phrase_holder = PhrasesHolder(rejected_char_callback=rcc)
    phrase_holder.add_phrase('hey')
    phrase_holder.send_char('h')
    phrase_holder.send_char('e')
    rcc.reset_mock()
    phrase_holder.send_char('y')
    rcc.assert_not_called()
def test_acc_called_when_phrase_is_finished(mocker):
    acc = mocker.stub()
    phrase_holder = PhrasesHolder(accepted_char_callback=acc)
    phrase_holder.add_phrase('hey')
    phrase_holder.send_char('h')
    phrase_holder.send_char('e')
    acc.reset_mock()
    phrase_holder.send_char('y')
    acc.assert_called_with('y', 'hey', '')
def test_rcc_called_when_subsequent_character_is_incorrect(mocker):
    rcc = mocker.stub()
    phrase_holder = PhrasesHolder(rejected_char_callback=rcc)
    phrase_holder.add_phrase('hello')
    phrase_holder.send_char('h')
    phrase_holder.send_char('a')
    rcc.assert_called_once_with('a')
def test_rcc_called_when_no_phrase_is_available(mocker):
    rcc = mocker.stub()
    phrase_holder = PhrasesHolder(rejected_char_callback=rcc)
    phrase_holder.send_char('a')
    rcc.assert_called_with('a')
def test_can_define_accepted_char_callback():
    PhrasesHolder(accepted_char_callback=lambda a, b, c: None)
def test_can_define_rejected_char_callback():
    PhrasesHolder(rejected_char_callback=lambda a: None)
def test_rcc_not_called_when_phrase_matches_first_character(mocker):
    rcc = mocker.stub()
    phrase_holder = PhrasesHolder(rejected_char_callback=rcc)
    phrase_holder.add_phrase('hello')
    phrase_holder.send_char('h')
    rcc.assert_not_called()