diff options
Diffstat (limited to 'test/scaladoc/scalacheck')
-rw-r--r-- | test/scaladoc/scalacheck/CommentFactoryTest.scala | 187 | ||||
-rw-r--r-- | test/scaladoc/scalacheck/DeprecatedIndexTest.scala | 50 | ||||
-rw-r--r-- | test/scaladoc/scalacheck/HtmlFactoryTest.flags | 1 | ||||
-rw-r--r-- | test/scaladoc/scalacheck/HtmlFactoryTest.scala | 817 | ||||
-rw-r--r-- | test/scaladoc/scalacheck/IndexScriptTest.scala | 58 | ||||
-rw-r--r-- | test/scaladoc/scalacheck/IndexTest.scala | 95 |
6 files changed, 0 insertions, 1208 deletions
diff --git a/test/scaladoc/scalacheck/CommentFactoryTest.scala b/test/scaladoc/scalacheck/CommentFactoryTest.scala deleted file mode 100644 index d30b78087c..0000000000 --- a/test/scaladoc/scalacheck/CommentFactoryTest.scala +++ /dev/null @@ -1,187 +0,0 @@ -import org.scalacheck._ -import org.scalacheck.Prop._ - -import scala.tools.nsc.Global -import scala.tools.nsc.doc -import scala.tools.nsc.doc.base.comment._ -import scala.tools.nsc.doc.model._ -import scala.tools.nsc.doc.model.diagram._ - -class Factory(val g: Global, val s: doc.Settings) - extends doc.model.ModelFactory(g, s) { - thisFactory: Factory - with ModelFactoryImplicitSupport - with ModelFactoryTypeSupport - with DiagramFactory - with CommentFactory - with doc.model.TreeFactory - with MemberLookup => - - def strip(c: Comment): Option[Inline] = { - c.body match { - case Body(List(Paragraph(Chain(List(Summary(inner)))))) => Some(inner) - case _ => None - } - } - - def getComment(s: String): Comment = - parse(s, "", scala.tools.nsc.util.NoPosition, null) - - def parseComment(s: String): Option[Inline] = - strip(getComment(s)) - - def createBody(s: String) = - parse(s, "", scala.tools.nsc.util.NoPosition, null).body -} - -object Test extends Properties("CommentFactory") { - val factory = { - val settings = new doc.Settings((str: String) => {}) - val reporter = new scala.tools.nsc.reporters.ConsoleReporter(settings) - val g = new Global(settings, reporter) - (new Factory(g, settings) - with ModelFactoryImplicitSupport - with ModelFactoryTypeSupport - with DiagramFactory - with CommentFactory - with doc.model.TreeFactory - with MemberLookup) - } - - def parse(src: String, dst: Inline): Boolean = { - factory.parseComment(src) match { - case Some(inline) => - inline == dst - case _ => - false - } - } - - property("parse") = parse( - "/** One two three */", - Text("One two three") - ) - property("parse") = parse( - "/** One `two` three */", - Chain(List(Text("One "), Monospace(Text("two")), Text(" three"))) - ) - - property("parse") = parse( - """ -/** One two - * three */""", - Text("One two\nthree") - ) - property("parse") = parse( - """ -/** One `two` - * three */""", - Chain(List(Text("One "), Monospace(Text("two")), Text("\n"), Text("three"))) - ) - - property("parse") = parse( - """ -/** One `two` - * three */""", - Chain(List(Text("One "), Monospace(Text("two")), Text("\n"), Text(" three"))) - ) - - property("parse") = parse( - """ -/** One - * `two` three */""", - Chain(List(Text("One"), Text("\n"), Monospace(Text("two")), Text(" three"))) - ) - - property("Trac #4361 - ^...^") = parse( - """ -/** - * hello ^world^ */""", - Chain(List(Text("hello "), Superscript(Text("world")))) - ) - - property("Trac #4361 - single ^ symbol") = parse( - """ -/** - * <pre> - * hello ^world - * </pre> - * - */""", - Chain(List(Text(""), Text("\n"), - - - HtmlTag("<pre>\nhello ^world\n</pre>"))) - ) - - property("Trac #4366 - body") = { - val body = factory.createBody( - """ - /** - * <strong><code>foo</code> has been deprecated and will be removed in a future version. Please call <code>bar</code> instead.</strong> - */ - """ - ) - - body == Body(List(Paragraph(Chain(List( - Summary(Chain(List(HtmlTag("<strong><code>foo</code> has been deprecated and will be removed in a future version. Please call <code>bar</code> instead.</strong>"), Text("\n"), Text("")))) - ))))) - } - - property("Trac #4366 - summary") = { - val body = factory.createBody( - """ - /** - * <strong><code>foo</code> has been deprecated and will be removed in a future version. Please call <code>bar</code> instead.</strong> - */ - """ - ) - body.summary == Some(Chain(List(HtmlTag("<strong><code>foo</code> has been deprecated and will be removed in a future version. Please call <code>bar</code> instead.</strong>"), Text("\n"), Text("")))) - } - - property("Trac #4358 - body") = { - factory.createBody( - """ - /** - * Implicit conversion that invokes the <code>expect</code> method on the <code>EasyMock</code> companion object (<em>i.e.</em>, the - * static <code>expect</code> method in Java class <code>org.easymock.EasyMock</code>). - */ - """ - ) match { - case Body(List(Paragraph(Chain(List(Summary(Chain(List(Chain(List( - Text("Implicit conversion that invokes the "), - HtmlTag("<code>expect</code>"), - Text(" method on the "), - HtmlTag("<code>EasyMock</code>"), - Text(" companion object ("), - HtmlTag("<em>i.e.</em>"), - Text(", the\nstatic "), - HtmlTag("<code>expect</code>"), - Text(" method in Java class "), - HtmlTag("<code>org.easymock.EasyMock</code>"), - Text(")") - )), Text(".")))), Text("\n")))))) => - true - case other => { - println(other) - false - } - } - } - - property("Empty parameter text should be empty") = { - // used to fail with - // body == Body(List(Paragraph(Chain(List(Summary(Text('\n'))))))) - factory.getComment( - """ -/** - * @deprecated - */ - """).deprecated match { - case Some(Body(l)) if l.isEmpty => true - case other => - println(other) - false - } - } -} diff --git a/test/scaladoc/scalacheck/DeprecatedIndexTest.scala b/test/scaladoc/scalacheck/DeprecatedIndexTest.scala deleted file mode 100644 index 4a5a2001d4..0000000000 --- a/test/scaladoc/scalacheck/DeprecatedIndexTest.scala +++ /dev/null @@ -1,50 +0,0 @@ -import org.scalacheck._ -import org.scalacheck.Prop._ - -import scala.tools.nsc.doc -import scala.tools.nsc.doc.html.page.DeprecatedIndex -import java.net.{URLClassLoader, URLDecoder} - -object Test extends Properties("IndexScript") { - - 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 createDeprecatedScript(path: String) = - docFactory.makeUniverse(Left(List(path))) match { - case Some(universe) => { - val index = new DeprecatedIndex(universe, indexModelFactory.makeIndex(universe)) - Some(index) - } - case _ => - None - } - - property("deprecated-list page lists deprecated members") = { - createDeprecatedScript("test/scaladoc/resources/SI-4476.scala") match { - case Some(p) => - p.deprecatedEntries.find(_._1 == "A").isDefined && - p.deprecatedEntries.find(_._1 == "bar").isDefined - case None => false - } - } -} diff --git a/test/scaladoc/scalacheck/HtmlFactoryTest.flags b/test/scaladoc/scalacheck/HtmlFactoryTest.flags deleted file mode 100644 index b2264ec4f4..0000000000 --- a/test/scaladoc/scalacheck/HtmlFactoryTest.flags +++ /dev/null @@ -1 +0,0 @@ --encoding UTF-8
\ No newline at end of file diff --git a/test/scaladoc/scalacheck/HtmlFactoryTest.scala b/test/scaladoc/scalacheck/HtmlFactoryTest.scala deleted file mode 100644 index 578e0382eb..0000000000 --- a/test/scaladoc/scalacheck/HtmlFactoryTest.scala +++ /dev/null @@ -1,817 +0,0 @@ -import org.scalacheck._ -import org.scalacheck.Prop._ - -import java.net.{URLClassLoader, URLDecoder} -import scala.collection.mutable -import scala.xml.NodeSeq - -object XMLUtil { - import scala.xml._ - - def stripGroup(seq: Node): Node = { - seq match { - case group: Group => { - <div class="group">{ group.nodes.map(stripGroup _) }</div> - } - case e: Elem => { - val child = e.child.map(stripGroup _) - Elem(e.prefix, e.label, e.attributes, e.scope, child : _*) - } - case _ => seq - } - } -} - -object Test extends Properties("HtmlFactory") { - - final val RESOURCES = "test/scaladoc/resources/" - - import scala.tools.nsc.doc.{DocFactory, Settings} - import scala.tools.nsc.doc.model.IndexModelFactory - import scala.tools.nsc.doc.html.HtmlFactory - import scala.tools.nsc.doc.html.page.ReferenceIndex - - 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 - } - - def createFactory = { - val settings = new Settings({Console.err.println(_)}) - settings.scaladocQuietRun = true - settings.nowarn.value = true - settings.classpath.value = getClasspath - settings.docAuthor.value = true - - val reporter = new scala.tools.nsc.reporters.ConsoleReporter(settings) - new DocFactory(reporter, settings) - } - - def createTemplates(basename: String): collection.Map[String, NodeSeq] = { - val result = mutable.Map[String, NodeSeq]() - - createFactory.makeUniverse(Left(List(RESOURCES+basename))) match { - case Some(universe) => { - val index = IndexModelFactory.makeIndex(universe) - (new HtmlFactory(universe, index)).writeTemplates((page) => { - result += (page.absoluteLinkTo(page.path) -> page.body) - }) - } - case _ => - } - - result - } - - def createReferenceIndex(basename: String) = { - createFactory.makeUniverse(Left(List(RESOURCES+basename))) match { - case Some(universe) => { - val index = IndexModelFactory.makeIndex(universe) - val pages = index.firstLetterIndex.map({ - case (key, value) => { - val page = new ReferenceIndex(key, index, universe) - page.absoluteLinkTo(page.path) -> page.body - } - }) - Some(pages) - } - case _ => - None - } - } - - def createTemplate(scala: String) = { - val html = scala.stripSuffix(".scala") + ".html" - createTemplates(scala)(html) - } - - /** - * This tests the text without the markup - ex: - * - * <h4 class="signature"> - * <span class="modifier_kind"> - * <span class="modifier">implicit</span> - * <span class="kind">def</span> - * </span> - * <span class="symbol"> - * <span class="name">test</span><span class="params">()</span><span class="result">: <span name="scala.Int" class="extype">Int</span></span> - * </span> - * </h4> - * - * becomes: - * - * implicit def test(): Int - * - * and is required to contain the text in the given checks - * - * NOTE: Comparison is done ignoring all whitespace - */ - def checkText(scalaFile: String, debug: Boolean = true)(checks: (Option[String], String, Boolean)*): Boolean = { - val htmlFile = scalaFile.stripSuffix(".scala") + ".html" - val htmlAllFiles = createTemplates(scalaFile) - var result = true - - for ((fileHint, check, expected) <- checks) { - // resolve the file to be checked - val fileName = fileHint match { - case Some(file) => - if (file endsWith ".html") - file - else - file + ".html" - case None => - htmlFile - } - val fileTextPretty = htmlAllFiles(fileName).text.replace('→',' ').replaceAll("\\s+"," ") - val fileText = fileTextPretty.replaceAll(" ", "") - - val checkTextPretty = check.replace('→',' ').replaceAll("\\s+"," ") - val checkText = checkTextPretty.replaceAll(" ", "") - - val checkValue = fileText.contains(checkText) == expected - if (debug && (!checkValue)) { - Console.err.println("") - Console.err.println("HTML Check failed for resource file " + scalaFile + ":") - Console.err.println("Could not match: \n" + checkTextPretty) - Console.err.println("In the extracted HTML text: \n" + fileTextPretty) - Console.err.println("NOTE: The whitespaces are eliminated before matching!") - Console.err.println("") - } - result &&= checkValue - } - - result - } - - def shortComments(root: scala.xml.Node) = - XMLUtil.stripGroup(root).descendant.flatMap { - case e: scala.xml.Elem => { - if (e.attribute("class").toString.contains("shortcomment")) { - Some(e) - } else { - None - } - } - case _ => None - } - - property("Trac #3790") = { - createTemplate("Trac3790.scala") match { - case node: scala.xml.Node => { - val comments = shortComments(node) - - comments.exists { _.toString.contains(">A lazy String\n</p>") } && - comments.exists { _.toString.contains(">A non-lazy String\n</p>") } - } - case _ => false - } - } - - property("Trac #4306") = { - val files = createTemplates("Trac4306.scala") - files("com/example/trac4306/foo/package$$Bar.html") != None - } - - property("Trac #4366") = { - createTemplate("Trac4366.scala") match { - case node: scala.xml.Node => { - shortComments(node).exists { n => { - val str = n.toString - str.contains("<code>foo</code>") && str.contains("</strong>") - } } - } - case _ => false - } - } - - property("Trac #4358") = { - createTemplate("Trac4358.scala") match { - case node: scala.xml.Node => - ! shortComments(node).exists { - _.toString.contains("<em>i.</em>") - } - case _ => false - } - } - - property("Trac #4180") = { - createTemplate("Trac4180.scala") != None - } - - property("Trac #4372") = { - createTemplate("Trac4372.scala") match { - case node: scala.xml.Node => { - val html = node.toString - html.contains("<span title=\"gt4s: $plus$colon\" class=\"name\">+:</span>") && - html.contains("<span title=\"gt4s: $minus$colon\" class=\"name\">-:</span>") && - html.contains("""<span class="params">(<span name="n">n: <span class="extype" name="scala.Int">Int</span></span>)</span><span class="result">: <span class="extype" name="scala.Int">Int</span></span>""") - } - case _ => false - } - } - - property("Trac #4374 - public") = { - val files = createTemplates("Trac4374.scala") - files("WithPublic.html") match { - case node: scala.xml.Node => { - val s = node.toString - s.contains("""href="WithPublic$.html"""") && - files.get("WithPublic$.html") != None - } - case _ => false - } - } - - property("Trac #4374 - private") = { - val files = createTemplates("Trac4374.scala") - files("WithPrivate.html") match { - case node: scala.xml.Node => { - val s = node.toString - ! s.contains("""href="WithPrivate$.html"""") && - files.get("WithPrivate$.html") == None - } - case _ => false - } - } - - property("Trac #4325 - files") = { - val files = createTemplates("Trac4325.scala") - - files.get("WithSynthetic.html") != None && - files.get("WithSynthetic$.html") == None && - files.get("WithObject.html") != None && - files.get("WithObject$.html") != None - } - - property("Trac #4325 - Don't link to syntetic companion") = { - val files = createTemplates("Trac4325.scala") - - files("WithSynthetic.html") match { - case node: scala.xml.Node => { - val s = node.toString - ! s.contains("""href="WithSynthetic$.html"""") - } - case _ => false - } - } - - property("Trac #4325 - Link to companion") = { - val files = createTemplates("Trac4325.scala") - - files("WithObject.html") match { - case node: scala.xml.Node => { - val s = node.toString - s.contains("""href="WithObject$.html"""") - } - case _ => false - } - } - - property("Trac #4420 - no whitespace at end of line") = { - val files = createTemplates("Trac4420.scala") - - files("TestA.html") match { - case node: scala.xml.Node => { - val s = node.toString - s.contains("""See YYY for more details""") - } - case _ => false - } - } - // - // property("Trac #484 - refinements and existentials") = { - // val files = createTemplates("Trac484.scala") - // val lines = """ - // |type Bar = AnyRef { type Dingus <: T forSome { type T <: String } } - // |type Foo = AnyRef { ... /* 3 definitions in type refinement */ } - // |def g(x: T forSome { type T <: String }): String - // |def h(x: Float): AnyRef { def quux(x: Int,y: Int): Int } - // |def hh(x: Float): AnyRef { def quux(x: Int,y: Int): Int } - // |def j(x: Int): Bar - // |def k(): AnyRef { type Dingus <: T forSome { type T <: String } } - // """.stripMargin.trim.lines map (_.trim) - // - // files("RefinementAndExistentials.html") match { - // case node: scala.xml.Node => { - // val s = node.text.replaceAll("\\s+", " ") - // lines forall (s contains _) - // } - // case _ => false - // } - // } - - property("Trac #4289") = { - val files = createTemplates("Trac4289.scala") - - files("Subclass.html") match { - case node: scala.xml.Node => { - node.toString.contains { - """<dt>returns</dt><dd class="cmt"><p>123</p></dd>""" - } - } - case _ => false - } - } - - property("Trac #4409") = { - createTemplate("Trac4409.scala") match { - case node: scala.xml.Node => { - ! node.toString.contains("""<div class="block"><ol>since""") - } - case _ => false - } - } - - property("Trac #4452") = { - createTemplate("Trac4452.scala") match { - case node: scala.xml.Node => - ! node.toString.contains(">*") - case _ => false - } - } - - property("Trac #4471") = { - createReferenceIndex("Trac4471.scala") match { - case Some(pages) => - (pages.get("index/index-f.html") match { - case Some(node) => node.toString.contains(">A</a></strike>") - case _ => false - }) && (pages.get("index/index-b.html") match { - case Some(node) => node.toString.contains(">bar</strike>") - case _ => false - }) - case _ => false - } - } - - property("SI-4641") = { - createReferenceIndex("SI_4641.scala") match { - case Some(pages) => pages.contains("index/index-_.html") - case _ => false - } - } - - property("SI-4421") = { - createTemplate("SI_4421.scala") match { - case node: scala.xml.Node => { - val html = node.toString - html.contains(">Example:") && html.contains(">Note<") - } - case _ => false - } - } - - property("SI-4589") = { - createTemplate("SI_4589.scala") match { - case node: scala.xml.Node => { - val html = node.toString - html.contains(">x0123456789: <") && - html.contains(">x012345678901234567890123456789: <") - } - case _ => false - } - } - - property("SI-4714: Should decode symbolic type alias name.") = { - createTemplate("SI_4715.scala") match { - case node: scala.xml.Node => { - val html = node.toString - html.contains(">:+:<") - } - case _ => false - } - } - - property("SI-4287: Default arguments of synthesized constructor") = { - val files = createTemplates("SI_4287.scala") - - files("ClassWithSugar.html") match { - case node: scala.xml.Node => { - node.toString.contains(">123<") - } - case _ => false - } - } - - property("SI-4507: Default arguments of synthesized constructor") = { - createTemplate("SI_4507.scala") match { - case node: scala.xml.Node => - ! node.toString.contains("<li>returns silently when evaluating true and true</li>") - case _ => false - } - } - - property("SI-4898: Use cases and links should not crash scaladoc") = { - createTemplate("SI_4898.scala") - true - } - - property("SI-5054: Use cases should override their original members") = - checkText("SI_5054_q1.scala")( - (None,"""def test(): Int""", true) - //Disabled because the full signature is now displayed - //(None, """def test(implicit lost: Int): Int""", false) - ) - - property("SI-5054: Use cases should keep their flags - final should not be lost") = - checkText("SI_5054_q2.scala")((None, """final def test(): Int""", true)) - - property("SI-5054: Use cases should keep their flags - implicit should not be lost") = - checkText("SI_5054_q3.scala")((None, """implicit def test(): Int""", true)) - - property("SI-5054: Use cases should keep their flags - real abstract should not be lost") = - checkText("SI_5054_q4.scala")((None, """abstract def test(): Int""", true)) - - property("SI-5054: Use cases should keep their flags - traits should not be affected") = - checkText("SI_5054_q5.scala")((None, """def test(): Int""", true)) - - property("SI-5054: Use cases should keep their flags - traits should not be affected") = - checkText("SI_5054_q6.scala")((None, """abstract def test(): Int""", true)) - - property("SI-5054: Use case individual signature test") = - checkText("SI_5054_q7.scala")( - (None, """abstract def test2(explicit: Int): Int [use case] This takes the explicit value passed.""", true), - (None, """abstract def test1(): Int [use case] This takes the implicit value in scope.""", true) - ) - - property("SI-5287: Display correct \"Definition classes\"") = - checkText("SI_5287.scala")( - (None, - """def method(): Int - [use case] The usecase explanation - [use case] The usecase explanation - Definition Classes SI_5287 SI_5287_B SI_5287_A""", true) - ) // the explanation appears twice, as small comment and full comment - - property("Comment inheritance: Correct comment inheritance for overriding") = - checkText("implicit-inheritance-override.scala")( - (Some("Base"), - """def function[T](arg1: T, arg2: String): Double - The base comment. - The base comment. And another sentence... - T the type of the first argument - arg1 The T term comment - arg2 The string comment - returns The return comment - """, true), - (Some("DerivedA"), - """def function[T](arg1: T, arg2: String): Double - Overriding the comment, the params and returns comments should stay the same. - Overriding the comment, the params and returns comments should stay the same. - T the type of the first argument - arg1 The T term comment - arg2 The string comment - returns The return comment - """, true), - (Some("DerivedB"), - """def function[T](arg1: T, arg2: String): Double - T the type of the first argument - arg1 The overridden T term comment - arg2 The overridden string comment - returns The return comment - """, true), - (Some("DerivedC"), - """def function[T](arg1: T, arg2: String): Double - T the type of the first argument - arg1 The T term comment - arg2 The string comment - returns The overridden return comment - """, true), - (Some("DerivedD"), - """def function[T](arg1: T, arg2: String): Double - T The overridden type parameter comment - arg1 The T term comment - arg2 The string comment - returns The return comment - """, true) - ) - - for (useCaseFile <- List("UseCaseInheritance", "UseCaseOverrideInheritance")) { - property("Comment inheritance: Correct comment inheritance for usecases") = - checkText("implicit-inheritance-usecase.scala")( - (Some(useCaseFile), - """def missing_arg[T](arg1: T): Double - [use case] - [use case] - T The type parameter - arg1 The T term comment - returns The return comment - """, true), - (Some(useCaseFile), - """def missing_targ(arg1: Int, arg2: String): Double - [use case] - [use case] - arg1 The T term comment - arg2 The string comment - returns The return comment - """, true), - (Some(useCaseFile), - """def overridden_arg1[T](implicit arg1: T, arg2: String): Double - [use case] - [use case] - T The type parameter - arg1 The overridden T term comment - arg2 The string comment - returns The return comment - """, true), - (Some(useCaseFile), - """def overridden_targ[T](implicit arg1: T, arg2: String): Double - [use case] - [use case] - T The overridden type parameter comment - arg1 The T term comment - arg2 The string comment - returns The return comment - """, true), - (Some(useCaseFile), - """def overridden_return[T](implicit arg1: T, arg2: String): Double - [use case] - [use case] - T The type parameter - arg1 The T term comment - arg2 The string comment - returns The overridden return comment - """, true), - (Some(useCaseFile), - """def added_arg[T](implicit arg1: T, arg2: String, arg3: Float): Double - [use case] - [use case] - T The type parameter - arg1 The T term comment - arg2 The string comment - arg3 The added float comment - returns The return comment - """, true), - (Some(useCaseFile), - """def overridden_comment[T](implicit arg1: T, arg2: String): Double - [use case] The overridden comment. - [use case] The overridden comment. - T The type parameter - arg1 The T term comment - arg2 The string comment - returns The return comment - """, true) - ) - } - - property("Comment inheritance: Correct explicit inheritance for override") = - checkText("explicit-inheritance-override.scala")( - (Some("InheritDocDerived"), - """def function[T](arg1: T, arg2: String): Double - Starting line - Starting line - The base comment. And another sentence... - The base comment. And another sentence... - Ending line - Author: StartAuthor a Scala developer EndAuthor - T StartT the type of the first argument EndT - arg1 Start1 The T term comment End1 - arg2 Start2 The string comment End2 - returns StartRet The return comment EndRet""", true), - (Some("InheritDocDerived"), - """Definition Classes InheritDocDerived → InheritDocBase - Example: StartExample function[Int](3, "something") EndExample - Version StartVer 0.0.2 EndVer - Since StartSince 0.0.1 EndSince - Exceptions thrown - SomeException StartEx if the function is not called with correct parameters EndEx - SomeOtherException StartSOE Should Warn <invalid inheritdoc annotation> EndSOE - To do StartTodo Call mom. And dad! EndTodo - Note StartNote Be careful! EndNote - See also StartSee The Manual EndSee - """, true)) - - property("Comment inheritance: Correct explicit inheritance for usecase") = - checkText("explicit-inheritance-usecase.scala")( - (Some("UseCaseInheritDoc"), - """def function[T](arg1: T, arg2: String): Double - [use case] Starting line - [use case] Starting line - The base comment. And another sentence... - The base comment. And another sentence... - Ending line - Author: StartAuthor a Scala developer EndAuthor - T StartT the type of the first argument EndT - arg1 Start1 The T term comment End1 - arg2 Start2 The string comment End2 - returns StartRet The return comment EndRet""", true), - (Some("UseCaseInheritDoc"), - """Example: StartExample function[Int](3,"something") EndExample - Version StartVer 0.0.2 EndVer - Since StartSince 0.0.1 EndSince - Exceptions thrown - SomeException StartEx if the function is not called with correct parameters EndEx - SomeOtherException StartSOE Should Warn <invalid inheritdoc annotation> EndSOE - To do StartTodo Call mom. And dad! EndTodo - Note StartNote Be careful! EndNote - See also StartSee The Manual EndSee - """, true)) - - property("Comment inheritance: Correct explicit inheritance in corner cases") = - checkText("inheritdoc-corner-cases.scala")( - (Some("D"), - """def hello1: Int - Inherited: Hello 1 comment - Inherited: Hello 1 comment - Definition Classes D → A - """, true), - (Some("D"), - """def hello2: Int - Inherited: Hello 2 comment - Inherited: Hello 2 comment - Definition Classes D → B - """, true), - (Some("G"), - """def hello1: Int - Inherited: Hello 1 comment - Inherited: Hello 1 comment - Definition Classes G → D → A - """, true), - (Some("G"), - """def hello2: Int - Inherited: Hello 2 comment - Inherited: Hello 2 comment - Definition Classes G → D → B - """, true), - (Some("I"), - """def hello1(i: Int): Unit - [use case] Inherited: Hello 1 comment - [use case] Inherited: Hello 1 comment - Definition Classes I → G → D → A - """, true) - // traits E, F and H shouldn't crash scaladoc but we don't need to check the output - ) - - property("Indentation normalization for code blocks") = { - val files = createTemplates("code-indent.scala") - - files("C.html") match { - case node: scala.xml.Node => { - val s = node.toString - s.contains("<pre>a typicial indented\ncomment on multiple\ncomment lines</pre>") && - s.contains("<pre>one liner</pre>") && - s.contains("<pre>two lines, one useful</pre>") && - s.contains("<pre>line1\nline2\nline3\nline4</pre>") && - s.contains("<pre>a ragged example\na (condition)\n the t h e n branch\nan alternative\n the e l s e branch</pre>") && - s.contains("<pre>Trait example {\n Val x = a\n Val y = b\n}</pre>") && - s.contains("<pre>l1\n\nl2\n\nl3\n\nl4\n\nl5</pre>") - } - case _ => false - } - } - - property("SI-4014: Scaladoc omits @author: no authors") = { - val noAuthors = createTemplates("SI-4014_0.scala")("Foo.html") - - noAuthors match { - case node: scala.xml.Node => { - val s = node.toString - ! s.contains("Author") - } - case _ => false - } - } - - property("SI-4014: Scaladoc omits @author: one author") = { - val oneAuthor = createTemplates("SI-4014_1.scala")("Foo.html") - - oneAuthor match { - case node: scala.xml.Node => { - val s = node.toString - s.contains("<h6>Author:</h6>") && - s.contains("<p>The Only Author</p>") - } - case _ => false - } - } - - property("SI-4014: Scaladoc omits @author: two authors") = { - val twoAuthors = createTemplates("SI-4014_2.scala")("Foo.html") - - twoAuthors match { - case node: scala.xml.Node => { - val s = node.toString - s.contains("<h6>Authors:</h6>") && - s.contains("<p>The First Author</p>") && - s.contains("<p>The Second Author</p>") - } - case _ => false - } - } - - { - val files = createTemplates("basic.scala") - //println(files) - - property("class") = files.get("com/example/p1/Clazz.html") match { - case Some(node: scala.xml.Node) => { - property("implicit conversion") = - node.toString contains "<span class=\"modifier\">implicit </span>" - - property("gt4s") = - node.toString contains "title=\"gt4s: $colon$colon\"" - - property("gt4s of a deprecated method") = - node.toString contains "title=\"gt4s: $colon$colon$colon$colon. Deprecated: " - true - } - case _ => false - } - property("package") = files.get("com/example/p1/package.html") != None - - property("package object") = files("com/example/p1/package.html") match { - case node: scala.xml.Node => - node.toString contains "com.example.p1#packageObjectMethod" - case _ => false - } - - property("lower bound") = files("com/example/p1/LowerBound.html") match { - case node: scala.xml.Node => true - case _ => false - } - - property("upper bound") = files("com/example/p1/UpperBound.html") match { - case node: scala.xml.Node => true - case _ => false - } - - property("SI-8514: No inconsistencies") = - checkText("SI-8514.scala")( - (Some("a/package"), - """class A extends AnyRef - Some doc here - Some doc here - Annotations @DeveloperApi() - """, true), - (Some("a/package"), - """class B extends AnyRef - Annotations @DeveloperApi() - """, true) - ) - } - - // SI-8144 - { - implicit class AttributesAwareNode(val node: NodeSeq) { - - def \@(attrName: String): String = - node \ ("@" + attrName) text - - def \@(attrName: String, attrValue: String): NodeSeq = - node filter { _ \ ("@" + attrName) exists (_.text == attrValue) } - } - - implicit class AssertionAwareNode(node: scala.xml.NodeSeq) { - - def assertTypeLink(expectedUrl: String): Boolean = { - val linkElement: NodeSeq = node \\ "div" \@ ("id", "definition") \\ "span" \@ ("class", "permalink") \ "a" - linkElement \@ "href" == expectedUrl && linkElement \@ "target" == "_top" - } - - def assertMemberLink(group: String)(memberName: String, expectedUrl: String): Boolean = { - val linkElement: NodeSeq = node \\ "div" \@ ("id", group) \\ "li" \@ ("name", memberName) \\ "span" \@ ("class", "permalink") \ "a" - linkElement \@ "href" == expectedUrl && linkElement \@ "target" == "_top" - } - - } - - val files = createTemplates("SI-8144.scala") - - def check(pagePath: String)(f: NodeSeq => org.scalacheck.Prop): org.scalacheck.Prop = - files(pagePath) match { - case node: scala.xml.Node => f(XMLUtil.stripGroup(node)) - case _ => false - } - - property("SI-8144: Members' permalink - package") = check("some/package.html") { node => - ("type link" |: node.assertTypeLink("../index.html#some.package")) && - ("member: some.pack" |: node.assertMemberLink("values")("some.pack", "../index.html#some.package@pack")) - } - - property("SI-8144: Members' permalink - inner package") = check("some/pack/package.html") { node => - ("type link" |: node.assertTypeLink("../../index.html#some.pack.package")) && - ("member: SomeType (object)" |: node.assertMemberLink("values")("some.pack.SomeType", "../../index.html#some.pack.package@SomeType")) && - ("member: SomeType (class)" |: node.assertMemberLink("types")("some.pack.SomeType", "../../index.html#some.pack.package@SomeTypeextendsAnyRef")) - } - - property("SI-8144: Members' permalink - companion object") = check("some/pack/SomeType$.html") { node => - ("type link" |: node.assertTypeLink("../../index.html#some.pack.SomeType$")) && - ("member: someVal" |: node.assertMemberLink("allMembers")("some.pack.SomeType#someVal", "../../index.html#some.pack.SomeType$@someVal:String")) - } - - property("SI-8144: Members' permalink - class") = check("some/pack/SomeType.html") { node => - ("type link" |: node.assertTypeLink("../../index.html#some.pack.SomeType")) && - ("constructor " |: node.assertMemberLink("constructors")("some.pack.SomeType#<init>", "../../index.html#some.pack.SomeType@<init>(arg:String):some.pack.SomeType")) && - ( "member: type TypeAlias" |: node.assertMemberLink("types")("some.pack.SomeType.TypeAlias", "../../index.html#some.pack.SomeType@TypeAlias=String")) && - ( "member: def >#<():Int " |: node.assertMemberLink("values")("some.pack.SomeType#>#<", "../../index.html#some.pack.SomeType@>#<():Int")) && - ( "member: def >@<():TypeAlias " |: node.assertMemberLink("values")("some.pack.SomeType#>@<", "../../index.html#some.pack.SomeType@>@<():SomeType.this.TypeAlias")) - } - - } -} diff --git a/test/scaladoc/scalacheck/IndexScriptTest.scala b/test/scaladoc/scalacheck/IndexScriptTest.scala deleted file mode 100644 index b8b9f92965..0000000000 --- a/test/scaladoc/scalacheck/IndexScriptTest.scala +++ /dev/null @@ -1,58 +0,0 @@ -import org.scalacheck._ -import org.scalacheck.Prop._ - -import scala.tools.nsc.doc -import scala.tools.nsc.doc.html.page.IndexScript -import java.net.{URLClassLoader, URLDecoder} - -object Test extends Properties("IndexScript") { - - 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 createIndexScript(path: String) = - docFactory.makeUniverse(Left(List(path))) match { - case Some(universe) => { - val index = new IndexScript(universe, - indexModelFactory.makeIndex(universe)) - Some(index) - } - case _ => - None - } - - property("allPackages") = { - createIndexScript("src/scaladoc/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 - } - } -} diff --git a/test/scaladoc/scalacheck/IndexTest.scala b/test/scaladoc/scalacheck/IndexTest.scala deleted file mode 100644 index 7dbd2103a6..0000000000 --- a/test/scaladoc/scalacheck/IndexTest.scala +++ /dev/null @@ -1,95 +0,0 @@ -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 - } - } -} |