/
test-point.ts
70 lines (62 loc) · 1.56 KB
/
test-point.ts
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
import { diags } from './diags.js'
import { esc } from './esc.js'
import { Extra } from './index.js'
/**
* Very simple result object, just indicating pass/fail status,
* message, and the {@link @tapjs/core!index.Extra} object provided to the
* assertion method.
*/
export interface Result {
ok: boolean
message: string
extra: Extra
}
/**
* Object representing a single test point `ok` / `not ok` line
*/
export class TestPoint {
ok: 'ok ' | 'not ok '
name: string
message: string
extra: { [key: string]: any }
res: Result
constructor(
ok: boolean,
message: string,
extra?: { [key: string]: any }
) {
extra = extra || {}
this.ok = ok ? 'ok ' : 'not ok '
message = message
.trim()
.replace(/[\n\r]/g, ' ')
.replace(/\t/g, ' ')
this.res = { ok, message, extra }
this.extra = extra
this.name = message
this.message = tpMessage(esc(this.name), extra)
}
}
const tpMessage = (
description: string,
extra: { [k: string]: any }
): string => {
let message = description ? ` - ${description}` : ''
if (extra.skip) {
message += ' # SKIP'
if (typeof extra.skip === 'string') {
message += ' ' + esc(extra.skip)
}
} else if (extra.todo) {
message += ' # TODO'
if (typeof extra.todo === 'string') {
message += ' ' + esc(extra.todo)
}
} else if (extra.time) {
message += ' # time=' + extra.time + 'ms'
}
// TODO: add # time if duration_ms in extra
const diagYaml = extra.diagnostic ? '\n' + diags(extra) : ''
message += diagYaml + '\n'
return message
}