diff options
Diffstat (limited to 'examples/crossBuilds/clientserver')
8 files changed, 159 insertions, 0 deletions
diff --git a/examples/crossBuilds/clientserver/build.sbt b/examples/crossBuilds/clientserver/build.sbt new file mode 100644 index 0000000..434fb42 --- /dev/null +++ b/examples/crossBuilds/clientserver/build.sbt @@ -0,0 +1,25 @@ +import utest.jsrunner.JsCrossBuild +import scala.scalajs.sbtplugin.ScalaJSPlugin._ +import ScalaJSKeys._ + +val cross = new JsCrossBuild( + // Shared settings here +) + +lazy val js = cross.js.settings( + libraryDependencies ++= Seq( + "org.scala-lang.modules.scalajs" %%% "scalajs-dom" % "0.6" + ) +) + +lazy val jvm = cross.jvm.settings( + libraryDependencies ++= Seq( + "io.spray" %% "spray-can" % "1.3.2", + "io.spray" %% "spray-routing" % "1.3.2", + "com.typesafe.akka" %% "akka-actor" % "2.3.6" + ), + (resources in Compile) += { + (fastOptJS in (js, Compile)).value + (artifactPath in (js, Compile, fastOptJS)).value + } +) diff --git a/examples/crossBuilds/clientserver/js/shared/main/scala/simple/Simple.scala b/examples/crossBuilds/clientserver/js/shared/main/scala/simple/Simple.scala new file mode 100644 index 0000000..d3b0278 --- /dev/null +++ b/examples/crossBuilds/clientserver/js/shared/main/scala/simple/Simple.scala @@ -0,0 +1,7 @@ +/*shared/main/scala/simple/Simple.scala*/ +package simple +object Simple{ + def formatTimes(timestamps: Seq[Long]): String = { + timestamps.map(Platform.format).mkString("\n") + } +}
\ No newline at end of file diff --git a/examples/crossBuilds/clientserver/js/shared/test/scala/simple/SimpleTest.scala b/examples/crossBuilds/clientserver/js/shared/test/scala/simple/SimpleTest.scala new file mode 100644 index 0000000..ec6b29f --- /dev/null +++ b/examples/crossBuilds/clientserver/js/shared/test/scala/simple/SimpleTest.scala @@ -0,0 +1,13 @@ +/*js/shared/test/scala/simple/SimpleTest.scala*/ +/*jvm/shared/test/scala/simple/SimpleTest.scala*/ +package simple +import utest._ +object SimpleTest extends TestSuite{ + val tests = TestSuite{ + 'format{ + 'nil - assert(Simple.formatTimes(Nil) == "") + 'timeZero - assert( + Simple.formatTimes(Seq(0)) == "December 31, 1969 4:00:00 PM PST") + } + } +}
\ No newline at end of file diff --git a/examples/crossBuilds/clientserver/js/src/main/scala/simple/Platform.scala b/examples/crossBuilds/clientserver/js/src/main/scala/simple/Platform.scala new file mode 100644 index 0000000..c82a112 --- /dev/null +++ b/examples/crossBuilds/clientserver/js/src/main/scala/simple/Platform.scala @@ -0,0 +1,31 @@ +//js/src/main/scala/simple/Platform.scala +package simple + +import org.scalajs.dom.XMLHttpRequest + +import scala.scalajs.js +import org.scalajs.dom + +import scala.scalajs.js.annotation.JSExport + +@JSExport +object Platform extends{ + def format(ts: Long) = { + new js.Date(ts).toLocaleString() + } + @JSExport + def main(container: dom.HTMLDivElement) = { + container.innerHTML += + "<h1>Hello from Scala.js!</h1>" + + s"<p>${Simple.formatTimes(Seq(0, 1 << 30))}</p>" + + val xhr = new XMLHttpRequest() + xhr.open("POST", "/formatDates") + xhr.onload = (e: dom.Event) => { + container.innerHTML += + "<h1>Hello from Ajax!</h1>" + + s"<p>${xhr.responseText}</p>" + } + xhr.send(Seq(0, 1 << 30).mkString(",")) + } +}
\ No newline at end of file diff --git a/examples/crossBuilds/clientserver/jvm/shared/main/scala/simple/Simple.scala b/examples/crossBuilds/clientserver/jvm/shared/main/scala/simple/Simple.scala new file mode 100644 index 0000000..d3b0278 --- /dev/null +++ b/examples/crossBuilds/clientserver/jvm/shared/main/scala/simple/Simple.scala @@ -0,0 +1,7 @@ +/*shared/main/scala/simple/Simple.scala*/ +package simple +object Simple{ + def formatTimes(timestamps: Seq[Long]): String = { + timestamps.map(Platform.format).mkString("\n") + } +}
\ No newline at end of file diff --git a/examples/crossBuilds/clientserver/jvm/shared/test/scala/simple/SimpleTest.scala b/examples/crossBuilds/clientserver/jvm/shared/test/scala/simple/SimpleTest.scala new file mode 100644 index 0000000..ec6b29f --- /dev/null +++ b/examples/crossBuilds/clientserver/jvm/shared/test/scala/simple/SimpleTest.scala @@ -0,0 +1,13 @@ +/*js/shared/test/scala/simple/SimpleTest.scala*/ +/*jvm/shared/test/scala/simple/SimpleTest.scala*/ +package simple +import utest._ +object SimpleTest extends TestSuite{ + val tests = TestSuite{ + 'format{ + 'nil - assert(Simple.formatTimes(Nil) == "") + 'timeZero - assert( + Simple.formatTimes(Seq(0)) == "December 31, 1969 4:00:00 PM PST") + } + } +}
\ No newline at end of file diff --git a/examples/crossBuilds/clientserver/jvm/src/main/scala/simple/Platform.scala b/examples/crossBuilds/clientserver/jvm/src/main/scala/simple/Platform.scala new file mode 100644 index 0000000..61fdc58 --- /dev/null +++ b/examples/crossBuilds/clientserver/jvm/src/main/scala/simple/Platform.scala @@ -0,0 +1,59 @@ +//jvm/src/main/scala/simple/Platform.scala +package simple + +import java.text.SimpleDateFormat + +import akka.actor.ActorSystem +import spray.http.{HttpEntity, MediaTypes} +import spray.routing.SimpleRoutingApp + +object Platform extends SimpleRoutingApp{ + def format(ts: Long) = { + val fmt = + "MMMM d, yyyy h:mm:ss aaa z" + new SimpleDateFormat(fmt).format( + new java.util.Date(ts) + ) + } + + def main(args: Array[String]): Unit = { + implicit val system = ActorSystem() + startServer("localhost", port = 8080){ + get{ + pathSingleSlash{ + complete{ + val msg = Simple.formatTimes(Seq(0, 1 << 30)) + val boot = + "Platform().main(document.getElementById('contents'))" + HttpEntity( + MediaTypes.`text/html`, + s""" + <html> + <head> + <script src="/js-fastopt.js"></script> + </head> + <body onload="$boot"> + <div id="contents"> + <h1>Hello from Scala-JVM!</h1> + <p>$msg</p> + </div> + </body> + </html> + """ + ) + } + } ~ + getFromResourceDirectory("") + } ~ + post{ + path("formatDates"){ + extract(_.request.entity.asString) { e => + complete { + Simple.formatTimes(e.split(",").map(_.toLong)) + } + } + } + } + } + } +}
\ No newline at end of file diff --git a/examples/crossBuilds/clientserver/project/build.sbt b/examples/crossBuilds/clientserver/project/build.sbt new file mode 100644 index 0000000..5bd83ce --- /dev/null +++ b/examples/crossBuilds/clientserver/project/build.sbt @@ -0,0 +1,4 @@ +/*project/build.sbt*/ +addSbtPlugin("org.scala-lang.modules.scalajs" % "scalajs-sbt-plugin" % "0.5.5") + +addSbtPlugin("com.lihaoyi" % "utest-js-plugin" % "0.2.4")
\ No newline at end of file |