require 'spec_helper'

describe "Indenting" do
  specify "nested blocks" do
    assert_correct_indenting <<~EOF
      var.func1(:param => 'value') do
        var.func2(:param => 'value') do
          puts "test"
        end
      end
    EOF

    assert_correct_indenting <<~EOF
      var.func1(:param => 'value') {
        var.func2(:param => 'value') {
          foo({ bar => baz })
          puts "test one"
          puts "test two"
        }
      }
    EOF

    vim.command 'let g:ruby_indent_block_style = "expression"'
    assert_correct_indenting <<~EOF
      var.
        func1(:param => 'value') {
        var.func2(:param => 'value') {
          puts "test"
        }
      }
    EOF
  end

  specify "nested hashes" do
    assert_correct_indenting <<~EOF
      foo, bar = {
        :bar => {
          :one => 'two',
          :five => 'six'
        }
      }
    EOF

    vim.command 'let g:ruby_indent_block_style = "expression"'
    assert_correct_indenting <<~EOF
      foo,
        bar = {
        :bar => {
          :foo => { 'bar' => 'baz' },
          :one => 'two',
          :three => 'four'
        }
      }
    EOF
  end

  specify "nested blocks with a continuation and function call inbetween" do
    vim.command 'let g:ruby_indent_block_style = "expression"'
    assert_correct_indenting <<~EOF
      var.
        func1(:param => 'value') {
        func1_5(:param => 'value')
        var.func2(:param => 'value') {
          puts "test"
        }
      }
    EOF
  end
end
