Skip to content

Commit 7d2f995

Browse files
committed
feat(test): add advanced language feature test suites
Add comprehensive test resources and suites for Dart, C#, and Swift to cover modern language features and improve test coverage.
1 parent d61af93 commit 7d2f995

8 files changed

Lines changed: 2242 additions & 0 deletions

File tree

chapi-ast-csharp/src/test/kotlin/chapi/ast/csharpast/CSharpAdvancedFeaturesTest.kt

Lines changed: 783 additions & 0 deletions
Large diffs are not rendered by default.

chapi-ast-csharp/src/test/kotlin/chapi/ast/csharpast/CSharpAstListenerTest.kt

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ package chapi.ast.csharpast
22

33
import org.junit.jupiter.api.Test
44
import 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

610
internal 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

Comments
 (0)