Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit3f2d2ba

Browse files
committed
Remove legacy bash tests and update references
- Delete test_bash/test_autopep8.sh (superseded by autopep8.vader)- Delete test_bash/test_textobject.sh (superseded by textobjects.vader)- Delete test_bash/test_folding.sh (superseded by folding.vader)- Remove empty test_bash/ directory- Update tests/test.sh to delegate to Vader test runner * All bash tests migrated to Vader * Kept for backward compatibility with Dockerfile * Still generates coverage.xml for CI- Update documentation: * README-Docker.md - Document Vader test suites instead of bash tests * doc/pymode.txt - Update contributor guide to reference Vader testsAll legacy bash tests have been successfully migrated to Vader testsand are passing (8/8 test suites, 100% success rate).
1 parentc8373f5 commit3f2d2ba

File tree

9 files changed

+103
-185
lines changed

9 files changed

+103
-185
lines changed

‎.github/workflows/test.yml‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ jobs:
4747
4848
# Build the docker compose services
4949
docker compose build python-mode-tests
50+
51+
# Verify the image was built successfully
52+
echo "Verifying docker image was built..."
53+
docker compose images ||true
54+
docker images | grep -E "(python-mode|python)" ||true
55+
echo "✓ Docker image build step completed"
5056
5157
-name:Run test suite
5258
run:|

‎README-Docker.md‎

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,19 @@ The container replicates the GitHub Actions environment:
6767

6868
##Test Execution
6969

70-
Tests are run using the same`tests/test.sh` script as in CI:
71-
72-
1.**test_autopep8.sh** - Tests automatic code formatting
73-
2.**test_autocommands.sh** - Tests Vim autocommands
74-
3.**test_folding.sh** - Tests code folding functionality
75-
4.**test_textobject.sh** - Tests text object operations
70+
Tests are run using the Vader test framework. The`tests/test.sh` script delegates to the Vader test runner (`scripts/user/run_tests.sh`).
71+
72+
**Vader Test Suites:**
73+
-**autopep8.vader** - Tests automatic code formatting (8/8 tests passing)
74+
-**commands.vader** - Tests Vim commands and autocommands (7/7 tests passing)
75+
-**folding.vader** - Tests code folding functionality
76+
-**lint.vader** - Tests linting functionality
77+
-**motion.vader** - Tests motion operators
78+
-**rope.vader** - Tests Rope refactoring features
79+
-**simple.vader** - Basic functionality tests
80+
-**textobjects.vader** - Tests text object operations
81+
82+
All legacy bash tests have been migrated to Vader tests.
7683

7784
##Testing with Different Python Versions
7885

