@@ -2416,6 +2416,121 @@ class CodeGenTest {
2416
2416
assertCompilesJava(dataTypes + interfaces)
2417
2417
}
2418
2418
2419
+ @Test
2420
+ fun generateInterfaceMethodsForInterfaceFields () {
2421
+ val schema = """
2422
+ interface Fruit {
2423
+ seeds: [Seed]
2424
+ }
2425
+
2426
+ interface FruitCategory {
2427
+ color: String
2428
+ fruit: Fruit
2429
+ }
2430
+
2431
+ type Apple implements Fruit {
2432
+ seeds: [Seed]
2433
+ }
2434
+
2435
+ type Seed {
2436
+ shape: String
2437
+ }
2438
+ """ .trimIndent()
2439
+
2440
+ val result = CodeGen (
2441
+ CodeGenConfig (
2442
+ schemas = setOf (schema),
2443
+ packageName = basePackageName,
2444
+ generateInterfaceMethodsForInterfaceFields = true
2445
+ )
2446
+ ).generate()
2447
+
2448
+ val interfaces = result.javaInterfaces
2449
+ val dataTypes = result.javaDataTypes
2450
+
2451
+ val fruit = interfaces[0 ]
2452
+ assertThat(fruit.typeSpec.name).isEqualTo(" Fruit" )
2453
+ assertThat(fruit.typeSpec.fieldSpecs).isEmpty()
2454
+ assertThat(fruit.typeSpec.methodSpecs.size).isEqualTo(2 )
2455
+ assertThat(fruit.typeSpec.methodSpecs[0 ].name).isEqualTo(" getSeeds" )
2456
+ assertThat(fruit.typeSpec.methodSpecs[1 ].name).isEqualTo(" setSeeds" )
2457
+
2458
+ val category = interfaces[1 ]
2459
+ assertThat(category.typeSpec.name).isEqualTo(" FruitCategory" )
2460
+ assertThat(category.typeSpec.fieldSpecs).isEmpty()
2461
+ assertThat(category.typeSpec.methodSpecs.size).isEqualTo(4 )
2462
+ assertThat(category.typeSpec.methodSpecs[0 ].name).isEqualTo(" getColor" )
2463
+ assertThat(category.typeSpec.methodSpecs[1 ].name).isEqualTo(" setColor" )
2464
+ assertThat(category.typeSpec.methodSpecs[2 ].name).isEqualTo(" getFruit" )
2465
+ assertThat(category.typeSpec.methodSpecs[3 ].name).isEqualTo(" setFruit" )
2466
+
2467
+ assertCompilesJava(dataTypes + interfaces)
2468
+ }
2469
+
2470
+ @Test
2471
+ fun generateInterfacesWithMethodsForInterfaceFields () {
2472
+ val schema = """
2473
+ interface Fruit {
2474
+ seeds: [Seed]
2475
+ }
2476
+
2477
+ interface FruitCategory {
2478
+ color: String
2479
+ fruit: Fruit
2480
+ }
2481
+
2482
+ type Apple implements Fruit {
2483
+ seeds: [Seed]
2484
+ }
2485
+
2486
+ type Seed {
2487
+ shape: String
2488
+ }
2489
+ """ .trimIndent()
2490
+
2491
+ val result = CodeGen (
2492
+ CodeGenConfig (
2493
+ schemas = setOf (schema),
2494
+ packageName = basePackageName,
2495
+ generateInterfaceMethodsForInterfaceFields = true ,
2496
+ generateInterfaces = true
2497
+ )
2498
+ ).generate()
2499
+
2500
+ val interfaces = result.javaInterfaces
2501
+ val dataTypes = result.javaDataTypes
2502
+
2503
+ val iapple = interfaces[0 ]
2504
+ assertThat(iapple.typeSpec.name).isEqualTo(" IApple" )
2505
+
2506
+ val iseed = interfaces[1 ]
2507
+ assertThat(iseed.typeSpec.name).isEqualTo(" ISeed" )
2508
+ assertThat(iseed.typeSpec.fieldSpecs).isEmpty()
2509
+ assertThat(iseed.typeSpec.methodSpecs.size).isEqualTo(1 )
2510
+ assertThat(iseed.typeSpec.methodSpecs[0 ].name).isEqualTo(" getShape" )
2511
+
2512
+ val fruit = interfaces[2 ]
2513
+ assertThat(fruit.typeSpec.name).isEqualTo(" Fruit" )
2514
+ assertThat(fruit.typeSpec.fieldSpecs).isEmpty()
2515
+ assertThat(fruit.typeSpec.methodSpecs.size).isEqualTo(2 )
2516
+ assertThat(fruit.typeSpec.methodSpecs[0 ].name).isEqualTo(" getSeeds" )
2517
+ val parameterizedTypeName = fruit.typeSpec.methodSpecs[0 ].returnType as ParameterizedTypeName
2518
+ val wildcardTypeName = parameterizedTypeName.typeArguments[0 ] as WildcardTypeName
2519
+ assertThat(wildcardTypeName.upperBounds[0 ]).extracting(" simpleName" ).isEqualTo(" ISeed" )
2520
+ assertThat(fruit.typeSpec.methodSpecs[1 ].name).isEqualTo(" setSeeds" )
2521
+
2522
+ val category = interfaces[3 ]
2523
+ assertThat(category.typeSpec.name).isEqualTo(" FruitCategory" )
2524
+ assertThat(category.typeSpec.fieldSpecs).isEmpty()
2525
+ assertThat(category.typeSpec.methodSpecs.size).isEqualTo(4 )
2526
+ assertThat(category.typeSpec.methodSpecs[0 ].name).isEqualTo(" getColor" )
2527
+ assertThat(category.typeSpec.methodSpecs[1 ].name).isEqualTo(" setColor" )
2528
+ assertThat(category.typeSpec.methodSpecs[2 ].name).isEqualTo(" getFruit" )
2529
+ assertThat(category.typeSpec.methodSpecs[3 ].name).isEqualTo(" setFruit" )
2530
+
2531
+ assertCompilesJava(dataTypes + interfaces)
2532
+ }
2533
+
2419
2534
@Test
2420
2535
fun generateObjectTypeInterfaceWithInterfaceInheritance () {
2421
2536
val schema = """
@@ -2669,7 +2784,8 @@ class CodeGenTest {
2669
2784
assertThat(moviePage.typeSpec.fieldSpecs).extracting(" name" ).containsExactly(" items" )
2670
2785
parameterizedTypeName = moviePage.typeSpec.fieldSpecs[0 ].type as ParameterizedTypeName
2671
2786
assertThat(parameterizedTypeName.rawType).extracting(" simpleName" ).isEqualTo(" List" )
2672
- assertThat(parameterizedTypeName.typeArguments[0 ]).extracting(" simpleName" ).isEqualTo(" IMovie" )
2787
+ val movieTypeName = parameterizedTypeName.typeArguments[0 ] as WildcardTypeName
2788
+ assertThat(movieTypeName.upperBounds[0 ]).extracting(" simpleName" ).isEqualTo(" IMovie" )
2673
2789
2674
2790
val genre = dataTypes[2 ]
2675
2791
assertThat(genre.typeSpec.name).isEqualTo(" Genre" )
0 commit comments