From test-engineering
Detect testing frameworks and application frameworks in target projects. Use when analyzing a codebase to identify which testing framework is configured (pytest, Jest, JUnit, xUnit, Google Test, Unreal Engine LLT, etc.) across Python, JavaScript, TypeScript, Java, C#, Go, C++, and Unreal Engine.
npx claudepluginhub issacchaos/local-marketplace --plugin test-engineeringThis skill uses the workspace's default tool permissions.
**Version**: 1.1.0
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
Version: 1.1.0 Category: Analysis Languages: Python, JavaScript, TypeScript, Java, C#, Go, C++, Rust, Ruby, C, Unreal Engine C++ Purpose: Detect testing frameworks and application frameworks in target projects
New in v1.1.0: Added Unreal Engine Low Level Tests (LLT) framework detection with UE-specific build system patterns (TestModuleRules, TestTargetRules, TestHarness.h)
The Framework Detection Skill provides comprehensive language and framework identification capabilities for automated testing workflows. It uses multiple detection strategies with confidence scoring to accurately identify which testing framework(s) a project uses, enabling context-aware test generation and execution.
project_path: Path to the project root directory
language_hint: Optional language type (python, javascript, typescript, etc.)
primary_framework: Detected primary testing framework (e.g., "pytest", "jest", "junit", "ue-llt", "playwright")
secondary_frameworks: List of additional frameworks found (e.g., ["unittest", "pytest-mock"])
test_type: Type of tests the primary framework supports ("unit", "integration", "e2e")
application_framework: Detected application framework if any (e.g., "django", "react", "spring-boot", "unreal-engine")
confidence_score: Float 0.0-1.0 indicating detection confidence
detection_details:
config_files: List of framework config files found
dependencies: List of framework dependencies found
import_patterns: List of framework imports found in code
code_patterns: List of framework-specific code patterns found
build_system: Build system detected (e.g., "cmake", "ue-ubt", "maven", "npm")
Note: For Unreal Engine LLT detection details, see skills/framework-detection/ue-llt-framework.md
Framework detection uses a weighted scoring system:
Configuration Files (weight: 10)
Dependencies (weight: 8)
Import Patterns (weight: 2-3)
Code Patterns (weight: 3-5)
Build System Patterns (weight: 10-15)
Total Confidence = framework_score / total_all_scores
Minimum Threshold: 0.1 (10%) to report a framework as detected
Evidence Requirements: At least 2 types of evidence required to avoid false positives
Scan for framework-specific configuration files:
pytest.ini, pyproject.toml, setup.cfg # Python/pytest
jest.config.js, jest.config.json # JavaScript/Jest
vitest.config.ts, vite.config.ts # TypeScript/Vitest
CMakeLists.txt # C++
Cargo.toml # Rust
go.mod # Go
*.csproj # C#
pom.xml, build.gradle # Java
Gemfile # Ruby
playwright.config.ts, playwright.config.js # E2E/Playwright
cypress.config.js, cypress.config.ts # E2E/Cypress
cypress.json # E2E/Cypress (legacy)
Parse package manager files:
Python:
JavaScript/TypeScript:
Java:
C#:
Go:
C++:
Rust:
Ruby:
Scan source files for framework imports (sample up to 50 files per extension):
# Python
import pytest
import unittest
from unittest import TestCase
# JavaScript/TypeScript
import { describe, it, expect } from 'jest'
import { describe, test } from 'vitest'
# Java
import org.junit.jupiter.api.Test;
import org.junit.Test;
# C#
using Xunit;
using NUnit.Framework;
# Go
import "testing"
import "github.com/stretchr/testify/assert"
# C++
#include <gtest/gtest.h>
#include <catch2/catch_test_macros.hpp>
# Rust
#[test]
#[cfg(test)]
# Ruby
require 'rspec'
require 'minitest/autorun'
Identify framework-specific syntax using regex patterns:
# Pytest
r'def test_\w+' # Test function naming
r'import pytest' # pytest import
r'@pytest\.(fixture|mark)' # pytest decorators
# unittest
r'class \w+\(unittest\.TestCase\)' # unittest class
r'def test\w+\(self\)' # unittest method
r'self\.assert\w+' # unittest assertions
# Jest/Vitest
r'describe\s*\(' # describe block
r'it\s*\(|test\s*\(' # test cases
r'expect\(.*\)\.to' # expect assertions
# JUnit
r'@Test|@ParameterizedTest' # JUnit annotations
r'import org\.junit' # JUnit imports
# xUnit
r'\[Fact\]|\[Theory\]' # xUnit attributes
r'Assert\.Equal|Assert\.True' # xUnit assertions
# Go
r'func\s+Test\w+\(' # Go test functions
r'\*testing\.T\b' # testing.T parameter
# GTest
r'TEST\(|TEST_F\(' # GTest macros
r'EXPECT_|ASSERT_' # GTest assertions
# Catch2
r'TEST_CASE\(|SECTION\(' # Catch2 macros
r'REQUIRE\(|CHECK\(' # Catch2 assertions
# Rust
r'#\[test\]|#\[cfg\(test\)\]' # Rust test attributes
r'assert_eq!|assert!' # Rust assertions
# RSpec
r'describe\s+|context\s+' # RSpec blocks
r'it\s+["\']|expect\(.*\)\.to\s+' # RSpec expectations
Language-specific build configuration analysis:
CMake (C/C++):
find_package(GTest REQUIRED)
target_link_libraries(mytest gtest)
find_package(Catch2 REQUIRED)
Cargo.toml (Rust):
[dev-dependencies]
proptest = "1.0"
criterion = "0.5"
[[test]]
name = "integration_tests"
go.mod (Go):
require (
github.com/stretchr/testify v1.8.0
github.com/onsi/ginkgo/v2 v2.8.0
)
.csproj (C#):
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="NUnit" Version="3.13.3" />
pom.xml / build.gradle (Java):
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
</dependency>
testImplementation 'org.junit.jupiter:junit-jupiter:5.9.0'
Gemfile (Ruby):
gem 'rspec'
gem 'minitest'
Filter detected frameworks by language compatibility:
Each supported language has its own detailed skill document:
When analyzing a project to identify test targets:
1. Read this skill: skills/framework-detection/SKILL.md
2. Read language-specific skill based on detected language
3. Apply detection strategies in order:
- Check config files (fast, high confidence)
- Check dependencies (medium speed, high confidence)
- Check build system patterns (medium speed, high confidence)
- Check imports (slower, medium confidence)
- Check code patterns (slower, medium confidence)
4. Calculate confidence scores
5. Filter by language compatibility
6. Return primary framework with ≥ 0.3 confidence OR fallback to language default
When generating test code:
1. Receive framework from Analyze Agent output
2. **CRITICAL**: Read skills/test-location-detection/SKILL.md to determine correct test file location
3. Load corresponding template: templates/{language}-{framework}-template.md
4. Use framework-specific conventions from detection skill
5. Determine test file path using Test Location Detection skill
6. Validate test path is NOT in .claude-tests/ or temporary directories
7. Generate test code following framework patterns at correct location
When running tests:
1. Receive framework from Analyze Agent output
2. Use framework-specific test execution command
3. Parse output using framework-specific parser from result-parsing skill
For C++ projects, ALWAYS check for UE LLT FIRST before checking for standalone Catch2:
1. **Priority Detection for UE LLT**:
- Check for TestModuleRules in .Build.cs files (Weight: 15) - DEFINITIVE
- Check for TestTargetRules in .Target.cs files (Weight: 15) - DEFINITIVE
- Check for #include "TestHarness.h" (Weight: 8) - HIGH CONFIDENCE
- If any found → UE LLT with high confidence
2. **Exclusion Check for Standalone Catch2**:
- Check for CMakeLists.txt, Makefile, Bazel WORKSPACE
- Check for #include <catch2/catch_test_macros.hpp>
- If found → Standalone Catch2 (NOT UE LLT)
3. **Supporting Evidence** (only if high confidence already):
- TEST_CASE with UE naming (ModuleName::FClassName::Method)
- UE types (FString, TArray, UObject) in test code
- Tests/ directory at plugin root
- .uplugin or .uproject files
4. **Recommendation**:
- If UE LLT detected (confidence ≥ 0.5), recommend `/llt-generate` command
- Display: "Detected Unreal Engine LLT framework. Use `/llt-generate` for UE-specific test generation."
Important: See skills/framework-detection/ue-llt-framework.md for complete UE LLT detection patterns and confidence scoring algorithm.
If confidence scores are all < 0.1:
Return language-specific fallback:
Report confidence: 0.1 (fallback)
If multiple frameworks have high confidence (≥ 0.2):
If config files suggest one framework but dependencies suggest another:
Manual validation with sample projects:
Expected outcomes:
dante/src/dante/analysis/framework_detector.pyLast Updated: 2026-02-16 Status: Phase 1 - Python support implemented; Phase 2 - E2E framework detection integrated