From 0f2808227be055fb4603e7a0600a063a5756dfa0 Mon Sep 17 00:00:00 2001 From: Gilles Dubochet Date: Thu, 30 Sep 2010 10:08:20 +0000 Subject: [scaladoc] JavaScript template search uses a st... [scaladoc] JavaScript template search uses a statically built index to considerably increase performance. Contributed by Kato Kazuyoshi. Review by dubochet. --- test/scaladoc/html/page/IndexTest.scala | 96 +++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 test/scaladoc/html/page/IndexTest.scala (limited to 'test/scaladoc') diff --git a/test/scaladoc/html/page/IndexTest.scala b/test/scaladoc/html/page/IndexTest.scala new file mode 100644 index 0000000000..21b14d4bf0 --- /dev/null +++ b/test/scaladoc/html/page/IndexTest.scala @@ -0,0 +1,96 @@ +import org.scalacheck._ + +import scala.tools.nsc.doc +import scala.tools.nsc.doc.html.page.Index +import java.net.URLClassLoader + +object Test extends Properties("Index") { + val docFactory = { + val settings = new doc.Settings((s: String) => { + Console.err.println(s) + }) + settings.classpath.value = + Thread.currentThread.getContextClassLoader.asInstanceOf[URLClassLoader].getURLs.map(_.getPath).mkString(":") + + val reporter = new scala.tools.nsc.reporters.ConsoleReporter(settings) + + new doc.DocFactory(reporter, settings) + } + + val indexModelFactory = { + val settings = new doc.Settings((s: String) => { + Console.err.println(s) + }) + settings.classpath.value = + Thread.currentThread.getContextClassLoader.asInstanceOf[URLClassLoader].getURLs.map(_.getPath).mkString(":") + + val reporter = new scala.tools.nsc.reporters.ConsoleReporter(settings) + + new doc.model.IndexModelFactory + } + + def createIndex(path: String): Option[Index] = { + val maybeModel = { + val stream = new java.io.ByteArrayOutputStream + val original = Console.out + Console.setOut(stream) + + val result = docFactory.universe(List(path)) + + // assert(stream.toString == "model contains 2 documentable templates\n") + Console.setOut(original) + + result + } + + maybeModel match { + case Some(model) => { + val index = new Index(model, indexModelFactory.makeModel(model)) + return Some(index) + } + case _ => return None + } + } + + property("path") = { + createIndex("src/compiler/scala/tools/nsc/doc/html/page/Index.scala") match { + case Some(index) => + index.path == List("index.html") + case None => false + } + } + + property("title") = { + createIndex("src/compiler/scala/tools/nsc/doc/html/page/Index.scala") match { + case Some(index) => + index.title == "" + + case None => false + } + } + property("browser contants a script element") = { + createIndex("src/compiler/scala/tools/nsc/doc/html/page/Index.scala") match { + case Some(index) => + (index.browser \ "script").size == 1 + + case None => false + } + } + + property("allPackages") = { + createIndex("src/compiler/scala/tools/nsc/doc/html/page/Index.scala") match { + case Some(index) => { + index.allPackages.map(_.toString) == List( + "scala", + "scala.tools", + "scala.tools.nsc", + "scala.tools.nsc.doc", + "scala.tools.nsc.doc.html", + "scala.tools.nsc.doc.html.page" + ) + } + + case None => false + } + } +} \ No newline at end of file -- cgit v1.2.3