def genericRecordOf()

in ratatool-scalacheck/src/main/scala/com/spotify/ratatool/scalacheck/AvroGenerator.scala [78:128]


  def genericRecordOf(schema: Schema): Gen[GenericRecord] =
    avroValueOf(schema)(GenericData.get()).asInstanceOf[Gen[GenericRecord]]

  def genericRecordOf(schema: Schema, stringableGens: Map[Class[_], Gen[_]]): Gen[GenericRecord] =
    avroValueOf(schema)(GenericData.get(), stringableGens).asInstanceOf[Gen[GenericRecord]]

  /** Aliases for API consistency across formats */
  def avroOf[A <: SpecificRecord: ClassTag]: Gen[A] =
    specificRecordOf[A]
  def avroOf[A <: SpecificRecord: ClassTag](stringableGens: Map[Class[_], Gen[_]]): Gen[A] =
    specificRecordOf[A](stringableGens)
  def avroOf(schema: Schema): Gen[GenericRecord] =
    genericRecordOf(schema)
  def avroOf(schema: Schema, stringableGens: Map[Class[_], Gen[_]]): Gen[GenericRecord] =
    genericRecordOf(schema, stringableGens)

  /**
   * Arbitrary [0-39] range and directly creating Utf-8 chosen to mimic [[RandomData]]. Also avoids
   * some ser/de issues with IndexOutOfBounds decoding with CoderUtils & Kryo
   */
  private def boundedLengthGen: Gen[Int] = Gen.chooseNum(0, 39)

  private val genString: Gen[String] = Gen.oneOf(
    Gen.oneOf(" ", "", "foo"),
    Arbitrary.arbString.arbitrary
  )

  private def genStringable(
    javaClass: String
  )(implicit stringableGens: Map[Class[_], Gen[_]]): Gen[Any] = {
    val clazz = Class.forName(javaClass)
    stringableGens.get(clazz) match {
      case Some(gen) => gen
      case None =>
        val ctor = clazz.getDeclaredConstructor(classOf[String])
        ctor.setAccessible(true)
        genString.map { str =>
          try {
            ctor.newInstance(str)
          } catch {
            case e: Throwable =>
              logger.error(
                "Failed constructing instance of {} from random string. " +
                  "Consider providing a custom generator in stringableGens",
                clazz.getName
              )
              throw e
          }
        }
    }
  }