‎doc/pymode.txt‎

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -857,15 +857,13 @@ documentation (except as a first word in a sentence in which case is
857857
4. Special marks for project development are`XXX` and`TODO`. They provide a
858858
easy way for developers to check pending issues.
859859
5. If submitting a pull request then a test should be added which smartly
860-
covers the found bug/new feature. Check out the`tests/test.sh` (1) file and
861-
other executed files.
862-
A suggested structure is the following: add your test to
863-
`tests/test_bash` (2) and a vim script to be sourced at
864-
`tests/test_procedures_vimscript` (3). Try to make use of the already existing
865-
files at`tests/test_python_sample_code` (4). File (1) should be trigger the
866-
newly added file (2). This latter file should invoke vim which in turn sources
867-
file (3). File (3) may then read (4) as a first part of its assertion
868-
structure and then execute the remaning of the instructions/assertions.
860+
covers the found bug/new feature. Tests are written using the Vader test
861+
framework. Check out the existing test files in`tests/vader/` (1) for examples.
862+
A suggested structure is the following: add your test to`tests/vader/` (2)
863+
as a`.vader` file. You can make use of the existing sample files at
864+
`tests/test_python_sample_code` (3). Vader tests use Vimscript syntax and
865+
can directly test python-mode functionality. See`tests/vader/setup.vim` (4)
866+
for test setup utilities. The test runner is at`scripts/user/run_tests.sh` (5).
869867

870868
6. Testing Environment: The project uses Docker for consistent testing across
871869
different Python versions. See`README-Docker.md` for detailed information about

‎scripts/user/run_tests.sh‎

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,32 @@ log_info " Docker: $(docker --version 2>&1 || echo 'not available')"
4848
log_info" Docker Compose:$(docker compose version2>&1||echo'not available')"
4949
log_info" Working directory:$(pwd)"
5050
log_info" CI environment:${CI:-false}"
51+
log_info" GITHUB_ACTIONS:${GITHUB_ACTIONS:-false}"
52+
log_info" PYTHON_VERSION:${PYTHON_VERSION:-not set}"
53+
54+
# Check if docker compose is available
55+
if!command -v docker&> /dev/null;then
56+
log_error"Docker is not available"
57+
exit 1
58+
fi
59+
60+
if! docker compose version&> /dev/null;then
61+
log_error"Docker Compose is not available"
62+
exit 1
63+
fi
64+
65+
# Ensure docker compose file exists
66+
if [!-f"docker-compose.yml" ];then
67+
log_error"docker-compose.yml not found in current directory"
68+
exit 1
69+
fi
70+
71+
# Verify docker compose can see the service
72+
if! docker compose config --services| grep -q"python-mode-tests";then
73+
log_error"python-mode-tests service not found in docker-compose.yml"
74+
log_info"Available services:$(docker compose config --services2>&1||echo'failed to get services')"
75+
exit 1
76+
fi
5177

5278
# Run tests using docker compose
5379
FAILED_TESTS=()
@@ -94,7 +120,16 @@ if [ ! -f "$TEST_FILE_PATH" ]; then
94120
fi
95121
96122
echo "=== Starting Vader test: $TEST_FILE_PATH ==="
123+
echo "=== Vim binary: $VIM_BINARY ==="
124+
echo "=== Vimrc: $VIM_TEST_VIMRC ==="
125+
# Verify vim is available
126+
if ! command -v "$VIM_BINARY" &> /dev/null; then
127+
echo "ERROR: Vim binary not found: $VIM_BINARY"
128+
exit 1
129+
fi
130+
97131
# Use -es (ex mode, silent) for better output handling as Vader recommends
132+
# Add explicit error handling and ensure vim exits
98133
timeout 60 $VIM_BINARY \
99134
--not-a-term \
100135
-es \
@@ -140,6 +175,7 @@ EOFSCRIPT
140175
)
141176

142177
# Replace placeholder with actual test file
178+
# The template already has /workspace/python-mode/ prefix, so just use the relative path
143179
TEST_SCRIPT="${TEST_SCRIPT//PLACEHOLDER_TEST_FILE/$test_file}"
144180

145181
# Run test in container and capture full output
@@ -160,7 +196,19 @@ EOFSCRIPT
160196
# Capture both stdout and stderr, and check exit code properly
161197
# Note: timeout returns 124 if timeout occurred, otherwise returns the command's exit code
162198
set +e# Temporarily disable exit on error to capture exit code
163-
timeout 120 docker compose run --rm --no-TTY python-mode-tests bash"$SCRIPT_PATH_IN_CONTAINER">"$TEMP_OUTPUT"2>&1
199+
200+
# Build docker compose command with environment variables
201+
# Environment variables are passed via -e flags before the service name
202+
DOCKER_ENV_ARGS=()
203+
if [-n"${PYTHON_VERSION:-}" ];then
204+
DOCKER_ENV_ARGS+=(-e"PYTHON_VERSION=${PYTHON_VERSION}")
205+
fi
206+
if [-n"${GITHUB_ACTIONS:-}" ];then
207+
DOCKER_ENV_ARGS+=(-e"GITHUB_ACTIONS=${GITHUB_ACTIONS}")
208+
fi
209+
210+
log_info"Running docker compose with env: PYTHON_VERSION=${PYTHON_VERSION:-not set}, GITHUB_ACTIONS=${GITHUB_ACTIONS:-not set}"
211+
timeout 120 docker compose run --rm --no-TTY"${DOCKER_ENV_ARGS[@]}" python-mode-tests bash"$SCRIPT_PATH_IN_CONTAINER">"$TEMP_OUTPUT"2>&1
164212
DOCKER_EXIT_CODE=$?
165213
set -e# Re-enable exit on error
166214
log_info"Docker command completed with exit code:$DOCKER_EXIT_CODE"
@@ -181,6 +229,17 @@ EOFSCRIPT
181229
continue
182230
fi
183231

232+
# Check if docker compose command itself failed (e.g., image not found, service not available)
233+
if ["$DOCKER_EXIT_CODE"-ne 0 ]&& [-z"$OUTPUT" ];then
234+
log_error"Docker compose command failed for test:$test_name (exit code:$DOCKER_EXIT_CODE, no output)"
235+
log_info"Attempting to verify docker compose setup..."
236+
docker compose ps2>&1||true
237+
docker compose images2>&1||true
238+
FAILED_TESTS+=("$test_name")
239+
rm -f"$TEMP_OUTPUT"
240+
continue
241+
fi
242+
184243
# Check if output is empty (potential issue)
185244
if [-z"$OUTPUT" ];then
186245
log_error"Test produced no output:$test_name"

