before { vim.feedkeys '0ggipass' }
it "does not indent" do
- proposed_indent.should == 0
indent.should == 0
+ proposed_indent.should == 0
end
it "does not indent when using '=='" do
end
end
- describe "when after an '(' that is followed by an unfinished string" do
- before { vim.feedkeys 'itest("""' }
-
- it "it does not indent the next line" do
- vim.feedkeys '\<CR>'
- proposed_indent.should == 0
- indent.should == 0
- end
-
- it "with contents it does not indent the next line" do
- vim.feedkeys 'string_contents\<CR>'
- proposed_indent.should == 0
- indent.should == 0
- end
- end
-
- describe "when after assigning an unfinished string" do
- before { vim.feedkeys 'itest = """' }
-
- it "it does not indent the next line" do
- vim.feedkeys '\<CR>'
- proposed_indent.should == 0
+ describe "when the previous line has a list slice" do
+ it "does not indent" do
+ vim.feedkeys 'ib = a[2:]\<CR>'
indent.should == 0
- end
- end
-
- describe "when after assigning an unfinished string" do
- before { vim.feedkeys 'i test = """' }
-
- it "it does not indent the next line" do
- vim.feedkeys '\<CR>'
proposed_indent.should == 0
- indent.should == 0
- end
- end
-
- describe "when after assigning a finished string" do
- before { vim.feedkeys 'i test = ""' }
-
- it "it does indent the next line" do
- vim.feedkeys '\<CR>'
- proposed_indent.should == 4
- indent.should == 4
- end
-
- it "and writing a new string, it does indent the next line" do
- vim.feedkeys '\<CR>""'
- proposed_indent.should == 4
- indent.should == 4
- end
- end
-
- describe "when after a docstring" do
- before { vim.feedkeys 'i """' }
-
- it "it does indent the next line" do
- vim.feedkeys '\<CR>'
- proposed_indent.should == 4
- indent.should == 4
end
end
end
end
+ describe "when an 'if' contains a try-except" do
+ before {
+ vim.feedkeys 'iif x:\<CR>try:\<CR>pass\<CR>except:\<CR>pass\<CR>'
+ indent.should == shiftwidth
+ }
+ it "an 'else' should be indented to the try" do
+ vim.feedkeys 'else:'
+ indent.should == shiftwidth
+ proposed_indent.should == shiftwidth
+ end
+ it "an 'else' should keep the indent of the 'if'" do
+ vim.feedkeys 'else:\<ESC><<'
+ indent.should == 0
+ proposed_indent.should == 0
+ end
+ end
+
describe "when a 'for' is followed by" do
before { vim.feedkeys 'i\<TAB>\<TAB>for x in y:\<CR>' }
it "an 'else', it lines up with the 'for'" do
indent.should == shiftwidth * 2
end
end
+end
- def shiftwidth
- @shiftwidth ||= vim.echo("exists('*shiftwidth') ? shiftwidth() : &sw").to_i
+shared_examples_for "multiline strings" do
+ describe "when after an '(' that is followed by an unfinished string" do
+ before { vim.feedkeys 'itest("""' }
+
+ it "it indents the next line" do
+ vim.feedkeys '\<CR>'
+ expected_proposed, expected_indent = multiline_indent(0, shiftwidth)
+ proposed_indent.should == expected_proposed
+ indent.should == expected_indent
+ end
+
+ it "with contents it indents the second line to the parenthesis" do
+ vim.feedkeys 'second line\<CR>'
+ expected_proposed, expected_indent = multiline_indent(0, 5)
+ proposed_indent.should == expected_proposed
+ indent.should == expected_indent
+ end
end
- def tabstop
- @tabstop ||= vim.echo("&tabstop").to_i
+
+ describe "when after assigning an unfinished string" do
+ before { vim.feedkeys 'itest = """' }
+
+ it "it indents the next line" do
+ vim.feedkeys '\<CR>'
+ expected_proposed, expected_indent = multiline_indent(0, shiftwidth)
+ proposed_indent.should == expected_proposed
+ indent.should == expected_indent
+ end
end
- def indent
- vim.echo("indent('.')").to_i
+
+ describe "when after assigning an unfinished string" do
+ before { vim.feedkeys 'i test = """' }
+
+ it "it indents the next line" do
+ vim.feedkeys '\<CR>'
+ expected_proposed, expected_indent = multiline_indent(4, shiftwidth + 4)
+ proposed_indent.should == expected_proposed
+ indent.should == expected_indent
+ end
end
- def previous_indent
- pline = vim.echo("line('.')").to_i - 1
- vim.echo("indent('#{pline}')").to_i
+
+ describe "when after assigning a finished string" do
+ before { vim.feedkeys 'i test = ""' }
+
+ it "it does indent the next line" do
+ vim.feedkeys '\<CR>'
+ indent.should == 4
+ end
+
+ it "and writing a new string, it does indent the next line" do
+ vim.feedkeys '\<CR>""'
+ indent.should == 4
+ end
end
- def proposed_indent
- 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
+
+ describe "when after a docstring" do
+ before { vim.feedkeys 'i """' }
+ it "it does indent the next line to the docstring" do
+ vim.feedkeys '\<CR>'
+ indent.should == 4
+ proposed_indent.should == 4
+ end
+ end
+
+ describe "when after a docstring with contents" do
+ before { vim.feedkeys 'i """First line' }
+ it "it does indent the next line to the docstring" do
+ vim.feedkeys '\<CR>'
+ indent.should == 4
+ proposed_indent.should == 4
+ end
end
end
before {
vim.command("set sw=4 ts=4 sts=4 et")
}
+ it_behaves_like "vim"
+end
+describe "vim when using width of 3" do
+ before {
+ vim.command("set sw=3 ts=3 sts=3 et")
+ }
it_behaves_like "vim"
end
-describe "vim when using width of 8" do
+describe "vim when not using python_pep8_indent_multiline_string" do
before {
- vim.command("set sw=8 ts=8 sts=8 et")
+ vim.command("set sw=4 ts=4 sts=4 et")
+ vim.command("unlet! g:python_pep8_indent_multiline_string")
}
+ it_behaves_like "multiline strings"
+end
- it_behaves_like "vim"
+describe "vim when using python_pep8_indent_multiline_first=0" do
+ before {
+ vim.command("set sw=4 ts=4 sts=4 et")
+ vim.command("let g:python_pep8_indent_multiline_string=0")
+ }
+ it_behaves_like "multiline strings"
+end
+
+describe "vim when using python_pep8_indent_multiline_string=-1" do
+ before {
+ vim.command("set sw=4 ts=4 sts=4 et")
+ vim.command("let g:python_pep8_indent_multiline_string=-1")
+ }
+ it_behaves_like "multiline strings"
+end
+
+describe "vim when using python_pep8_indent_multiline_string=-2" do
+ before {
+ vim.command("set sw=4 ts=4 sts=4 et")
+ vim.command("let g:python_pep8_indent_multiline_string=-2")
+ }
+ it_behaves_like "multiline strings"
+end
+
+describe "vim for cython" do
+ before {
+ vim.command "enew"
+ vim.command "set ft=cython"
+ vim.command "runtime indent/python.vim"
+ }
+
+ describe "when using a cdef function definition" do
+ it "indents shiftwidth spaces" do
+ vim.feedkeys 'icdef long_function_name(\<CR>arg'
+ indent.should == shiftwidth * 2
+ end
+ end
+
+ describe "when using a cpdef function definition" do
+ it "indents shiftwidth spaces" do
+ vim.feedkeys 'icpdef long_function_name(\<CR>arg'
+ indent.should == shiftwidth * 2
+ end
+ end
end