@@ -2,6 +2,10 @@ package chapi.ast.csharpast
22
33import org.junit.jupiter.api.Test
44import kotlin.test.assertEquals
5+ import kotlin.test.assertNotNull
6+ import kotlin.test.assertTrue
7+ import chapi.domain.core.DataStructType
8+ import kotlin.test.Ignore
59
610internal class CSharpAstListenerTest {
711 private val helloworld = """
@@ -427,5 +431,65 @@ namespace Chapi {
427431 assertEquals(" Point" , structs[0 ].NodeName )
428432 assertEquals(2 , structs[0 ].Fields .size)
429433 }
434+
435+ @Test
436+ @Ignore
437+ fun shouldParseModernCSharpFeatures () {
438+ val code = this ::class .java.getResource(" /modern/ModernCSharpFeatures.cs" )?.readText()
439+ if (code == null ) {
440+ // Skip if resource not found
441+ return
442+ }
443+
444+ val codeFile = CSharpAnalyser ().analysis(code, " ModernCSharpFeatures.cs" )
445+
446+ assertTrue(codeFile.Imports .isNotEmpty())
447+ assertTrue(codeFile.Containers .isNotEmpty())
448+
449+ val container = codeFile.Containers [0 ]
450+ assertEquals(" ModernCSharp.Examples" , container.PackageName )
451+
452+ // Check for controller
453+ val controller = container.DataStructures .find { it.NodeName == " UsersController" }
454+ assertNotNull(controller)
455+ assertTrue(controller!! .Annotations .any { it.Name == " ApiController" })
456+
457+ // Check for service with async methods
458+ val service = container.DataStructures .find { it.NodeName == " UserService" }
459+ assertNotNull(service)
460+ assertTrue(service!! .Functions .any { it.Modifiers .contains(" async" ) })
461+
462+ // Check for records
463+ val userDto = container.DataStructures .find { it.NodeName == " UserDto" }
464+ assertNotNull(userDto)
465+
466+ val createUserRequest = container.DataStructures .find { it.NodeName == " CreateUserRequest" }
467+ assertNotNull(createUserRequest)
468+
469+ // Check for interfaces
470+ val userServiceInterface = container.DataStructures .find { it.NodeName == " IUserService" }
471+ assertNotNull(userServiceInterface)
472+ assertEquals(DataStructType .INTERFACE , userServiceInterface!! .Type )
473+
474+ // Check for repository
475+ val repository = container.DataStructures .find { it.NodeName == " UserRepository" }
476+ assertNotNull(repository)
477+ assertEquals(" IUserRepository" , repository!! .Extend )
478+
479+ // Check for pattern matching examples
480+ val patternMatching = container.DataStructures .find { it.NodeName == " PatternMatchingExamples" }
481+ assertNotNull(patternMatching)
482+ assertTrue(patternMatching!! .Functions .isNotEmpty())
483+
484+ // Check for LINQ examples
485+ val linqExamples = container.DataStructures .find { it.NodeName == " AdvancedLinqExamples" }
486+ assertNotNull(linqExamples)
487+ assertTrue(linqExamples!! .Functions .isNotEmpty())
488+
489+ // Check for extension methods
490+ val extensions = container.DataStructures .find { it.NodeName == " EnumerableExtensions" }
491+ assertNotNull(extensions)
492+ assertTrue(extensions!! .Functions .all { it.Modifiers .contains(" static" ) })
493+ }
430494}
431495
0 commit comments