jquote.nvim/tests/README.md
jank 6d065862b0
refactor: Refactor everything
BREAKING CHANGE: Actually move to the next pair of quotes
2025-07-28 21:19:35 +02:00

2.7 KiB

JQuote Plugin Tests

This directory contains the comprehensive test suite for the JQuote Neovim plugin.

Test Structure

  • init_spec.lua - Main test file containing all unit tests
  • test_runner.lua - Custom lightweight test runner
  • README.md - This file

Running Tests

# Run all tests
make test

# Run tests with verbose output
make test-verbose

# Run development checks (syntax + tests)
make dev-check

Direct Execution

# Run tests directly
lua tests/test_runner.lua

# Or from project root
cd /path/to/jquote.nvim && lua tests/test_runner.lua

Test Categories

1. Plugin Initialization Tests

  • Default configuration validation
  • User option merging
  • Configuration validation
  • Key mapping setup

2. Quote Detection Tests

  • Finding quoted strings at cursor
  • Quote character cycling
  • Nested quote handling
  • Multiple quote pairs

3. Auto Jump Functionality Tests

  • Auto jump to next quote pair
  • Manual mode behavior
  • Edge case handling

4. Error Handling Tests

  • API failure scenarios
  • Invalid input handling
  • Long line safety limits
  • Resource cleanup

5. Version Management Tests

  • Git tag version extraction
  • Fallback version handling
  • Semantic version validation

6. Health Check Tests

  • Configuration validation
  • Plugin state reporting
  • Diagnostic information

7. Edge Cases Tests

  • Boundary conditions
  • Empty configurations
  • Single character strings
  • Line boundary quotes

Test Output

The test runner provides colored output:

  • 🟢 Green: Passed tests
  • 🔴 Red: Failed tests
  • 🔵 Blue: Test categories
  • 🟡 Yellow: Warnings and info

Mock System

Tests use a comprehensive vim API mock that simulates:

  • Line content and cursor position
  • Notification system
  • Key mapping
  • Configuration deep merging
  • API error scenarios

Adding New Tests

To add new tests, follow this pattern:

describe("New Feature", function()
    it("should do something specific", function()
        -- Setup
        mock_vim._set_line_and_cursor("test line", 5)
        
        -- Execute
        local result = jquote.some_function()
        
        -- Assert
        assert.is_true(result)
        assert.are.equal("expected", mock_vim._current_line)
    end)
end)

Best Practices

  1. Isolation: Each test should be independent
  2. Clear Names: Use descriptive test names
  3. Setup/Teardown: Use before_each for test setup
  4. Comprehensive: Test both success and failure paths
  5. Edge Cases: Include boundary condition tests

Continuous Integration

These tests are designed to run in CI environments and provide detailed feedback for development workflows.