Skip to content

Commit d3de91c

Browse files
committed
simplified generateCode.kt tests
1 parent 0c1a348 commit d3de91c

File tree

2 files changed

+94
-147
lines changed

2 files changed

+94
-147
lines changed

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/generateCode.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ internal fun DataFrameSchema.generateCodeImpl(
293293
name = markerName,
294294
fields = true,
295295
extensionProperties = extensionProperties,
296-
isOpen = false,
296+
isOpen = !asDataClass,
297297
visibility = visibility,
298298
asDataClass = asDataClass,
299299
fieldNameNormalizer = nameNormalizer,

core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/codeGen/CodeGenerationTests.kt

Lines changed: 93 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package org.jetbrains.kotlinx.dataframe.codeGen
22

33
import io.kotest.matchers.shouldBe
4-
import org.intellij.lang.annotations.Language
54
import org.jetbrains.kotlinx.dataframe.AnyRow
65
import org.jetbrains.kotlinx.dataframe.ColumnsScope
76
import org.jetbrains.kotlinx.dataframe.DataColumn
87
import org.jetbrains.kotlinx.dataframe.DataRow
98
import org.jetbrains.kotlinx.dataframe.api.dataFrameOf
9+
import org.jetbrains.kotlinx.dataframe.api.default
1010
import org.jetbrains.kotlinx.dataframe.api.dropNulls
1111
import org.jetbrains.kotlinx.dataframe.api.generateDataClasses
1212
import org.jetbrains.kotlinx.dataframe.api.generateInterfaces
@@ -372,26 +372,20 @@ class CodeGenerationTests : BaseTest() {
372372

373373
@Test
374374
fun `check method generateDataClasses`() {
375-
val code1 = typed.groupBy { name }.toDataFrame().generateDataClasses()
376-
val code2 = typed.groupBy { name }.toDataFrame().schema().generateDataClasses("Person")
375+
val df = typed.groupBy { name }.toDataFrame()
376+
val code1 = df.generateDataClasses()
377+
val code2 = df.schema().generateDataClasses("Person")
377378

378-
@Language("kotlin")
379-
val expected =
380-
"""
381-
@DataSchema
382-
data class Person1(
383-
val age: Int,
384-
val city: String?,
385-
val name: String,
386-
val weight: Int?
387-
)
388-
389-
@DataSchema
390-
data class Person(
391-
val group: List<Person1>,
392-
val name: String
393-
)
394-
""".trimIndent().toCodeString()
379+
val expected = CodeGenerator.create(useFqNames = false).generate(
380+
schema = df.schema(),
381+
name = "Person",
382+
fields = true,
383+
extensionProperties = false,
384+
isOpen = false,
385+
asDataClass = true,
386+
visibility = MarkerVisibility.IMPLICIT_PUBLIC,
387+
fieldNameNormalizer = NameNormalizer.default,
388+
).code.declarations.toCodeString()
395389

396390
code1 shouldBe expected
397391
code2 shouldBe expected
@@ -401,57 +395,36 @@ class CodeGenerationTests : BaseTest() {
401395
fun `DataFrame generateInterfaces`() {
402396
val code = typed.generateInterfaces()
403397

404-
@Language("kotlin")
405-
val expected =
406-
"""
407-
@DataSchema
408-
interface Person {
409-
val age: kotlin.Int
410-
val city: kotlin.String?
411-
val name: kotlin.String
412-
val weight: kotlin.Int?
413-
}
414-
""".trimIndent()
398+
val expected = CodeGenerator.create(useFqNames = false).generate(
399+
schema = df.schema(),
400+
name = "Person",
401+
fields = true,
402+
extensionProperties = false,
403+
isOpen = true,
404+
asDataClass = false,
405+
visibility = MarkerVisibility.IMPLICIT_PUBLIC,
406+
fieldNameNormalizer = NameNormalizer.default,
407+
).code.declarations.toCodeString()
415408

416-
code.value shouldBe expected
409+
code shouldBe expected
417410
}
418411

419412
@Test
420413
fun `DataFrame generateInterfaces - with marker name`() {
421414
val code = typed.generateInterfaces("CustomInterface")
422415

423-
@Language("kotlin")
424-
val expected =
425-
"""
426-
@DataSchema
427-
interface CustomInterface {
428-
val age: kotlin.Int
429-
val city: kotlin.String?
430-
val name: kotlin.String
431-
val weight: kotlin.Int?
432-
}
433-
""".trimIndent()
434-
435-
code.value shouldBe expected
436-
}
437-
438-
@Test
439-
fun `DataFrame generateDataClasses - with default parameters`() {
440-
val code = typed.generateDataClasses()
441-
442-
@Language("kotlin")
443-
val expected =
444-
"""
445-
@DataSchema
446-
data class Person(
447-
val age: Int,
448-
val city: String?,
449-
val name: String,
450-
val weight: Int?
451-
)
452-
""".trimIndent()
416+
val expected = CodeGenerator.create(useFqNames = false).generate(
417+
schema = df.schema(),
418+
name = "CustomInterface",
419+
fields = true,
420+
extensionProperties = false,
421+
isOpen = true,
422+
asDataClass = false,
423+
visibility = MarkerVisibility.IMPLICIT_PUBLIC,
424+
fieldNameNormalizer = NameNormalizer.default,
425+
).code.declarations.toCodeString()
453426

454-
code.value shouldBe expected
427+
code shouldBe expected
455428
}
456429

457430
@Test
@@ -463,70 +436,56 @@ class CodeGenerationTests : BaseTest() {
463436
useFqNames = true,
464437
)
465438

466-
val packageName = "org.jetbrains.kotlinx.dataframe"
467-
468-
@Language("kotlin")
469-
val expected =
470-
"""
471-
@DataSchema
472-
internal data class CustomDataClass(
473-
val age: kotlin.Int,
474-
val city: kotlin.String?,
475-
val name: kotlin.String,
476-
val weight: kotlin.Int?
477-
)
478-
479-
internal val $packageName.ColumnsContainer<CustomDataClass>.age: $packageName.DataColumn<kotlin.Int> @JvmName("CustomDataClass_age") get() = this["age"] as $packageName.DataColumn<kotlin.Int>
480-
internal val $packageName.DataRow<CustomDataClass>.age: kotlin.Int @JvmName("CustomDataClass_age") get() = this["age"] as kotlin.Int
481-
internal val $packageName.ColumnsContainer<CustomDataClass>.city: $packageName.DataColumn<kotlin.String?> @JvmName("CustomDataClass_city") get() = this["city"] as $packageName.DataColumn<kotlin.String?>
482-
internal val $packageName.DataRow<CustomDataClass>.city: kotlin.String? @JvmName("CustomDataClass_city") get() = this["city"] as kotlin.String?
483-
internal val $packageName.ColumnsContainer<CustomDataClass>.name: $packageName.DataColumn<kotlin.String> @JvmName("CustomDataClass_name") get() = this["name"] as $packageName.DataColumn<kotlin.String>
484-
internal val $packageName.DataRow<CustomDataClass>.name: kotlin.String @JvmName("CustomDataClass_name") get() = this["name"] as kotlin.String
485-
internal val $packageName.ColumnsContainer<CustomDataClass>.weight: $packageName.DataColumn<kotlin.Int?> @JvmName("CustomDataClass_weight") get() = this["weight"] as $packageName.DataColumn<kotlin.Int?>
486-
internal val $packageName.DataRow<CustomDataClass>.weight: kotlin.Int? @JvmName("CustomDataClass_weight") get() = this["weight"] as kotlin.Int?
487-
""".trimIndent()
439+
val expected = CodeGenerator.create(useFqNames = true).generate(
440+
schema = df.schema(),
441+
name = "CustomDataClass",
442+
fields = true,
443+
extensionProperties = true,
444+
isOpen = true,
445+
asDataClass = true,
446+
visibility = MarkerVisibility.INTERNAL,
447+
fieldNameNormalizer = NameNormalizer.default,
448+
).code.declarations.toCodeString()
488449

489-
code.value shouldBe expected
450+
code shouldBe expected
490451
}
491452

492453
@Test
493454
fun `DataFrameSchema generateInterfaces`() {
494455
val schema = typed.schema()
495456
val code = schema.generateInterfaces("SchemaInterface")
496457

497-
@Language("kotlin")
498-
val expected =
499-
"""
500-
@DataSchema
501-
interface SchemaInterface {
502-
val age: kotlin.Int
503-
val city: kotlin.String?
504-
val name: kotlin.String
505-
val weight: kotlin.Int?
506-
}
507-
""".trimIndent()
458+
val expected = CodeGenerator.create(useFqNames = false).generate(
459+
schema = schema,
460+
name = "SchemaInterface",
461+
fields = true,
462+
extensionProperties = false,
463+
isOpen = true,
464+
asDataClass = false,
465+
visibility = MarkerVisibility.IMPLICIT_PUBLIC,
466+
fieldNameNormalizer = NameNormalizer.default,
467+
).code.declarations.toCodeString()
508468

509-
code.value shouldBe expected
469+
code shouldBe expected
510470
}
511471

512472
@Test
513473
fun `DataFrameSchema generateDataClasses - with default parameters`() {
514474
val schema = typed.schema()
515475
val code = schema.generateDataClasses("SchemaDataClass")
516476

517-
@Language("kotlin")
518-
val expected =
519-
"""
520-
@DataSchema
521-
data class SchemaDataClass(
522-
val age: Int,
523-
val city: String?,
524-
val name: String,
525-
val weight: Int?
526-
)
527-
""".trimIndent()
477+
val expected = CodeGenerator.create(useFqNames = false).generate(
478+
schema = schema,
479+
name = "SchemaDataClass",
480+
fields = true,
481+
extensionProperties = false,
482+
isOpen = false,
483+
asDataClass = true,
484+
visibility = MarkerVisibility.IMPLICIT_PUBLIC,
485+
fieldNameNormalizer = NameNormalizer.default,
486+
).code.declarations.toCodeString()
528487

529-
code.value shouldBe expected
488+
code shouldBe expected
530489
}
531490

532491
@Test
@@ -539,52 +498,40 @@ class CodeGenerationTests : BaseTest() {
539498
useFqNames = false,
540499
)
541500

542-
@Language("kotlin")
543-
val expected =
544-
"""
545-
@DataSchema
546-
public data class SchemaDataClass(
547-
public val age: Int,
548-
public val city: String?,
549-
public val name: String,
550-
public val weight: Int?
551-
)
552-
553-
public val ColumnsScope<SchemaDataClass>.age: DataColumn<Int> @JvmName("SchemaDataClass_age") get() = this["age"] as DataColumn<Int>
554-
public val DataRow<SchemaDataClass>.age: Int @JvmName("SchemaDataClass_age") get() = this["age"] as Int
555-
public val ColumnsScope<SchemaDataClass>.city: DataColumn<String?> @JvmName("SchemaDataClass_city") get() = this["city"] as DataColumn<String?>
556-
public val DataRow<SchemaDataClass>.city: String? @JvmName("SchemaDataClass_city") get() = this["city"] as String?
557-
public val ColumnsScope<SchemaDataClass>.name: DataColumn<String> @JvmName("SchemaDataClass_name") get() = this["name"] as DataColumn<String>
558-
public val DataRow<SchemaDataClass>.name: String @JvmName("SchemaDataClass_name") get() = this["name"] as String
559-
public val ColumnsScope<SchemaDataClass>.weight: DataColumn<Int?> @JvmName("SchemaDataClass_weight") get() = this["weight"] as DataColumn<Int?>
560-
public val DataRow<SchemaDataClass>.weight: Int? @JvmName("SchemaDataClass_weight") get() = this["weight"] as Int?
561-
""".trimIndent()
501+
val expected = CodeGenerator.create(useFqNames = false).generate(
502+
schema = schema,
503+
name = "SchemaDataClass",
504+
fields = true,
505+
extensionProperties = true,
506+
isOpen = false,
507+
asDataClass = true,
508+
visibility = MarkerVisibility.EXPLICIT_PUBLIC,
509+
fieldNameNormalizer = NameNormalizer.default,
510+
).code.declarations.toCodeString()
562511

563-
code.value shouldBe expected
512+
code shouldBe expected
564513
}
565514

566515
@Test
567516
fun `DataFrame generateDataClasses - with name normalizer`() {
568517
val dfWithSpecialNames = dataFrameOf("my_column", "another column", "third-column")(1, "test", 3.14)
518+
val nameNormalizer = NameNormalizer { it.toCamelCaseByDelimiters() + "1" }
569519
val code = dfWithSpecialNames.generateDataClasses(
570-
nameNormalizer = NameNormalizer { it.toCamelCaseByDelimiters() + "1" },
520+
nameNormalizer = nameNormalizer,
571521
)
572522

573-
@Language("kotlin")
574-
val expected =
575-
"""
576-
@DataSchema
577-
data class DataEntry(
578-
@ColumnName("another column")
579-
val anotherColumn1: String,
580-
@ColumnName("my_column")
581-
val myColumn1: Int,
582-
@ColumnName("third-column")
583-
val thirdColumn1: Double
584-
)
585-
""".trimIndent()
523+
val expected = CodeGenerator.create(useFqNames = false).generate(
524+
schema = dfWithSpecialNames.schema(),
525+
name = "DataEntry",
526+
fields = true,
527+
extensionProperties = false,
528+
isOpen = false,
529+
asDataClass = true,
530+
visibility = MarkerVisibility.IMPLICIT_PUBLIC,
531+
fieldNameNormalizer = nameNormalizer,
532+
).code.declarations.toCodeString()
586533

587-
code.value shouldBe expected
534+
code shouldBe expected
588535
}
589536

590537
// endregion

0 commit comments

Comments
 (0)