@@ -9,6 +9,7 @@ import fs2.Stream
9
9
import org .http4s .rho .swagger .models .AbstractProperty
10
10
import org .specs2 .execute .Result
11
11
import org .specs2 .mutable .Specification
12
+ import shapeless .{:+: , CNil }
12
13
13
14
import scala .reflect .runtime .universe .{TypeTag , typeOf , typeTag }
14
15
@@ -52,6 +53,13 @@ package object model {
52
53
sealed trait LowerLevelSealedTrait extends TopLevelSealedTrait
53
54
case class Value2 () extends LowerLevelSealedTrait
54
55
case class Value3 () extends LowerLevelSealedTrait
56
+
57
+ trait Outer [T ]{
58
+ case class Inner (t : T )
59
+ }
60
+ object OuterInt extends Outer [Int ]
61
+
62
+ type ShapelessIntOrString = Int :+: String :+: CNil
55
63
}
56
64
57
65
class TypeBuilderSpec extends Specification {
@@ -401,6 +409,22 @@ class TypeBuilderSpec extends Specification {
401
409
modelOf[FooEither ] must not(throwA[StackOverflowError ])
402
410
modelOf[FooEither ].size must_== 1
403
411
}
412
+
413
+ " Build a model for a class using type parameters of an outer class" in {
414
+ val ms = modelOf[OuterInt .Inner ]
415
+ ms.size must_== 1
416
+ val m = ms.head
417
+ val t = m.properties.get(" t" )
418
+ t should not be empty
419
+ t.get.`type` must_== " integer"
420
+ t.get.format must beSome(" int32" )
421
+ }
422
+
423
+ " Build a model for shapless coproduct (:+:)" in {
424
+ val ms = modelOf[ShapelessIntOrString ]
425
+ ms.size must_!== 0
426
+ // It won't be a fully correct model.
427
+ }
404
428
}
405
429
406
430
" DataType" should {
0 commit comments