add-ktnip-ksp-tests

star 247

Adds tests for the ktnip KSP processor. Use when adding tests for a new collector, testing processor behavior with new annotations, or verifying KSP code generation for the telegram-bot library.

vendelieu By vendelieu schedule Updated 3/2/2026

name: add-ktnip-ksp-tests description: Adds tests for the ktnip KSP processor. Use when adding tests for a new collector, testing processor behavior with new annotations, or verifying KSP code generation for the telegram-bot library.

Add Ktnip KSP Tests

Workflow

1. Test Data

  • Create Kotlin source in ktnip/src/jvmTest/resources/test-data/
  • Name: FeatureName.kt (e.g. NewHandler.kt)
  • Must import from telegram-bot (project dependency)
  • Include valid handlers with annotations being tested

2. Add to ProcessorTest

  • In ProcessorTest.kt
  • Add @Test fun featureName() = runTest("test-data/FeatureName.kt")

3. Custom Assertions (optional)

  • Use compile(vararg SourceFile, ...) instead of runTest for custom checks
  • Returns JvmCompilationResult; inspect exitCode, kspSourcesDir, generated files
  • Pass custom symbolProcessors or processorProviders

runTest Behavior

  • Loads source from resources
  • Compiles with ActivityProcessorProvider (default)
  • Asserts exitCode == OK (or COMPILATION_ERROR when error directives present)
  • Verifies generated files exist (ActivitiesData.kt, KtGramCtxLoader.kt, BotCtx.kt)
  • Parses /* G-EXPECT ... */ blocks for golden output checks

Golden Output

Two modes (hybrid):

  1. Golden files (preferred): If test-data/golden/<TestName>/<FileName>.gold exists, full file content is compared.
  2. G-EXPECT (fallback): When no golden exists, use inline /* G-EXPECT ... */ block in test data.

G-EXPECT is optional when golden files exist — expectations are discovered from golden files automatically.

Update golden files: ./gradlew :ktnip:updateGolden — run when generated output changes intentionally.

G-EXPECT (fallback)

Add /* G-EXPECT ... */ block to test data when no golden file exists:

/* G-EXPECT
file=KtGramCtxLoader.kt
contains="registerCommand"
contains="registerActivity"

file=BotCtx.kt
contains="userData"
contains="getState"
notContains="TODO"

noError
*/

Directives: file=, contains="...", notContains="...", matches="regex", notMatches="regex", noError, error contains=, error exact=, error count=, error file=X line=Y contains=

Reference

Install via CLI
npx skills add https://github.com/vendelieu/telegram-bot --skill add-ktnip-ksp-tests
Repository Details
star Stars 247
call_split Forks 17
navigation Branch main
article Path SKILL.md
More from Creator