describe 'default strategy' do
  let(:session) { TerminalSession.new }

  before do
    session.run_command('source zsh-autosuggestions.zsh')
    session.run_command('fc -p')
    session.clear
  end

  after do
    session.destroy
  end

  context 'with some simple history entries' do
    before do
      session.run_command('ls foo')
      session.run_command('ls bar')

      session.clear
    end

    it 'suggests nothing if there is no match' do
      session.send_string('ls q')
      wait_for { session.content }.to eq('ls q')
    end

    it 'suggests the most recent matching history item' do
      session.send_string('ls')
      wait_for { session.content }.to eq('ls bar')
    end
  end

  context 'with a multiline hist entry' do
    before do
      session.send_string('echo "')
      session.send_keys('enter')
      session.send_string('"')
      session.send_keys('enter')

      session.clear
    end

    it do
      session.send_keys('e')
      wait_for { session.content }.to eq "echo \"\n\""
    end
  end

  context 'with a newline hist entry' do
    before do
      session.send_string('echo "\n"')
      session.send_keys('enter')

      session.clear
    end

    it do
      session.send_keys('e')
      wait_for { session.content }.to eq 'echo "\n"'
    end
  end

  context 'with a hist entry with a backslash' do
    before do
      session.run_command('echo "hello\nworld"')
      session.clear
    end

    it do
      session.send_string('echo "hello\\')
      wait_for { session.content }.to eq('echo "hello\nworld"')
    end
  end

  context 'with a hist entry with double backslashes' do
    before do
      session.run_command('echo "\\\\"')
      session.clear
    end

    it do
      session.send_string('echo "\\\\')
      wait_for { session.content }.to eq('echo "\\\\"')
    end
  end

  context 'with a hist entry with a tilde' do
    before do
      session.run_command('ls ~/foo')
      session.clear
    end

    it do
      session.send_string('ls ~')
      wait_for { session.content }.to eq('ls ~/foo')
    end

    context 'with extended_glob set' do
      before do
        session.run_command('setopt local_options extended_glob')
        session.clear
      end

      it do
        session.send_string('ls ~')
        wait_for { session.content }.to eq('ls ~/foo')
      end
    end
  end

  context 'with a hist entry with parentheses' do
    before do
      session.run_command('echo "$(ls foo)"')
      session.clear
    end

    it do
      session.send_string('echo "$(')
      wait_for { session.content }.to eq('echo "$(ls foo)"')
    end
  end

  context 'with a hist entry with square brackets' do
    before do
      session.run_command('echo "$history[123]"')
      session.clear
    end

    it do
      session.send_string('echo "$history[')
      wait_for { session.content }.to eq('echo "$history[123]"')
    end
  end

  context 'with a hist entry with pound sign' do
    before do
      session.run_command('echo "#yolo"')
      session.clear
    end

    it do
      session.send_string('echo "#')
      wait_for { session.content }.to eq('echo "#yolo"')
    end
  end
end