Skip to content

Commit

Permalink
add tests for nested configs
Browse files Browse the repository at this point in the history
  • Loading branch information
arainko committed Nov 18, 2023
1 parent 7a89fe2 commit 0fb8fa3
Show file tree
Hide file tree
Showing 10 changed files with 410 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ object ErrorMessage {
}

final case class NoChildFound(childName: String, destTpe: Type[?]) extends ErrorMessage {
def render(using Quotes): String = s"No child named '$childName found in ${destTpe.repr.show}"
def render(using Quotes): String = s"No child named '$childName' found in ${destTpe.repr.show}"
def span = None
val target = Target.Source
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,14 @@ final case class Path(root: Type[?], segments: Vector[Path.Segment]) { self =>

def render(using Quotes): String = {
import quotes.reflect.*
given Printer[TypeRepr] = Printer.TypeReprShortCode

val printedRoot = root.repr.widen.show
val printedRoot = root.repr.widen.show(using Printer.TypeReprShortCode)

if (self.segments.isEmpty) printedRoot
else
self.segments.map {
case Path.Segment.Field(_, name) => name
case Path.Segment.Case(tpe) => s"at[${tpe.repr.show}]"
case Path.Segment.Case(tpe) => s"at[${tpe.repr.show(using Printer.TypeReprAnsiCode)}]"
}.mkString(s"$printedRoot.", ".", "")
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
package io.github.arainko.ducktape

import munit.{ FunSuite, Location }
import munit.Compare

trait DucktapeSuite extends FunSuite {
def assertEachEquals[Source, Dest](head: Source, tail: Source*)(expected: Dest)(using Location, Compare[Source, Dest]) = {
(head :: tail.toList).foreach(actual => assertEquals(actual, expected))
}

transparent inline def assertFailsToCompile(inline code: String)(using Location) = {
assert(compiletime.testing.typeChecks(code), "Code snippet compiled despite expecting not to")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.github.arainko.ducktape.total.builder
package io.github.arainko.ducktape.total

import io.github.arainko.ducktape.*

Expand Down Expand Up @@ -28,7 +28,7 @@ class AppliedBuilderSuite extends DucktapeSuite {
.transform(Field.const(_.additionalArg, "const"))
"""
}(
"No field 'additionalArg' found in io.github.arainko.ducktape.total.builder.AppliedBuilderSuite.TestClass @ TestClassWithAdditionalList.additionalArg",
"No field 'additionalArg' found in io.github.arainko.ducktape.total.AppliedBuilderSuite.TestClass @ TestClassWithAdditionalList.additionalArg",
"Configuration is not valid since the provided type (java.lang.String) is not a subtype of scala.collection.immutable.List[scala.Predef.String] @ TestClassWithAdditionalList.additionalArg"
)
}
Expand All @@ -53,7 +53,7 @@ class AppliedBuilderSuite extends DucktapeSuite {
"""
}(
"Configuration is not valid since the provided type (scala.collection.immutable.List[scala.Int]) is not a subtype of scala.collection.immutable.List[scala.Predef.String] @ TestClassWithAdditionalList.additionalArg",
"No field 'additionalArg' found in io.github.arainko.ducktape.total.builder.AppliedBuilderSuite.TestClass @ TestClassWithAdditionalList.additionalArg"
"No field 'additionalArg' found in io.github.arainko.ducktape.total.AppliedBuilderSuite.TestClass @ TestClassWithAdditionalList.additionalArg"
)
}

Expand All @@ -76,7 +76,7 @@ class AppliedBuilderSuite extends DucktapeSuite {
.transform(Field.renamed(_.additionalArg, _.int))
"""
}(
"No field 'additionalArg' found in io.github.arainko.ducktape.total.builder.AppliedBuilderSuite.TestClass @ TestClassWithAdditionalString.additionalArg",
"No field 'additionalArg' found in io.github.arainko.ducktape.total.AppliedBuilderSuite.TestClass @ TestClassWithAdditionalString.additionalArg",
"Configuration is not valid since the provided type (scala.Int) is not a subtype of java.lang.String @ TestClassWithAdditionalString.additionalArg"
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package io.github.arainko.ducktape.total.builder
package io.github.arainko.ducktape.total

import io.github.arainko.ducktape.*
import io.github.arainko.ducktape.total.builder.AppliedViaBuilderSuite.*
import io.github.arainko.ducktape.total.AppliedViaBuilderSuite.*

import scala.annotation.nowarn

Expand Down Expand Up @@ -74,7 +74,7 @@ class AppliedViaBuilderSuite extends DucktapeSuite {
.intoVia(method)
.transform()
"""
}("No field 'additionalArg' found in io.github.arainko.ducktape.total.builder.AppliedViaBuilderSuite.TestClass @ TestClassWithAdditionalString.additionalArg")
}("No field 'additionalArg' found in io.github.arainko.ducktape.total.AppliedViaBuilderSuite.TestClass @ TestClassWithAdditionalString.additionalArg")
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package io.github.arainko.ducktape.total.builder
package io.github.arainko.ducktape.total

import io.github.arainko.*
import io.github.arainko.ducktape.*
import io.github.arainko.ducktape.total.builder.DefinitionViaBuilderSuite.*
import io.github.arainko.ducktape.total.DefinitionViaBuilderSuite.*
import munit.*

class DefinitionViaBuilderSuite extends DucktapeSuite {
Expand Down Expand Up @@ -93,7 +93,7 @@ class DefinitionViaBuilderSuite extends DucktapeSuite {
.defineVia[TestClass](method)
.build()
"""
}("No field 'additionalArg' found in io.github.arainko.ducktape.total.builder.DefinitionViaBuilderSuite.TestClass @ TestClassWithAdditionalString.additionalArg")
}("No field 'additionalArg' found in io.github.arainko.ducktape.total.DefinitionViaBuilderSuite.TestClass @ TestClassWithAdditionalString.additionalArg")
}

}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.github.arainko.ducktape.total.derivation
package io.github.arainko.ducktape.total

import io.github.arainko.ducktape.*
import io.github.arainko.ducktape.model.*
Expand Down Expand Up @@ -356,7 +356,7 @@ class DerivedTransformerSuite extends DucktapeSuite {
}

assertFailsToCompileWith("summon[Transformer.Derived[Sum1, Sum2]]") {
"No field 'str1' found in Sum1.Leaf1 @ Sum2.at[Leaf1].str1"
"No field 'str1' found in Sum1.Leaf1 @ Sum2.at[Sum2.Leaf1].str1"
}
}

Expand All @@ -372,6 +372,6 @@ class DerivedTransformerSuite extends DucktapeSuite {
}

test("derivation fails when going from a sum with more cases to a sum with less cases") {
assertFailsToCompileWith("MoreCases.Case3.to[LessCases]")("No child named 'Case4 found in io.github.arainko.ducktape.total.derivation.DerivedTransformerSuite.LessCases @ MoreCases.at[Case4]")
assertFailsToCompileWith("MoreCases.Case3.to[LessCases]")("No child named 'Case4 found in io.github.arainko.ducktape.total.DerivedTransformerSuite.LessCases @ MoreCases.at[io.github.arainko.ducktape.total.DerivedTransformerSuite.MoreCases.Case4]")
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package io.github.arainko.ducktape.total

import io.github.arainko.ducktape.DucktapeSuite

class ErrorReportingSuite extends DucktapeSuite {

}
Loading

0 comments on commit 0fb8fa3

Please sign in to comment.