X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/a7617bc1e8fed5d7da31c9cba6d7075ad5f22493..502aea33111e33371315b4b5e93f4ba3452dbf80:/spec/indent/indent_spec.rb diff --git a/spec/indent/indent_spec.rb b/spec/indent/indent_spec.rb index 6f8af74..bd0d0d9 100644 --- a/spec/indent/indent_spec.rb +++ b/spec/indent/indent_spec.rb @@ -1,6 +1,6 @@ require "spec_helper" -describe "vim" do +shared_examples_for "vim" do before(:each) { vim.normal 'gg"_dG' } # clear buffer @@ -30,22 +30,22 @@ describe "vim" do end end - # describe "when after a '(' that is at the end of its line" do - # before { vim.feedkeys 'itest(\' } + describe "when after a '(' that is at the end of its line" do + before { vim.feedkeys 'itest(\' } - # it "indents by one level" do - # proposed_indent.should == shiftwidth - # vim.feedkeys 'something' - # indent.should == shiftwidth - # vim.normal '==' - # indent.should == shiftwidth - # end + it "indents by one level" do + proposed_indent.should == shiftwidth + vim.feedkeys 'something' + indent.should == shiftwidth + vim.normal '==' + indent.should == shiftwidth + end - # it "puts the closing parenthesis at the same level" do - # vim.feedkeys ')' - # indent.should == 0 - # end - # end + it "puts the closing parenthesis at the same level" do + vim.feedkeys ')' + indent.should == 0 + end + end describe "when after an '(' that is followed by something" do before { vim.feedkeys 'itest(something,\' } @@ -68,29 +68,47 @@ describe "vim" do end describe "when using simple control structures" do - it "indents four spaces" do + it "indents shiftwidth spaces" do vim.feedkeys 'iwhile True:\pass' indent.should == shiftwidth end end describe "when a line breaks with a manual '\\'" do - it "indents 4 spaces on normal line" do + it "indents shiftwidth spaces on normal line" do vim.feedkeys 'ivalue = test + \\\\\' indent.should == shiftwidth end - it "indents 8 spaces for control structures" do + it "indents 2x shiftwidth spaces for control structures" do vim.feedkeys 'iif somevalue == xyz and \\\\\' indent.should == shiftwidth * 2 end it "indents relative to line above" do - vim.feedkeys 'i\tvalue = test + \\\\\' + vim.feedkeys 'i\value = test + \\\\\' indent.should == shiftwidth * 2 end end + describe "when current line is dedented compared to previous line" do + before { vim.feedkeys 'i\\if x:\return True\\' } + it "and current line has a valid indentation (Part 1)" do + vim.feedkeys '0i\if y:' + proposed_indent.should == -1 + end + + it "and current line has a valid indentation (Part 2)" do + vim.feedkeys '0i\\if y:' + proposed_indent.should == -1 + end + + it "and current line has an invalid indentation" do + vim.feedkeys 'i while True:\' + indent.should == previous_indent + shiftwidth + end + end + def shiftwidth @shiftwidth ||= vim.echo("exists('*shiftwidth') ? shiftwidth() : &sw").to_i end @@ -100,8 +118,31 @@ describe "vim" do def indent vim.echo("indent('.')").to_i end + def previous_indent + pline = vim.echo("line('.')").to_i - 1 + vim.echo("indent('#{pline}')").to_i + end def proposed_indent - vim.echo("GetPythonPEPIndent(line('.'))").to_i + line = vim.echo("line('.')") + col = vim.echo("col('.')") + indent_value = vim.echo("GetPythonPEPIndent(line('.'))").to_i + vim.command("call cursor(#{line}, #{col})") + return indent_value end end +describe "vim when using width of 4" do + before { + vim.command("set sw=4 ts=4 sts=4 et") + } + + it_behaves_like "vim" +end + +describe "vim when using width of 8" do + before { + vim.command("set sw=8 ts=8 sts=8 et") + } + + it_behaves_like "vim" +end