Skip to content

Commit

Permalink
Merge pull request #356 from olafurpg/issue-346
Browse files Browse the repository at this point in the history
Isolate user classloader from mdoc classloader
  • Loading branch information
olafurpg authored Jun 25, 2020
2 parents 23d44c3 + 724f5dc commit 54f40f3
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 12 deletions.
14 changes: 12 additions & 2 deletions mdoc/src/main/scala/mdoc/internal/markdown/MarkdownCompiler.scala
Original file line number Diff line number Diff line change
Expand Up @@ -94,16 +94,26 @@ object MarkdownCompiler {
if (classpath.isEmpty) defaultClasspath(_ => true)
else {
val base = Classpath(classpath)
val runtime = defaultClasspath(path => path.toString.contains("mdoc-runtime"))
val runtime = defaultClasspath(path => {
val pathString = path.toString
pathString.contains("scala-library") ||
pathString.contains("scala-reflect") ||
pathString.contains("sourcecode") ||
pathString.contains("fansi") ||
pathString.contains("pprint") ||
pathString.contains("mdoc-interfaces") ||
(pathString.contains("mdoc") && pathString.contains("runtime"))
})
base ++ runtime
}
new MarkdownCompiler(fullClasspath.syntax, scalacOptions)
}

private def defaultClasspath(fn: Path => Boolean): Classpath = {
val paths =
getURLs(getClass.getClassLoader)
getURLs(getClass.getClassLoader).iterator
.map(url => AbsolutePath(Paths.get(url.toURI)))
.filter(p => fn(p.toNIO))
Classpath(paths.toList)
}

Expand Down
3 changes: 3 additions & 0 deletions tests/unit/src/test/scala/tests/BaseSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,13 @@ class BaseSuite extends FunSuite {
)
}
object OnlyScala213 extends munit.Tag("OnlyScala213")
object SkipScala211 extends munit.Tag("SkipScala211")
override def munitTestTransforms: List[TestTransform] = super.munitTestTransforms ++ List(
new TestTransform(OnlyScala213.value, { test =>
if (test.tags(OnlyScala213) && mdoc.internal.BuildInfo.scalaBinaryVersion != "2.13")
test.tag(munit.Ignore)
else if (test.tags(SkipScala211) && mdoc.internal.BuildInfo.scalaBinaryVersion == "2.11")
test.tag(munit.Ignore)
else test
})
)
Expand Down
2 changes: 1 addition & 1 deletion tests/unit/src/test/scala/tests/cli/BaseCliSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ abstract class BaseCliSuite extends BaseSuite {
expectedExitCode: => Int = 0,
onStdout: String => Unit = _ => (),
includeOutputPath: RelativePath => Boolean = _ => true
): Unit = {
)(implicit loc: munit.Location): Unit = {
test(name) {
myStdout.reset()
StringFS.fromString(original, in())
Expand Down
36 changes: 27 additions & 9 deletions tests/unit/src/test/scala/tests/worksheets/WorksheetSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ import scala.meta.inputs.Input
import scala.meta.inputs.Position
import mdoc.internal.pos.PositionSyntax._
import java.{util => ju}
import tests.BaseSuite
import munit.TestOptions

class WorksheetSuite extends FunSuite {
class WorksheetSuite extends BaseSuite {
var mdoc = ju.ServiceLoader
.load(classOf[Mdoc], this.getClass().getClassLoader())
.iterator()
Expand All @@ -21,14 +23,14 @@ class WorksheetSuite extends FunSuite {
}

def checkDiagnostics(
name: String,
options: TestOptions,
original: String,
expected: String
): Unit = {
test(name) {
val filename = name + ".scala"
test(options) {
val filename = options.name + ".scala"
val worksheet = mdoc.evaluateWorksheet(filename, original)
val input = Input.VirtualFile(name, original)
val input = Input.VirtualFile(options.name, original)
val out = new StringBuilder()
var i = 0
val diagnostics =
Expand All @@ -51,15 +53,15 @@ class WorksheetSuite extends FunSuite {
}

def checkDecorations(
name: String,
options: TestOptions,
original: String,
expected: String
): Unit = {
test(name) {
val filename = name + ".scala"
test(options) {
val filename = options.name + ".scala"
val worksheet = mdoc.evaluateWorksheet(filename, original)
val statements = worksheet.statements().asScala.sortBy(_.position().startLine())
val input = Input.VirtualFile(name, original)
val input = Input.VirtualFile(options.name, original)
val out = new StringBuilder()
var i = 0
statements.foreach { stat =>
Expand Down Expand Up @@ -238,4 +240,20 @@ class WorksheetSuite extends FunSuite {
|""".stripMargin
)

checkDecorations(
"fastparse".tag(SkipScala211),
"""
|import $dep.`com.lihaoyi::fastparse:2.3.0`
|import fastparse._, MultiLineWhitespace._
|def p[_:P] = P("a")
|parse("a", p(_))
|""".stripMargin,
"""|import $dep.`com.lihaoyi::fastparse:2.3.0`
|import fastparse._, MultiLineWhitespace._
|def p[_:P] = P("a")
|<parse("a", p(_))> // Success((), 1)
|res0: Parsed[Unit] = Success((), 1)
|""".stripMargin
)

}

0 comments on commit 54f40f3

Please sign in to comment.