diff options
Diffstat (limited to 'examples/scala-js/sbt-plugin-test')
13 files changed, 249 insertions, 0 deletions
diff --git a/examples/scala-js/sbt-plugin-test/README.md b/examples/scala-js/sbt-plugin-test/README.md new file mode 100644 index 0000000..71414a3 --- /dev/null +++ b/examples/scala-js/sbt-plugin-test/README.md @@ -0,0 +1,7 @@ +This is a standalone SBT project to test the Scala.js SBT plugin as it +will be used by the users. (Through normal SBT dependency +management). This needs the Scala.js artifacts to be published +locally. + +It has two subprojects, to test Scala.js with and without DOM. Both +subprojects have a main class and a test. diff --git a/examples/scala-js/sbt-plugin-test/build.sbt b/examples/scala-js/sbt-plugin-test/build.sbt new file mode 100644 index 0000000..dd2e12e --- /dev/null +++ b/examples/scala-js/sbt-plugin-test/build.sbt @@ -0,0 +1,44 @@ +import scala.scalajs.sbtplugin.RuntimeDOM + +name := "Scala.js sbt test" + +version := scalaJSVersion + +val baseSettings = Seq( + version := scalaJSVersion, + scalaVersion := "2.11.2", + libraryDependencies += + "org.scala-lang.modules.scalajs" %% "scalajs-jasmine-test-framework" % scalaJSVersion % "test" +) + +lazy val root = project.in(file(".")). + aggregate(noDOM, withDOM) + +lazy val noDOM = project.settings(baseSettings: _*). + enablePlugins(ScalaJSPlugin). + settings( + name := "Scala.js sbt test w/o DOM" + ) + +lazy val withDOM = project.settings(baseSettings: _*). + enablePlugins(ScalaJSPlugin). + settings( + name := "Scala.js sbt test w/ DOM", + jsDependencies ++= Seq( + RuntimeDOM, + "org.webjars" % "jquery" % "1.10.2" / "jquery.js" + ) + ) + +lazy val jetty9 = project.settings(baseSettings: _*). + enablePlugins(ScalaJSPlugin). + settings( + name := "Scala.js sbt test with jetty9 on classpath", + jsDependencies ++= Seq( + RuntimeDOM, + "org.webjars" % "jquery" % "1.10.2" / "jquery.js" + ), + // Use PhantomJS, allow cross domain requests + postLinkJSEnv := PhantomJSEnv(args = Seq("--web-security=no")).value, + Jetty9Test.runSetting + ) diff --git a/examples/scala-js/sbt-plugin-test/jetty9/src/main/resources/test.txt b/examples/scala-js/sbt-plugin-test/jetty9/src/main/resources/test.txt new file mode 100644 index 0000000..68300b8 --- /dev/null +++ b/examples/scala-js/sbt-plugin-test/jetty9/src/main/resources/test.txt @@ -0,0 +1 @@ +It works! diff --git a/examples/scala-js/sbt-plugin-test/noDOM/src/main/scala/sbttest/noDOM/Lib.scala b/examples/scala-js/sbt-plugin-test/noDOM/src/main/scala/sbttest/noDOM/Lib.scala new file mode 100644 index 0000000..884c422 --- /dev/null +++ b/examples/scala-js/sbt-plugin-test/noDOM/src/main/scala/sbttest/noDOM/Lib.scala @@ -0,0 +1,11 @@ +package sbttest.noDOM + +object Lib { + + /** appends `_foo` to a string */ + def foo(x: String): String = x + "foo" + + /** squares a number */ + def sq(x: Int): Int = x * x + +} diff --git a/examples/scala-js/sbt-plugin-test/noDOM/src/main/scala/sbttest/noDOM/TestApp.scala b/examples/scala-js/sbt-plugin-test/noDOM/src/main/scala/sbttest/noDOM/TestApp.scala new file mode 100644 index 0000000..16a4cbe --- /dev/null +++ b/examples/scala-js/sbt-plugin-test/noDOM/src/main/scala/sbttest/noDOM/TestApp.scala @@ -0,0 +1,12 @@ +package sbttest.noDOM + +import scala.scalajs.js + +object TestApp extends js.JSApp { + + def main(): Unit = { + println(Lib.foo("Hello World")) + println(Lib.sq(10)) + } + +} diff --git a/examples/scala-js/sbt-plugin-test/noDOM/src/test/scala/sbttest/noDOM/LibTest.scala b/examples/scala-js/sbt-plugin-test/noDOM/src/test/scala/sbttest/noDOM/LibTest.scala new file mode 100644 index 0000000..bc24eda --- /dev/null +++ b/examples/scala-js/sbt-plugin-test/noDOM/src/test/scala/sbttest/noDOM/LibTest.scala @@ -0,0 +1,19 @@ +package sbttest.noDOM + +import org.scalajs.jasminetest.JasmineTest + +object LibTest extends JasmineTest { + + describe("Dummy Library") { + it("should provide `foo`") { + expect(Lib.foo("")).toEqual("foo") + expect(Lib.foo("a")).toEqual("afoo") + } + + it("should provide `sq`") { + expect(Lib.sq(0)).toEqual(0) + expect(Lib.sq(10)).toEqual(100) + } + } + +} diff --git a/examples/scala-js/sbt-plugin-test/project/Jetty9Test.scala b/examples/scala-js/sbt-plugin-test/project/Jetty9Test.scala new file mode 100644 index 0000000..6a84114 --- /dev/null +++ b/examples/scala-js/sbt-plugin-test/project/Jetty9Test.scala @@ -0,0 +1,83 @@ +import sbt._ +import Keys._ + +import scala.scalajs.sbtplugin._ +import ScalaJSPlugin.autoImport._ +import Implicits._ + +import scala.scalajs.tools.env._ +import scala.scalajs.tools.io._ + +import org.eclipse.jetty.server._ +import org.eclipse.jetty.server.handler._ +import org.eclipse.jetty.util.component._ + +import java.io.File + +object Jetty9Test { + + private val jettyPort = 23548 + + val runSetting = run <<= Def.inputTask { + val env = (jsEnv in Compile).value.asInstanceOf[ComJSEnv] + val cp = (scalaJSExecClasspath in Compile).value + val jsConsole = scalaJSConsole.value + + val code = new MemVirtualJSFile("runner.js").withContent( + """ + scalajsCom.init(function(msg) { + jQuery.ajax({ + url: msg, + success: function(dat) { + scalajsCom.send(dat.trim()); + scalajsCom.close(); + }, + error: function() { + scalajsCom.send("failed!"); + scalajsCom.close(); + } + }); + }); + """ + ) + + val runner = env.comRunner(cp, code, streams.value.log, jsConsole) + + runner.start() + + val jetty = setupJetty((resourceDirectory in Compile).value) + + jetty.addLifeCycleListener(new AbstractLifeCycle.AbstractLifeCycleListener { + override def lifeCycleStarted(event: LifeCycle): Unit = { + try { + runner.send(s"http://localhost:$jettyPort/test.txt") + val msg = runner.receive() + val expected = "It works!" + if (msg != expected) + sys.error(s"""received "$msg" instead of "$expected"""") + } finally { + runner.close() + jetty.stop() + } + } + }) + + jetty.start() + runner.await() + jetty.join() + } + + private def setupJetty(dir: File): Server = { + val server = new Server(jettyPort) + + val resource_handler = new ResourceHandler() + resource_handler.setResourceBase(dir.getAbsolutePath) + + val handlers = new HandlerList() + handlers.setHandlers(Array(resource_handler, new DefaultHandler())) + server.setHandler(handlers) + + server + } + +} diff --git a/examples/scala-js/sbt-plugin-test/project/build.properties b/examples/scala-js/sbt-plugin-test/project/build.properties new file mode 100644 index 0000000..64abd37 --- /dev/null +++ b/examples/scala-js/sbt-plugin-test/project/build.properties @@ -0,0 +1 @@ +sbt.version=0.13.6 diff --git a/examples/scala-js/sbt-plugin-test/project/build.sbt b/examples/scala-js/sbt-plugin-test/project/build.sbt new file mode 100644 index 0000000..8419289 --- /dev/null +++ b/examples/scala-js/sbt-plugin-test/project/build.sbt @@ -0,0 +1,4 @@ +addSbtPlugin("org.scala-lang.modules.scalajs" % "scalajs-sbt-plugin" % + scala.scalajs.ir.ScalaJSVersions.current) + +libraryDependencies += "org.eclipse.jetty" % "jetty-server" % "9.2.3.v20140905" diff --git a/examples/scala-js/sbt-plugin-test/project/project/build.sbt b/examples/scala-js/sbt-plugin-test/project/project/build.sbt new file mode 100644 index 0000000..fb20cb7 --- /dev/null +++ b/examples/scala-js/sbt-plugin-test/project/project/build.sbt @@ -0,0 +1 @@ +sources in Compile += baseDirectory.value / "../../../ir/src/main/scala/scala/scalajs/ir/ScalaJSVersions.scala" diff --git a/examples/scala-js/sbt-plugin-test/withDOM/src/main/scala/sbttest/withDOM/Lib.scala b/examples/scala-js/sbt-plugin-test/withDOM/src/main/scala/sbttest/withDOM/Lib.scala new file mode 100644 index 0000000..e431557 --- /dev/null +++ b/examples/scala-js/sbt-plugin-test/withDOM/src/main/scala/sbttest/withDOM/Lib.scala @@ -0,0 +1,28 @@ +package sbttest.withDOM + +import scala.scalajs.js + +object Lib { + + val document: js.Dynamic = js.Dynamic.global.document + val jQuery: js.Dynamic = js.Dynamic.global.jQuery + + def getElementsByTagName(name: String): js.Array[js.Dynamic] = + document.getElementsByTagName(name).asInstanceOf[js.Array[js.Dynamic]] + + /** appends a <p> with the message to the document */ + def appendDocument(msg: String): Unit = { + val trg = { + val bodies = getElementsByTagName("body") + if (bodies.length > 0) + bodies(0) + else + document + } + + val elem = document.createElement("p") + elem.appendChild(document.createTextNode(msg)) + trg.appendChild(elem) + } + +} diff --git a/examples/scala-js/sbt-plugin-test/withDOM/src/main/scala/sbttest/withDOM/TestApp.scala b/examples/scala-js/sbt-plugin-test/withDOM/src/main/scala/sbttest/withDOM/TestApp.scala new file mode 100644 index 0000000..e61ed20 --- /dev/null +++ b/examples/scala-js/sbt-plugin-test/withDOM/src/main/scala/sbttest/withDOM/TestApp.scala @@ -0,0 +1,14 @@ +package sbttest.withDOM + +import scala.scalajs.js + +object TestApp extends js.JSApp { + + def main(): Unit = { + Lib.appendDocument("Hello World") + Lib.appendDocument("Still Here!") + + println(Lib.jQuery("p").text()) + } + +} diff --git a/examples/scala-js/sbt-plugin-test/withDOM/src/test/scala/sbttest/withDOM/LibTest.scala b/examples/scala-js/sbt-plugin-test/withDOM/src/test/scala/sbttest/withDOM/LibTest.scala new file mode 100644 index 0000000..e08e6e3 --- /dev/null +++ b/examples/scala-js/sbt-plugin-test/withDOM/src/test/scala/sbttest/withDOM/LibTest.scala @@ -0,0 +1,24 @@ +package sbttest.withDOM + +import scala.scalajs.js + +import org.scalajs.jasminetest.JasmineTest + +object LibTest extends JasmineTest { + + describe("Dummy Library") { + + it("should provide jQuery") { + expect(Lib.jQuery).toBeDefined + } + + it("should append an element") { + def count = Lib.jQuery("p").length.asInstanceOf[Int] + val oldCount = count + Lib.appendDocument("foo") + expect(count - oldCount).toEqual(1) + } + + } + +} |