// TODO: muted automatically, investigate should it be ran for JS or not // IGNORE_BACKEND: JS // WITH_REFLECT import kotlin.reflect.createInstance import kotlin.test.assertTrue import kotlin.test.fail // Good classes class Simple class PrimaryWithDefaults(val d1: String = "d1", val d2: Int = 2) class Secondary(val s: String) { constructor() : this("s") } class SecondaryWithDefaults(val s: String) { constructor(x: Int = 0) : this(x.toString()) } class SecondaryWithDefaultsNoPrimary { constructor(x: Int) {} constructor(s: String = "") {} } // Bad classes class NoNoArgConstructor(val s: String) { constructor(x: Int) : this(x.toString()) } class NoArgAndDefault() { constructor(x: Int = 0) : this() } class DefaultPrimaryAndDefaultSecondary(val s: String = "") { constructor(x: Int = 0) : this(x.toString()) } class SeveralDefaultSecondaries { constructor(x: Int = 0) {} constructor(s: String = "") {} constructor(d: Double = 3.14) {} } class PrivateConstructor private constructor() object Object // ----------- inline fun test() { val instance = T::class.createInstance() assertTrue(instance is T) } inline fun testFail() { try { T::class.createInstance() fail("createInstance should have failed on ${T::class}") } catch (e: Exception) { // OK } } fun box(): String { test() test() test() test() test() test() testFail() testFail() testFail() testFail() testFail() testFail() return "OK" }