1 |
|
2 | e = require 'expect.js'
|
3 | moment = require 'moment'
|
4 | path = require 'path'
|
5 |
|
6 | describe 'Pattern Tools', ->
|
7 | pat = require '../lib/pattern'
|
8 | describe 'compile', ->
|
9 | it 'simple string', ->
|
10 | render = pat.compile 'simple'
|
11 | e(render()).to.be 'simple'
|
12 | it 'with vars', ->
|
13 | render = pat.compile 'simple {var1} simple'
|
14 | e(render({var1:'vars'})).to.be 'simple vars simple'
|
15 | it 'with empty vars', ->
|
16 | render = pat.compile 'simple {var1} simple'
|
17 | e(render({})).to.be 'simple - simple'
|
18 | it 'with empty vars without "-"', ->
|
19 | render = pat.compile 'simple {empty var1} simple', placeholder:''
|
20 | e(render({var1 : '', empty : (v) ->
|
21 | if v then v else ''
|
22 | })).to.be 'simple simple'
|
23 | it 'with time', ->
|
24 | for k in ['now', 'time', 'date', 'fulltime', 'numbertime', 'mstimestamp', 'timestamp']
|
25 | render = pat.compile 'simple {' + k + '} simple'
|
26 | e(render.time).to.be true
|
27 | it 'with trace stack', ->
|
28 | for k in ['file', 'lineno', 'stack', 'stackColored']
|
29 | render = pat.compile 'simple {' + k + '} simple'
|
30 | e(render.stack).to.be true
|
31 |
|
32 | describe 'format', ->
|
33 | describe 'basic', ->
|
34 | it 'no vars', ->
|
35 | render = pat.compile 'no vars'
|
36 | e(pat.format render, null, 1).to.be 'no vars\n'
|
37 | it 'object vars', ->
|
38 | render = pat.compile 'object vars {foo}'
|
39 | e(pat.format render, {foo:'bar'}, 1).to.be 'object vars bar\n'
|
40 | it 'object vars and subvars', ->
|
41 | render = pat.compile 'object vars {foo} {foo1.bar1}'
|
42 | e(pat.format render, {foo:'bar', foo1:bar1:'bar1'}, 1).to.be 'object vars bar bar1\n'
|
43 | it 'call function with const', ->
|
44 | render = pat.compile 'object vars {foo "123"} {foo 456} {foo \'789\'} {foo true}'
|
45 | e(pat.format render, {foo:((v)->v), 'true' : 'true'}, 1).to.be 'object vars 123 456 789 true\n'
|
46 | it 'call function with vars', ->
|
47 | render = pat.compile 'object vars {foo bar}'
|
48 | e(pat.format render, {foo:((v)->v), bar:123}, 1).to.be 'object vars 123\n'
|
49 | describe 'predefines', ->
|
50 | it 'level text colored and message', ->
|
51 | render = pat.compile 'simple colored {color.level level} {msg}'
|
52 | e(pat.format render, 'msg', 2).to.be 'simple colored \x1b[36mDEBUG\x1b[0m msg\n'
|
53 | it 'with predefined time', ->
|
54 | render = pat.compile 'simple colored {time} {msg}'
|
55 | el = new Date()
|
56 | el.setSeconds(el.getSeconds() - 1)
|
57 | lt = new Date()
|
58 | lt.setSeconds(lt.getSeconds() + 1)
|
59 | early = "simple colored #{moment(el).format 'HH:mm:ss'} msg\n"
|
60 | later = "simple colored #{moment(lt).format 'HH:mm:ss'} msg\n"
|
61 | e(pat.format render, 'msg', 4).to.above early
|
62 | e(pat.format render, 'msg', 4).to.below later
|
63 | it 'with custom time', ->
|
64 | render = pat.compile 'simple colored {now \'HH:mm:ss\'} {msg}'
|
65 | el = new Date()
|
66 | el.setSeconds(el.getSeconds() - 1)
|
67 | lt = new Date()
|
68 | lt.setSeconds(lt.getSeconds() + 1)
|
69 | early = "simple colored #{moment(el).format 'HH:mm:ss'} msg\n"
|
70 | later = "simple colored #{moment(lt).format 'HH:mm:ss'} msg\n"
|
71 | e(pat.format render, 'msg', 4).to.above early
|
72 | e(pat.format render, 'msg', 4).to.below later
|
73 | it 'tracestack', ->
|
74 | render = pat.compile 'simple colored {stack} {msg}'
|
75 | e(pat.format render, 'msg', 4).to.match /simple colored (out\/test\/)?tests\/test-pattern\.(js|coffee):\d+ msg\n/
|
76 | it 'trace stack with inline code', ->
|
77 | render = pat.compile 'simple colored {stack} {msg}'
|
78 | checkReg = /simple colored (out\/test\/)?tests\/test-pattern\.(js|coffee):\d+ msg\n/
|
79 | new Function('e', 'pat', 'render', 'checkReg', "e(pat.format(render, 'msg', 8)).to.match(checkReg);")(e, pat, render, checkReg);
|