" Common setup for all Vader tests
" This file is included by all test files to ensure consistent environment
" Ensure python-mode is loaded
if !exists('g:pymode')
runtime plugin/pymode.vim
endif
" Explicitly load autoload functions to ensure they're available
" Vim's autoload mechanism should load functions automatically when called,
" but we ensure they're loaded upfront for test reliability
" Load core autoload functions first (pymode#save, pymode#wide_message, etc.)
runtime! autoload/pymode.vim
" Load lint-related autoload functions and their dependencies
runtime! autoload/pymode/tools/signs.vim
runtime! autoload/pymode/tools/loclist.vim
runtime! autoload/pymode/lint.vim
" Basic python-mode configuration for testing
let g:pymode = 1
let g:pymode_python = 'python3'
let g:pymode_options_max_line_length = 79
let g:pymode_lint_on_write = 0
let g:pymode_rope = 0
let g:pymode_doc = 1
let g:pymode_virtualenv = 0
let g:pymode_folding = 1
let g:pymode_motion = 1
let g:pymode_run = 1
" Test-specific settings
let g:pymode_lint_checkers = ['pyflakes', 'pep8', 'mccabe']
let g:pymode_lint_ignore = []
let g:pymode_options_colorcolumn = 1
" Disable features that might cause issues in tests
let g:pymode_breakpoint = 0
let g:pymode_debug = 0
" Helper functions for tests
function! SetupPythonBuffer()
" Create a new buffer with Python filetype
new
setlocal filetype=python
setlocal buftype=
" Enable magic for motion support (required by after/ftplugin/python.vim)
" This is needed for text object mappings (aM, aC, iM, iC) to work
set magic
" Ensure autoload functions are loaded before loading ftplugin
" This guarantees that commands defined in ftplugin can call autoload functions
runtime! autoload/pymode.vim
runtime! autoload/pymode/tools/signs.vim
runtime! autoload/pymode/tools/loclist.vim
runtime! autoload/pymode/lint.vim
runtime! autoload/pymode/motion.vim
" Explicitly load the python ftplugin to ensure commands are available
runtime! ftplugin/python/pymode.vim
" Explicitly load after/ftplugin to ensure text object mappings are created
" Vim should auto-load this, but we ensure it's loaded for test reliability
runtime! after/ftplugin/python.vim
endfunction
function! CleanupPythonBuffer()
" Clean up test buffer
if &filetype == 'python'
bwipeout!
endif
endfunction
function! GetBufferContent()
" Get all lines from current buffer
return getline(1, '$')
endfunction
function! SetBufferContent(lines)
" Set buffer content from list of lines
call setline(1, a:lines)
endfunction
function! AssertBufferContains(pattern)
" Assert that buffer contains pattern
let content = join(getline(1, '$'), "\n")
if content !~# a:pattern
throw 'Buffer does not contain pattern: ' . a:pattern
endif
endfunction
function! AssertBufferEquals(expected)
" Assert that buffer content equals expected lines
let actual = getline(1, '$')
if actual != a:expected
throw 'Buffer content mismatch. Expected: ' . string(a:expected) . ', Got: ' . string(actual)
endif
endfunction
" Python code snippets for testing
let g:test_python_simple = [
\ 'def hello():',
\ ' print("Hello, World!")',
\ ' return True'
\ ]
let g:test_python_unformatted = [
\ 'def test(): return 1',
\ 'class TestClass:',
\ ' def method(self):',
\ ' pass'
\ ]
let g:test_python_formatted = [
\ 'def test():',
\ ' return 1',
\ '',
\ '',
\ 'class TestClass:',
\ ' def method(self):',
\ ' pass'
\ ]
let g:test_python_with_errors = [
\ 'def test():',
\ ' undefined_variable',
\ ' return x + y'
\ ]
let g:test_python_long_line = [
\ 'def very_long_function_name_that_exceeds_line_length_limit(parameter_one, parameter_two, parameter_three, parameter_four):',
\ ' return parameter_one + parameter_two + parameter_three + parameter_four'
\ ]