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 parseComment(s: String): Option[Inline] = strip(parse(s, "", scala.tools.nsc.util.NoPosition, null)) 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( """ /** *
* hello ^world ** */""", Chain(List(Text(""), Text("\n"), HtmlTag("
\nhello ^world\n"))) ) property("Trac #4366 - body") = { val body = factory.createBody( """ /** *
foo
has been deprecated and will be removed in a future version. Please call bar
instead.
*/
"""
)
body == Body(List(Paragraph(Chain(List(
Summary(Chain(List(HtmlTag("foo
has been deprecated and will be removed in a future version. Please call bar
instead."), Text("\n"), Text(""))))
)))))
}
property("Trac #4366 - summary") = {
val body = factory.createBody(
"""
/**
* foo
has been deprecated and will be removed in a future version. Please call bar
instead.
*/
"""
)
body.summary == Some(Chain(List(HtmlTag("foo
has been deprecated and will be removed in a future version. Please call bar
instead."), Text("\n"), Text(""))))
}
property("Trac #4358 - body") = {
factory.createBody(
"""
/**
* Implicit conversion that invokes the expect
method on the EasyMock
companion object (i.e., the
* static expect
method in Java class org.easymock.EasyMock
).
*/
"""
) match {
case Body(List(Paragraph(Chain(List(Summary(Chain(List(Chain(List(
Text("Implicit conversion that invokes the "),
HtmlTag("expect
"),
Text(" method on the "),
HtmlTag("EasyMock
"),
Text(" companion object ("),
HtmlTag("i.e."),
Text(", the\nstatic "),
HtmlTag("expect
"),
Text(" method in Java class "),
HtmlTag("org.easymock.EasyMock
"),
Text(")")
)), Text(".")))), Text("\n")))))) =>
true
case other => {
println(other)
false
}
}
}
}