diff --git a/src/examples/show.scala b/src/examples/show.scala index 4efa9b9c..a2480e04 100644 --- a/src/examples/show.scala +++ b/src/examples/show.scala @@ -6,7 +6,7 @@ import magnolia1._ * * Note that this is a more general form of `Show` than is usual, as it permits the return type to be something other than a string. */ -trait Show[Out, T] { def show(value: T): Out } +trait Show[Out, T] extends Serializable { def show(value: T): Out } trait GenericShow[Out] extends AutoDerivation[[X] =>> Show[Out, X]] { diff --git a/src/test/SerializationTests.scala b/src/test/SerializationTests.scala new file mode 100644 index 00000000..427b05b1 --- /dev/null +++ b/src/test/SerializationTests.scala @@ -0,0 +1,43 @@ +package magnolia1.tests + +import magnolia1.* +import magnolia1.examples.* + +import java.io.* +class SerializationTests extends munit.FunSuite: + import SerializationTests.* + + private def serializeToByteArray(value: Serializable): Array[Byte] = + val buffer = new ByteArrayOutputStream() + val oos = new ObjectOutputStream(buffer) + oos.writeObject(value) + buffer.toByteArray + + private def deserializeFromByteArray(encodedValue: Array[Byte]): AnyRef = + val ois = new ObjectInputStream(new ByteArrayInputStream(encodedValue)) + ois.readObject() + + def ensureSerializable[T <: Serializable](value: T): T = + deserializeFromByteArray(serializeToByteArray(value)).asInstanceOf[T] + + test("generate serializable type-classes") { + ensureSerializable(new Outer().showAddress) + ensureSerializable(new Outer().showColor) + } + +object SerializationTests: + sealed trait Entity + case class Company(name: String) extends Entity + case class Person(name: String, age: Int) extends Entity + case class Address(line1: String, occupant: Person) + + sealed trait Color + case object Red extends Color + case object Green extends Color + case object Blue extends Color + case object Orange extends Color + case object Pink extends Color + class Outer: + val showAddress: Show[String, Address] = summon[Show[String, Address]] + val showColor: Show[String, Color] = summon[Show[String, Color]] +