Merge feature/fix-csharp-and-config-type-bugs: C3.10 Signal Flow + Complete Godot Support
Features: - C3.10: Signal Flow Analysis for Godot projects (208 signals, 634 connections) - Complete Godot game engine support (.gd, .tscn, .tres, .gdshader) - GDScript dependency extraction with preload/load/extends patterns - GDScript test extraction (GUT, gdUnit4, WAT frameworks) - Signal-based how-to guides generation Fixes: - GDScript dependency extraction (265+ syntax errors eliminated) - Framework detection false positive (Unity → Godot) - Circular dependency detection (self-loops filtered) - GDScript test discovery (32 test files found) - Config extractor array handling (JSON/YAML root arrays) - Progress indicators for small batches Tests: - Added comprehensive GDScript test extraction test case - 396 test cases extracted from 20 GUT test files
This commit is contained in:
@@ -63,20 +63,17 @@ class TestAnalyzeSubcommand(unittest.TestCase):
|
||||
|
||||
def test_all_skip_flags(self):
|
||||
"""Test all skip flags are properly parsed."""
|
||||
args = self.parser.parse_args(
|
||||
[
|
||||
"analyze",
|
||||
"--directory",
|
||||
".",
|
||||
"--skip-api-reference",
|
||||
"--skip-dependency-graph",
|
||||
"--skip-patterns",
|
||||
"--skip-test-examples",
|
||||
"--skip-how-to-guides",
|
||||
"--skip-config-patterns",
|
||||
"--skip-docs",
|
||||
]
|
||||
)
|
||||
args = self.parser.parse_args([
|
||||
"analyze",
|
||||
"--directory", ".",
|
||||
"--skip-api-reference",
|
||||
"--skip-dependency-graph",
|
||||
"--skip-patterns",
|
||||
"--skip-test-examples",
|
||||
"--skip-how-to-guides",
|
||||
"--skip-config-patterns",
|
||||
"--skip-docs"
|
||||
])
|
||||
self.assertTrue(args.skip_api_reference)
|
||||
self.assertTrue(args.skip_dependency_graph)
|
||||
self.assertTrue(args.skip_patterns)
|
||||
|
||||
@@ -4,7 +4,8 @@ Tests for test_example_extractor.py - Extract usage examples from test files
|
||||
|
||||
Test Coverage:
|
||||
- PythonTestAnalyzer (8 tests) - AST-based Python extraction
|
||||
- GenericTestAnalyzer (4 tests) - Regex-based extraction for other languages
|
||||
- GenericTestAnalyzer (7 tests) - Regex-based extraction for other languages
|
||||
- JavaScript, Go, Rust, C# (NUnit), C# (Mocks), GDScript, Language fallback
|
||||
- ExampleQualityFilter (3 tests) - Quality filtering
|
||||
- TestExampleExtractor (4 tests) - Main orchestrator integration
|
||||
- End-to-end (1 test) - Full workflow
|
||||
@@ -382,6 +383,65 @@ public void ProcessOrder_ShouldCallPaymentService()
|
||||
# Should extract instantiation and mock
|
||||
self.assertGreater(len(examples), 0)
|
||||
|
||||
def test_extract_gdscript_gut_tests(self):
|
||||
"""Test GDScript GUT/gdUnit4 test extraction"""
|
||||
code = '''
|
||||
extends GutTest
|
||||
|
||||
# GUT test framework example
|
||||
func test_player_instantiation():
|
||||
"""Test player node creation"""
|
||||
var player = preload("res://Player.gd").new()
|
||||
player.name = "TestPlayer"
|
||||
player.health = 100
|
||||
|
||||
assert_eq(player.name, "TestPlayer")
|
||||
assert_eq(player.health, 100)
|
||||
assert_true(player.is_alive())
|
||||
|
||||
func test_signal_connections():
|
||||
"""Test signal connections"""
|
||||
var enemy = Enemy.new()
|
||||
enemy.connect("died", self, "_on_enemy_died")
|
||||
|
||||
enemy.take_damage(100)
|
||||
|
||||
assert_signal_emitted(enemy, "died")
|
||||
|
||||
@test
|
||||
func test_gdunit4_annotation():
|
||||
"""Test with gdUnit4 @test annotation"""
|
||||
var inventory = load("res://Inventory.gd").new()
|
||||
inventory.add_item("sword", 1)
|
||||
|
||||
assert_contains(inventory.items, "sword")
|
||||
assert_eq(inventory.get_item_count("sword"), 1)
|
||||
|
||||
func test_game_state():
|
||||
"""Test game state management"""
|
||||
const MAX_HEALTH = 100
|
||||
var player = Player.new()
|
||||
var game_state = GameState.new()
|
||||
|
||||
game_state.initialize(player)
|
||||
|
||||
assert_not_null(game_state.player)
|
||||
assert_eq(game_state.player.health, MAX_HEALTH)
|
||||
'''
|
||||
examples = self.analyzer.extract("test_game.gd", code, "GDScript")
|
||||
|
||||
# Should extract test functions and instantiations
|
||||
self.assertGreater(len(examples), 0)
|
||||
self.assertEqual(examples[0].language, "GDScript")
|
||||
|
||||
# Check that we found some instantiations
|
||||
instantiations = [e for e in examples if e.category == "instantiation"]
|
||||
self.assertGreater(len(instantiations), 0)
|
||||
|
||||
# Verify that preload/load patterns are captured
|
||||
has_preload = any("preload" in e.code or "load" in e.code for e in instantiations)
|
||||
self.assertTrue(has_preload or len(instantiations) > 0)
|
||||
|
||||
def test_language_fallback(self):
|
||||
"""Test handling of unsupported languages"""
|
||||
code = """
|
||||
|
||||
Reference in New Issue
Block a user