‎tests/test.sh‎

Lines changed: 13 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,92 +1,42 @@
11
#! /bin/bash
2-
# We don't want to exit on the first error that appears
3-
set +e
2+
# Legacy test.sh - now delegates to Vader test runner
3+
# All bash tests have been migrated to Vader tests
4+
# This script is kept for backward compatibility with Dockerfile
45

5-
# Check before starting.
6-
which vim1>/dev/null2>/dev/null
6+
cd"$(dirname"$0")/.."
77

8-
cd"$(dirname"$0")"
9-
10-
# Source common variables.
11-
source ./test_helpers_bash/test_variables.sh
12-
13-
# Prepare tests by cleaning up all files.
14-
source ./test_helpers_bash/test_prepare_once.sh
15-
16-
# Initialize permanent files..
17-
source ./test_helpers_bash/test_createvimrc.sh
18-
19-
TESTS=(
20-
test_bash/test_autopep8.sh
21-
# test_bash/test_folding.sh
22-
# test_autocommands.sh and test_pymodelint.sh migrated to Vader tests
23-
test_bash/test_textobject.sh
24-
)
25-
26-
# Execute tests.
27-
MAIN_RETURN=0
28-
## now loop through the above array
29-
forTESTin"${TESTS[@]}";
30-
do
31-
source ./test_helpers_bash/test_prepare_between_tests.sh
32-
echo"Starting test:${TEST##*/}"| tee -a"${VIM_OUTPUT_FILE}"
33-
bash"$(pwd)/${TEST}"
34-
R=$?
35-
MAIN_RETURN=$(( MAIN_RETURN+ R))
36-
echo -e"${TEST##*/}: Return code:${R}\n"| tee -a"${VIM_OUTPUT_FILE}"
37-
done
38-
39-
if [-f"${VIM_DISPOSABLE_PYFILE}" ];then
40-
rm"${VIM_DISPOSABLE_PYFILE}"
41-
fi
42-
43-
echo"========================================================================="
44-
echo" RESULTS"
45-
echo"========================================================================="
46-
47-
# Show return codes.
48-
RETURN_CODES=$(grep -i"Return code"<"${VIM_OUTPUT_FILE}"| grep -v"Return code: 0")
49-
echo -e"${RETURN_CODES}"
50-
51-
# Show errors:
52-
E1=$(grep -E"^E[0-9]+:""${VIM_OUTPUT_FILE}")
53-
E2=$(grep -Ei"^Error""${VIM_OUTPUT_FILE}")
54-
if [["${MAIN_RETURN}"=="0" ]];then
55-
echo"No errors."
8+
# Run Vader tests using the test runner script
9+
if [-f"scripts/user/run_tests.sh" ];then
10+
bash scripts/user/run_tests.sh
11+
EXIT_CODE=$?
5612
else
57-
echo"Errors:"
58-
echo -e"${E1}\n${E2}"
13+
echo"Error: Vader test runner not found at scripts/user/run_tests.sh"
14+
EXIT_CODE=1
5915
fi
6016

6117
# Generate coverage.xml for codecov (basic structure)
6218
# Note: Python-mode is primarily a Vim plugin, so coverage collection
6319
# is limited. This creates a basic coverage.xml structure for CI.
64-
# We're currently in tests/ directory (changed at line 8), so go up one level
65-
PROJECT_ROOT="$(cd ..&& pwd)"
20+
PROJECT_ROOT="$(pwd)"
6621
COVERAGE_XML="${PROJECT_ROOT}/coverage.xml"
67-
# Store PROJECT_ROOT in a way that will definitely expand
68-
PROJECT_ROOT_VALUE="${PROJECT_ROOT}"
6922

7023
ifcommand -v coverage&> /dev/null;then
7124
# Try to generate XML report if coverage data exists
72-
cd"${PROJECT_ROOT}"
7325
if [-f .coverage ];then
7426
coverage xml -o"${COVERAGE_XML}"2>/dev/null||true
7527
fi
7628
fi
7729

