blob: 7dbd2103a61ec3f82a30393ed412783b9515574c (
plain) (
tree)
|
|
import org.scalacheck._
import org.scalacheck.Prop._
import scala.tools.nsc.doc
import scala.tools.nsc.doc.html.page.Index
import java.net.{URLClassLoader, URLDecoder}
object Test extends Properties("Index") {
def getClasspath = {
// these things can be tricky
// this test previously relied on the assumption that the current thread's classloader is an url classloader and contains all the classpaths
// does partest actually guarantee this? to quote Leonard Nimoy: The answer, of course, is no.
// this test _will_ fail again some time in the future.
// Footnote: java.lang.ClassCastException: org.apache.tools.ant.loader.AntClassLoader5 cannot be cast to java.net.URLClassLoader
val loader = Thread.currentThread.getContextClassLoader.asInstanceOf[URLClassLoader]
val paths = loader.getURLs.map(u => URLDecoder.decode(u.getPath))
paths mkString java.io.File.pathSeparator
}
val docFactory = {
val settings = new doc.Settings({Console.err.println(_)})
settings.scaladocQuietRun = true
settings.nowarn.value = true
settings.classpath.value = getClasspath
val reporter = new scala.tools.nsc.reporters.ConsoleReporter(settings)
new doc.DocFactory(reporter, settings)
}
val indexModelFactory = doc.model.IndexModelFactory
def createIndex(path: String): Option[Index] = {
val maybeUniverse = {
//val stream = new java.io.ByteArrayOutputStream
//val original = Console.out
//Console.setOut(stream)
val result = docFactory.makeUniverse(Left(List(path)))
// assert(stream.toString == "model contains 2 documentable templates\n")
//Console.setOut(original)
result
}
maybeUniverse match {
case Some(universe) => {
val index = new Index(universe, indexModelFactory.makeIndex(universe))
return Some(index)
}
case _ => return None
}
}
property("path") = {
createIndex("src/scaladoc/scala/tools/nsc/doc/html/page/Index.scala") match {
case Some(index) =>
index.path == List("index.html")
case None => false
}
}
property("title") = {
createIndex("src/scaladoc/scala/tools/nsc/doc/html/page/Index.scala") match {
case Some(index) =>
index.title == ""
case None => false
}
}
property("browser contains a script element") = {
createIndex("src/scaladoc/scala/tools/nsc/doc/html/page/Index.scala") match {
case Some(index) =>
(index.browser \ "script").size == 1
case None => false
}
}
property("package objects in index") = {
createIndex("test/scaladoc/resources/SI-5558.scala") match {
case Some(index) =>
index.index.firstLetterIndex('f') isDefinedAt "foo"
case None => false
}
}
property("index should report if there are deprecated members") = {
createIndex("test/scaladoc/resources/SI-4476.scala") match {
case Some(indexPage) => indexPage.index.hasDeprecatedMembers
case None => false
}
}
}
|