skills/jetbrains/tests-maintenance/SKILL.md
Maintains IdeaVim test suite quality. Reviews disabled tests, ensures Neovim annotations are documented, and improves test readability. Use for periodic test maintenance.
npx skillsauth add aiskillstore/marketplace tests-maintenanceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are a test maintenance specialist for the IdeaVim project. Your job is to keep the test suite healthy by reviewing test quality, checking disabled tests, and ensuring proper documentation of test exclusions.
DO:
DON'T:
Each run should focus on a small subset. Use one of these strategies:
# Get a random test file
find . -path "*/test/*" -name "*Test*.kt" -not -path "*/build/*" | shuf -n 1
# Or focus on specific areas:
# - src/test/java/org/jetbrains/plugins/ideavim/action/
# - src/test/java/org/jetbrains/plugins/ideavim/ex/
# - src/test/java/org/jetbrains/plugins/ideavim/extension/
# - tests/java-tests/src/test/kotlin/
Find disabled tests and check if they can be re-enabled:
# Find all @Disabled tests
grep -rn "@Disabled" --include="*.kt" src/test tests/
For each disabled test:
./gradlew test --tests "ClassName.testMethod"Tests excluded from Neovim verification must have clear documentation.
# Find TestWithoutNeovim usages
grep -rn "@TestWithoutNeovim" --include="*.kt" src/test tests/
# Find those without description (needs fixing)
grep -rn "@TestWithoutNeovim(SkipNeovimReason\.[A-Z_]*)" --include="*.kt" src/test
| Reason | When to Use |
|--------|-------------|
| PLUGIN | IdeaVim extension-specific behavior (surround, commentary, etc.) |
| INLAYS | Test involves IntelliJ inlays (not present in Vim) |
| OPTION | IdeaVim-specific option behavior |
| UNCLEAR | Expected behavior is unclear - needs investigation |
| NON_ASCII | Non-ASCII character handling differs |
| MAPPING | Mapping-specific test |
| SELECT_MODE | Vim's select mode |
| VISUAL_BLOCK_MODE | Visual block mode edge cases |
| DIFFERENT | Intentionally different behavior from Vim |
| NOT_VIM_TESTING | Test doesn't verify Vim behavior (IDE integration, etc.) |
| SHOW_CMD | :showcmd related differences |
| SCROLL | Scrolling behavior (viewport differs) |
| TEMPLATES | IntelliJ live templates |
| EDITOR_MODIFICATION | Editor-specific modifications |
| CMD | Command-line mode differences |
| ACTION_COMMAND | :action command (IDE-specific) |
| PLUG | <Plug> mappings |
| FOLDING | Code folding (IDE feature) |
| TABS | Tab/window management differences |
| PLUGIN_ERROR | Plugin execution error handling |
| VIM_SCRIPT | VimScript implementation differences |
| GUARDED_BLOCKS | IDE guarded/read-only blocks |
| CTRL_CODES | Control code handling |
| BUG_IN_NEOVIM | Known Neovim bug (not IdeaVim issue) |
| PSI | IntelliJ PSI/code intelligence features |
Requirements:
description parameter for non-obvious casesMeaningful test content: Avoid senseless text. Look for:
grep -rn "asdf\|qwerty\|xxxxx\|aaaaa\|dhjkw" --include="*.kt" src/test tests/
Replace with:
Test naming: Names should explain what's being tested.
Tests marked with this document intentional differences from Vim:
@VimBehaviorDiffers(
originalVimAfter = "expected vim result",
description = "why IdeaVim differs",
shouldBeFixed = true/false
)
Check:
shouldBeFixed = true, is there a YouTrack issue?DO fix:
@TestWithoutNeovim reasonsdescription on annotationsDON'T:
tests: Re-enable DeleteMotionTest after fix in #1234
The test was disabled due to a caret positioning bug that was
fixed in commit abc123. Verified the test passes consistently.
tests: Improve test content readability in ChangeActionTest
Replace meaningless "asdfgh" strings with realistic code snippets
that better demonstrate the change operation behavior.
tests: Document @TestWithoutNeovim reasons in ScrollTest
Added description parameter to clarify why scroll tests
are excluded from Neovim verification (viewport behavior differs).
# Run specific test
./gradlew test --tests "ClassName.testMethod"
# Run all tests in a class
./gradlew test --tests "ClassName"
# Run tests with Neovim verification
./gradlew test -Dideavim.nvim.test=true --tests "ClassName"
# Standard test suite (excludes property and long-running)
./gradlew test -x :tests:property-tests:test -x :tests:long-running-tests:test
When run via workflow, if changes are made, create a PR with:
If no changes needed, report what was checked and that everything is fine.
development
Apple Human Interface Guidelines for content display components. Use this skill when the user asks about charts component, collection view, image view, web view, color well, image well, activity view, lockup, data visualization, content display, displaying images, rendering web content, color pickers, or presenting collections of items in Apple apps. Also use when the user says how should I display charts, what's the best way to show images, should I use a web view, how do I build a grid of items, what component shows media, or how do I present a share sheet. Cross-references: hig-foundations for color/typography/accessibility, hig-patterns for data visualization patterns, hig-components-layout for structural containers, hig-platforms for platform-specific component behavior.
tools
Automate HelpDesk tasks via Rube MCP (Composio): list tickets, manage views, use canned responses, and configure custom fields. Always search tools first for current schemas.
testing
Expert Haskell engineer specializing in advanced type systems, pure functional design, and high-reliability software. Use PROACTIVELY for type-level programming, concurrency, and architecture guidance.
tools
GraphQL gives clients exactly the data they need - no more, no less. One endpoint, typed schema, introspection. But the flexibility that makes it powerful also makes it dangerous. Without proper controls, clients can craft queries that bring down your server. This skill covers schema design, resolvers, DataLoader for N+1 prevention, federation for microservices, and client integration with Apollo/urql. Key insight: GraphQL is a contract. The schema is the API documentation. Design it carefully.