|
| 1 | +package dotty.dokka.diagram |
| 2 | + |
| 3 | +import dotty.dokka.ScaladocTest |
| 4 | +import dotty.dokka.Assertion.AfterDocumentablesTransformation |
| 5 | +import dotty.dokka.kUnit |
| 6 | +import dotty.dokka.model.api._ |
| 7 | +import scala.jdk.CollectionConverters.{ListHasAsScala, SeqHasAsJava} |
| 8 | +import org.junit.Assert.{assertSame, assertTrue, assertEquals} |
| 9 | + |
| 10 | +class HierarchyTest extends ScaladocTest("hierarchy"): |
| 11 | + override def assertions = Seq( |
| 12 | + AfterDocumentablesTransformation { m => |
| 13 | + m.visitMembers { x => |
| 14 | + if (x.getName == "C1") { |
| 15 | + assertEquals(List("A1", "A2[Int]", "A3[Int, String]", "Any", "B1", "B2", "B3", "Object"), x.getParentsAsStrings) |
| 16 | + assertEquals(List("B1", "B2", "B3"), x.getDirectParentsAsStrings) |
| 17 | + assertEquals(List("E1", "E2"), x.getKnownChildrenAsStrings) |
| 18 | + val graph = MemberExtension.getFrom(x).map(_.graph) |
| 19 | + assertTrue("Graph is empty!", graph.isDefined) |
| 20 | + assertEquals( |
| 21 | + Set( |
| 22 | + "Object" -> "Any", |
| 23 | + "A1" -> "Object", |
| 24 | + "A2[Int]" -> "Object", |
| 25 | + "A3[Int, String]" -> "Object", |
| 26 | + "B1" -> "Object", |
| 27 | + "B1" -> "A1", |
| 28 | + "B2" -> "Object", |
| 29 | + "B2" -> "A1", |
| 30 | + "B2" -> "A2[Int]", |
| 31 | + "B3" -> "Object", |
| 32 | + "B3" -> "A2[Int]", |
| 33 | + "B3" -> "A3[Int, String]", |
| 34 | + "C1[A, B, C]" -> "Object", |
| 35 | + "C1[A, B, C]" -> "B1", |
| 36 | + "C1[A, B, C]" -> "B2", |
| 37 | + "C1[A, B, C]" -> "B3", |
| 38 | + "E1" -> "C1[A, B, C]", |
| 39 | + "E2" -> "C1[A, B, C]" |
| 40 | + ), |
| 41 | + graph.get.edges.map((a, b) => (a.signature.getName, b.signature.getName)).toSet |
| 42 | + ) |
| 43 | + } |
| 44 | + if (x.getName == "E2") { |
| 45 | + assertEquals(List("A1", "A2[Int]", "A3[Int, String]", "Any", "B1", "B2", "B3", "C1[Int, Boolean, Any]", "D2[Int, Boolean]", "D3", "Object"), x.getParentsAsStrings) |
| 46 | + assertEquals(List("C1[Int, Boolean, Any]", "D2[Int, Boolean]", "D3"), x.getDirectParentsAsStrings) |
| 47 | + assertEquals(List.empty, x.getKnownChildrenAsStrings) |
| 48 | + val graph = MemberExtension.getFrom(x).map(_.graph) |
| 49 | + assertTrue("Graph is empty!", graph.isDefined) |
| 50 | + assertEquals( |
| 51 | + Set( |
| 52 | + "Object" -> "Any", |
| 53 | + // "A1" -> "Object", // These are not applicable beacuase of bug and its workaround |
| 54 | + // "A2[Int]" -> "Object", // More info at ClassLikeSupport.scala:37 |
| 55 | + // "A3[Int, String]" -> "Object", |
| 56 | + // "B1" -> "Object", |
| 57 | + // "B1" -> "A1", |
| 58 | + // "B2" -> "Object", |
| 59 | + // "B2" -> "A1", |
| 60 | + // "B2" -> "A2[Int]", |
| 61 | + // "B3" -> "Object", |
| 62 | + // "B3" -> "A2[Int]", |
| 63 | + // "B3" -> "A3[Int, String]", |
| 64 | + // "C1[Int, Boolean, Any]" -> "Object", |
| 65 | + // "C1[Int, Boolean, Any]" -> "B1", |
| 66 | + // "C1[Int, Boolean, Any]" -> "B2", |
| 67 | + // "C1[Int, Boolean, Any]" -> "B3", |
| 68 | + "E2" -> "D2[Int, Boolean]", |
| 69 | + "E2" -> "D3", |
| 70 | + "D2[Int, Boolean]" -> "Object", |
| 71 | + "D3" -> "Object", |
| 72 | + "E2" -> "C1[Int, Boolean, Any]" |
| 73 | + ), |
| 74 | + graph.get.edges.map((a, b) => (a.signature.getName, b.signature.getName)).toSet |
| 75 | + ) |
| 76 | + } |
| 77 | + if (x.getName == "A2") { |
| 78 | + assertEquals(List("Any", "Object"), x.getParentsAsStrings) |
| 79 | + assertEquals(List.empty, x.getDirectParentsAsStrings) |
| 80 | + assertEquals(List("B2", "B3", "C1[A, B, C]", "E1", "E2"), x.getKnownChildrenAsStrings) |
| 81 | + val graph = MemberExtension.getFrom(x).map(_.graph) |
| 82 | + assertTrue("Graph is empty!", graph.isDefined) |
| 83 | + assertEquals( |
| 84 | + Set( |
| 85 | + "Object" -> "Any", |
| 86 | + "A2[T]" -> "Object", |
| 87 | + "B2" -> "A2[T]", // These are not actually true, becuase we lose information about hierarchy in subtypes and their possible mapping to supertypes other that that type itself, e. g. linking to `Object` |
| 88 | + "B3" -> "A2[T]", |
| 89 | + "C1[A, B, C]" -> "A2[T]", |
| 90 | + "E1" -> "A2[T]", |
| 91 | + "E2" -> "A2[T]" |
| 92 | + ), |
| 93 | + graph.get.edges.map((a, b) => (a.signature.getName, b.signature.getName)).toSet |
| 94 | + ) |
| 95 | + } |
| 96 | + } |
| 97 | + } |
| 98 | + ) |
0 commit comments