import scala.tools.nsc.doc.base._
import scala.tools.nsc.doc.model._
import scala.tools.partest.ScaladocModelTest
object Test extends ScaladocModelTest {
override def resourceFile = "SI-3314.scala"
// no need for special settings
def scaladocSettings = "-feature"
def testModel(rootPackage: Package) = {
// get the quick access implicit defs in scope (_package(s), _class(es), _trait(s), object(s) _method(s), _value(s))
import access._
// just need to check the member exists, access methods will throw an error if there's a problem
val base = rootPackage._package("scala")._package("test")._package("scaladoc")
// test1
val test1 = base._package("test1")
val test1Value = test1._class("Enum")._method("Value").resultType
assert(test1Value.name == "Value", test1Value.name + " == Value")
assert(test1Value.refEntity.size == 1, test1Value.refEntity.size + " == 1")
val test1Constants = test1._object("Constants")._method("a").resultType
assert(test1Constants.name == "Value", test1Constants.name + " == Value")
assert(test1Constants.refEntity.size == 1, test1Constants.refEntity.size + " == 1")
assert(test1Constants.refEntity(0)._1 == LinkToMember(test1._object("Constants")._class("Value"), test1._object("Constants")),
test1Constants.refEntity(0)._1 + " == LinkToMember(test1.Enum.Value)")
// test2
val test2 = base._package("test2")
def testDefinition(doc: DocTemplateEntity) = {
for (day <- List("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")) {
assert(doc._value(day).resultType.name == "Value",
doc._value(day).resultType.name + " == Value")
assert(doc._value(day).resultType.refEntity.size == 1,
doc._value(day).resultType.refEntity.size + " == 1")
assert(doc._value(day).resultType.refEntity(0)._1 == LinkToMember(doc._classMbr("Value"), doc),
doc._value(day).resultType.refEntity(0)._1 + " == LinkToMember(" + doc.qualifiedName + ".Value)")
}
}
testDefinition(test2._trait("WeekDayTrait"))
testDefinition(test2._class("WeekDayClass"))
testDefinition(test2._object("WeekDayObject"))
def testUsage(doc: DocTemplateEntity) = {
val ValueInClass = test2._class("WeekDayClass")._classMbr("Value")
val ValueInTrait = test2._trait("WeekDayTrait")._classMbr("Value")
val ValueInObject = test2._object("WeekDayObject")._classMbr("Value")
val WeekDayInObject = test2._object("WeekDayObject")._member("WeekDay")
val expected = List(
("isWorkingDay1", "WeekDayClass.Value", ValueInClass),
("isWorkingDay2", "WeekDayClass.Value", ValueInClass),
("isWorkingDay3", "WeekDayTrait.Value", ValueInTrait),
("isWorkingDay4", "WeekDayTrait.Value", ValueInTrait),
("isWorkingDay5", "WeekDayObject.Value", ValueInObject),
("isWorkingDay6", "WeekDay", WeekDayInObject),
("isWorkingDay7", "WeekDayObject.Value", ValueInObject),
("isWorkingDay8", "WeekDay", WeekDayInObject),
("isWorkingDay9", "WeekDayObject.Value", ValueInObject))
for ((method, name, ref) <- expected) {
assert(doc._method(method).valueParams(0)(0).resultType.name == name,
doc._method(method).valueParams(0)(0).resultType.name + " == " + name + " (in " + doc + "." + method + ")")
assert(doc._method(method).valueParams(0)(0).resultType.refEntity.size == 1,
doc._method(method).valueParams(0)(0).resultType.refEntity.size + " == " + 1 + " (in " + doc + "." + method + ")")
assert(doc._method(method).valueParams(0)(0).resultType.refEntity(0)._1 == LinkToMember(ref, ref.inTemplate),
doc._method(method).valueParams(0)(0).resultType.refEntity(0)._1 + " == LinkToMember(" + ref.qualifiedName + ") (in " + doc + "." + method + ")")
}
}
testUsage(test2._object("UserObject"))
testUsage(test2._class("UserClass"))
testUsage(test2._trait("UserTrait"))
// test3
val test3 = base._package("test3")
val foo = test3._method("foo")
assert(foo.valueParams(0)(0).resultType.name == "T",
foo.valueParams(0)(0).resultType.name + " == T")
val bar = test3._method("bar")
assert(bar.valueParams(0)(0).resultType.name == "(AnyRef { type Lambda[X] <: Either[A,X] })#Lambda[String]",
bar.valueParams(0)(0).resultType.name + " == (AnyRef { type Lambda[X] <: Either[A,X] })#Lambda[String]")
}
}