forked from scala-js/scala-js-env-selenium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathJSSetup.scala
92 lines (87 loc) · 2.56 KB
/
JSSetup.scala
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
84
85
86
87
88
89
90
91
92
package org.scalajs.jsenv.selenium
import java.nio.charset.StandardCharsets
import java.nio.file.{Files, Path}
import com.google.common.jimfs.Jimfs
private[selenium] object JSSetup {
def setupFile(enableCom: Boolean): Path = {
val path = Jimfs.newFileSystem().getPath("setup.js")
val contents = setupCode(enableCom).getBytes(StandardCharsets.UTF_8)
Files.write(path, contents)
}
private def setupCode(enableCom: Boolean): String = {
s"""
|(function() {
| // Buffers for console.log / console.error
| var consoleLog = [];
| var consoleError = [];
|
| // Buffer for errors.
| var errors = [];
|
| // Buffer for outgoing messages.
| var outMessages = [];
|
| // Buffer for incoming messages (used if onMessage not initalized).
| var inMessages = [];
|
| // Callback for incoming messages.
| var onMessage = null;
|
| function captureConsole(fun, buf) {
| if (!fun) return fun;
| return function() {
| var strs = []
| for (var i = 0; i < arguments.length; ++i)
| strs.push(String(arguments[i]));
|
| buf.push(strs.join(" "));
| return fun.apply(this, arguments);
| }
| }
|
| console.log = captureConsole(console.log, consoleLog);
| console.error = captureConsole(console.error, consoleError);
|
| window.addEventListener('error', function(e) {
| errors.push(e.message)
| });
|
| if ($enableCom) {
| this.scalajsCom = {
| init: function(onMsg) {
| onMessage = onMsg;
| window.setTimeout(function() {
| for (var m in inMessages)
| onMessage(inMessages[m]);
| inMessages = null;
| });
| },
| send: function(msg) { outMessages.push(msg); }
| }
| }
|
| this.scalajsSeleniumInternalInterface = {
| fetch: function() {
| var res = {
| consoleLog: consoleLog.slice(),
| consoleError: consoleError.slice(),
| errors: errors.slice(),
| msgs: outMessages.slice()
| }
|
| consoleLog.length = 0;
| consoleError.length = 0;
| errors.length = 0;
| outMessages.length = 0;
|
| return res;
| },
| send: function(msg) {
| if (inMessages !== null) inMessages.push(msg);
| else onMessage(msg);
| }
| };
|}).call(this)
""".stripMargin
}
}