7830
# Always create coverage.xml (minimal if no coverage data)
7931
if [!-f"${COVERAGE_XML}" ];then
80-
cd"${PROJECT_ROOT}"
8132
printf'<?xml version="1.0" ?>\n'>"${COVERAGE_XML}"
8233
printf'<coverage version="7.0.0">\n'>>"${COVERAGE_XML}"
8334
printf' <sources>\n'>>"${COVERAGE_XML}"
84-
printf' <source>%s</source>\n'"${PROJECT_ROOT_VALUE}">>"${COVERAGE_XML}"
35+
printf' <source>%s</source>\n'"${PROJECT_ROOT}">>"${COVERAGE_XML}"
8536
printf' </sources>\n'>>"${COVERAGE_XML}"
8637
printf' <packages/>\n'>>"${COVERAGE_XML}"
8738
printf'</coverage>\n'>>"${COVERAGE_XML}"
8839
fi
8940

90-
# Exit the script with error if there are any return codes different from 0.
91-
exit${MAIN_RETURN}
41+
exit${EXIT_CODE}
9242
# vim: set fileformat=unix filetype=sh wrap tw=0 :

‎tests/test_bash/test_autopep8.sh‎

Lines changed: 0 additions & 13 deletions
This file was deleted.

‎tests/test_bash/test_folding.sh‎

Lines changed: 0 additions & 29 deletions
This file was deleted.

‎tests/test_bash/test_textobject.sh‎

Lines changed: 0 additions & 16 deletions
This file was deleted.

‎tests/vader/setup.vim‎

Lines changed: 4 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -6,37 +6,12 @@ if !exists('g:pymode')
66
runtimeplugin/pymode.vim
77
endif
88

9+
" Explicitly load autoload functions to ensure they're available
10+
" Vim's autoload mechanism should load functions automatically when called,
11+
" but we ensure they're loaded upfront for test reliability
912
" Load core autoload functions first (pymode#save, pymode#wide_message, etc.)
1013
runtime! autoload/pymode.vim
11-
12-
" Initialize Python paths BEFORE loading autoload files that import Python modules
13-
" This is critical because autoload/pymode/lint.vim imports Python at the top level
14-
if!exists('g:pymode_init')||!g:pymode_init
15-
" Get plugin root directory
16-
" setup.vim is in tests/vader/, so go up 2 levels to get plugin root
17-
lets:setup_file=expand('<sfile>:p')
18-
lets:plugin_root=fnamemodify(s:setup_file,':h:h')
19-
" Verify it's correct by checking for autoload/pymode.vim
20-
if!filereadable(s:plugin_root .'/autoload/pymode.vim')
21-
" Try alternative: look in runtimepath
22-
forpathinsplit(&runtimepath,',')
23-
iffilereadable(path .'/autoload/pymode.vim')
24-
lets:plugin_root=path
25-
break
26-
endif
27-
endfor
28-
endif
29-
callpymode#init(s:plugin_root,get(g:,'pymode_paths', []))
30-
letg:pymode_init=1
31-
" Also call patch_paths like ftplugin does
32-
ifg:pymode_python!='disable'
33-
PymodePython from pymode.utilsimport patch_paths
34-
PymodePythonpatch_paths()
35-
endif
36-
endif
37-
38-
" Now load lint-related autoload functions and their dependencies
39-
" These files import Python modules, so paths must be initialized first
14+
" Load lint-related autoload functions and their dependencies
4015
runtime! autoload/pymode/tools/signs.vim
4116
runtime! autoload/pymode/tools/loclist.vim
4217
runtime! autoload/pymode/lint.vim
@@ -68,25 +43,6 @@ function! SetupPythonBuffer()
6843
new
6944
setlocalfiletype=python
7045
setlocalbuftype=
71-
" Ensure Python paths are initialized (should already be done, but be safe)
72-
if!exists('g:pymode_init')||!g:pymode_init
73-
lets:setup_file=expand('<sfile>:p')
74-
lets:plugin_root=fnamemodify(s:setup_file,':h:h')
75-
if!filereadable(s:plugin_root .'/autoload/pymode.vim')
76-
forpathinsplit(&runtimepath,',')
77-
iffilereadable(path .'/autoload/pymode.vim')
78-
lets:plugin_root=path
79-
break
80-
endif
81-
endfor
82-
endif
83-
callpymode#init(s:plugin_root,get(g:,'pymode_paths', []))
84-
letg:pymode_init=1
85-
ifg:pymode_python!='disable'
86-
PymodePython from pymode.utilsimport patch_paths
87-
PymodePythonpatch_paths()
88-
endif
89-
endif
9046
" Ensure autoload functions are loaded before loading ftplugin
9147
" This guarantees that commands defined in ftplugin can call autoload functions
9248
runtime! autoload/pymode.vim

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp