X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/e2267fe1da0d3d9581e8d77a2cd6795a7cec02f4..4224ee71e4cdbfa8ef08a59b0db62d915af1b0b6:/spec/indent/indent_spec.rb diff --git a/spec/indent/indent_spec.rb b/spec/indent/indent_spec.rb index 4652ef9..e300cb0 100644 --- a/spec/indent/indent_spec.rb +++ b/spec/indent/indent_spec.rb @@ -2,7 +2,16 @@ require "spec_helper" shared_examples_for "vim" do - before(:each) { vim.normal 'gg"_dG' } # clear buffer + before(:each) { + # clear buffer + vim.normal 'gg"_dG' + + # Insert two blank lines. + # The first line is a corner case in this plugin that would shadow the + # correct behaviour of other tests. Thus we explicitly jump to the first + # line when we require so. + vim.feedkeys 'i\\\' + } describe "when using the indent plugin" do it "sets the indentexpr and indentkeys options" do @@ -17,7 +26,7 @@ shared_examples_for "vim" do end describe "when entering the first line" do - before { vim.feedkeys 'ipass' } + before { vim.feedkeys '0ggipass' } it "does not indent" do proposed_indent.should == 0 @@ -93,6 +102,25 @@ shared_examples_for "vim" do end end + describe "when inside an unfinished string" do + it "does not indent" do + vim.feedkeys 'i"test:\' + vim.echo('synIDattr(synID(line("."), col("."), 0), "name")' + ).downcase.should include 'string' + vim.feedkeys 'a\' + proposed_indent.should == 0 + indent.should == 0 + end + + it "does not dedent" do + vim.feedkeys 'iif True:\"test:\' + vim.echo('synIDattr(synID(line("."), col("."), 0), "name")' + ).downcase.should include 'string' + proposed_indent.should == shiftwidth + indent.should == shiftwidth + end + end + describe "when using simple control structures" do it "indents shiftwidth spaces" do vim.feedkeys 'iwhile True:\pass' @@ -100,6 +128,18 @@ shared_examples_for "vim" do end end + describe "when writing an 'else' block" do + it "aligns to the preceeding 'for' block" do + vim.feedkeys 'ifor x in "abc":\pass\else:' + indent.should == 0 + end + + it "aligns to the preceeding 'if' block" do + vim.feedkeys 'ifor x in "abc":\if True:\pass\else:' + indent.should == shiftwidth + end + end + describe "when using parens and control statements" do it "avoids ambiguity by using extra indentation" do vim.feedkeys 'iif (111 and\' @@ -159,7 +199,7 @@ shared_examples_for "vim" do end describe "when current line is dedented compared to previous line" do - before { vim.feedkeys 'i\\if x:\return True\\' } + before { vim.feedkeys 'i\\if x:\y = True\\' } it "and current line has a valid indentation (Part 1)" do vim.feedkeys '0i\if y:' proposed_indent.should == -1 @@ -176,6 +216,14 @@ shared_examples_for "vim" do end end + describe "when current line is dedented compared to the last non-empty line" do + before { vim.feedkeys 'i\\if x:\y = True\\\' } + it "and current line has a valid indentation (Part 1)" do + vim.feedkeys '0i\if y:' + proposed_indent.should == -1 + end + end + describe "when an 'if' is followed by" do before { vim.feedkeys 'i\\if x:\' } it "an elif, it lines up with the 'if'" do