blob: 6a84114e2ab53ae944fb19f16475cf9c0e8e5daa (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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
}
}
|