Skip to content

Commit

Permalink
BuildConfig: Fix validation for module platform compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
tindzk committed Nov 2, 2019
1 parent 33490d7 commit 76d8f71
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 4 deletions.
21 changes: 17 additions & 4 deletions src/main/scala/seed/config/BuildConfig.scala
Original file line number Diff line number Diff line change
Expand Up @@ -287,13 +287,26 @@ object BuildConfig {
hasCycle(name, Set())
}

val incompatibleModuleDepPlatform =
val incompatibleModuleDepPlatform = {
def getModule(name: String) =
build.get(name).map(m => name -> m.module).filter(_._2.target.isEmpty)

def platform(p: Platform) =
platformModule(module, p).flatMap(
_.moduleDeps
.flatMap(name => getModule(name))
.find(!_._2.targets.contains(p))
.map(x => (x._1, List(p)))
)

module.moduleDeps
.flatMap { name =>
build.get(name).map(m => name -> m.module)
}
.flatMap(getModule)
.map { case (n, m) => (n, module.targets.diff(m.targets)) }
.find(_._2.nonEmpty)
.orElse(platform(JVM))
.orElse(platform(JavaScript))
.orElse(platform(Native))
}

val moduleName = Ansi.italic(name)

Expand Down
49 changes: 49 additions & 0 deletions src/test/scala/seed/config/BuildConfigSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -682,6 +682,55 @@ object BuildConfigSpec extends SimpleTestSuite {
)
}

test("Platform compatibility when inheriting (2)") {
val buildToml = """
|[project]
|scalaJsVersion = "0.6.26"
|scalaNativeVersion = "0.3.7"
|
|[module.foo.js]
|scalaVersion = "2.11.11"
|sources = ["foo/"]
|
|[module.bar.native]
|scalaVersion = "2.11.11"
|moduleDeps = ["foo"]
|sources = ["bar/"]
""".stripMargin

val messages = ListBuffer[String]()
val log = new Log(messages += _, identity, LogLevel.Error, false)
parseBuild(buildToml, log, fail = true)(_ => "")
assert(
messages.exists(
_.contains(
s"Module ${Ansi.italic("foo")} has missing target platform(s) (${Ansi
.italic("native")}) required by ${Ansi.italic("bar")}"
)
)
)
}

test("Custom build targets do not need to set any platforms") {
val buildToml = """
|[project]
|scalaVersion = "2.11.11"
|
|[module.template.target.scss]
|root = "scss"
|command = "yarn install && yarn run gulp"
|
|[module.app.jvm]
|moduleDeps = ["template"]
|sources = ["src/"]
""".stripMargin

val messages = ListBuffer[String]()
val log = new Log(messages += _, identity, LogLevel.Error, false)
val build = parseBuild(buildToml, log)(_ => "")
assertEquals(build("app").module.targets, List(JVM))
}

test("Scala version compatibility") {
val buildToml = """
|[module.foo.jvm]
Expand Down

0 comments on commit 76d8f71

Please sign in to comment.