/
screenshot_handler.moon
48 lines (32 loc) · 1.36 KB
/
screenshot_handler.moon
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
import get_file_name, screenshot_path from require "spec.helpers.screenshots"
import parse_query_string, encode_query_string from require "lapis.util"
(options) ->
busted = require "busted"
handler = require("busted.outputHandlers.utfTerminal") options
local spec_name
busted.subscribe { "test", "start" }, (context) ->
spec_name = get_file_name context
busted.subscribe { "test", "end" }, ->
spec_name = nil
busted.subscribe { "lapis", "screenshot" }, (url, opts) ->
assert spec_name, "no spec name set"
import get_current_server from require "lapis.spec.server"
server = get_current_server!
if opts.get
_, url_query = url\match "^(.-)%?(.*)$"
get_params = url_query and parse_query_string(url_query) or {}
for k,v in pairs opts.get
get_params[k] = v
url = url\gsub("(%?.*)$", "") .. "?" .. encode_query_string get_params
host, path = url\match "^https?://([^/]*)(.*)$"
headers = for k,v in pairs opts.headers or {}
"--custom-header '#{k}' '#{v}'"
if host
table.insert headers, "--custom-header 'Host' '#{host}:#{server.app_port}'"
else
path = url
full_url = "http://127.0.0.1:#{server.app_port}#{path}"
headers = table.concat headers, " "
cmd = "wkhtmltoimage -q #{headers} '#{full_url}' '#{screenshot_path(spec_name)}'"
assert os.execute cmd
handler