]>
Commit | Line | Data |
---|---|---|
1 | 'use strict'; | |
2 | ||
3 | const Tap = require('tap'); | |
4 | ||
5 | const { Cologne } = require('..'); | |
6 | ||
7 | // Utility Functions | |
8 | ||
9 | const createDummyLogger = function () { | |
10 | ||
11 | return { | |
12 | values: null, | |
13 | log(...logs) { | |
14 | ||
15 | this.values = []; | |
16 | ||
17 | for (const log of logs) { | |
18 | this.values.push(log); | |
19 | } | |
20 | } | |
21 | }; | |
22 | }; | |
23 | ||
24 | const levelChecker = function (level) { | |
25 | ||
26 | return (count, log) => (log._level === level ? ++count : count); | |
27 | }; | |
28 | ||
29 | ||
30 | // Prepare the test | |
31 | ||
32 | Tap.plan(19); | |
33 | ||
34 | const dummyLoggerA = createDummyLogger(); | |
35 | const dummyLoggerB = createDummyLogger(); | |
36 | const dummyLoggerC = createDummyLogger(); | |
37 | ||
38 | const co = new Cologne({ | |
39 | loggers: [ | |
40 | dummyLoggerA, | |
41 | dummyLoggerB | |
42 | ] | |
43 | }); | |
44 | ||
45 | const logs = ['example1', null, undefined, 1, { example: true }]; | |
46 | ||
47 | /** | |
48 | * TEST: #log() | |
49 | */ | |
50 | co.log(...logs); | |
51 | ||
52 | // Calculate values | |
53 | const valueCheck = dummyLoggerA.values.reduce((count, log) => (typeof log._cologneLog === 'string' ? ++count : count), 0); | |
54 | let levelCheck = dummyLoggerA.values.reduce(levelChecker(6), 0); | |
55 | ||
56 | // Now check the values | |
57 | ||
58 | Tap.equal(dummyLoggerA.values.length, logs.length, | |
59 | '#log() should send every argument to the loggers'); | |
60 | ||
61 | Tap.similar(dummyLoggerA.values, dummyLoggerB.values, | |
62 | '#log() should send the same arguments to all the loggers'); | |
63 | ||
64 | Tap.equal(valueCheck, logs.length, | |
65 | '#log() should send all objects in cologne log format'); | |
66 | ||
67 | Tap.equal(levelCheck, logs.length, | |
68 | '#log() should default to level 6'); | |
69 | ||
70 | /** | |
71 | * TEST: #debug() | |
72 | */ | |
73 | co.debug(...logs); | |
74 | levelCheck = dummyLoggerA.values.reduce(levelChecker(7), 0); | |
75 | ||
76 | Tap.equal(levelCheck, logs.length, | |
77 | '#debug() should set to level 7'); | |
78 | ||
79 | /** | |
80 | * TEST: #info() | |
81 | */ | |
82 | co.info(...logs); | |
83 | levelCheck = dummyLoggerA.values.reduce(levelChecker(6), 0); | |
84 | ||
85 | Tap.equal(levelCheck, logs.length, | |
86 | '#info() should set to level 6'); | |
87 | ||
88 | /** | |
89 | * TEST: #notice() | |
90 | */ | |
91 | co.notice(...logs); | |
92 | levelCheck = dummyLoggerA.values.reduce(levelChecker(5), 0); | |
93 | ||
94 | Tap.equal(levelCheck, logs.length, | |
95 | '#notice() should set to level 5'); | |
96 | ||
97 | /** | |
98 | * TEST: #warn() | |
99 | */ | |
100 | co.warn(...logs); | |
101 | levelCheck = dummyLoggerA.values.reduce(levelChecker(4), 0); | |
102 | ||
103 | Tap.equal(levelCheck, logs.length, | |
104 | '#warn() should set to level 4'); | |
105 | ||
106 | /** | |
107 | * TEST: #error() | |
108 | */ | |
109 | co.error(...logs); | |
110 | levelCheck = dummyLoggerA.values.reduce(levelChecker(3), 0); | |
111 | ||
112 | Tap.equal(levelCheck, logs.length, | |
113 | '#error() should set to level 3'); | |
114 | ||
115 | /** | |
116 | * TEST: #buildLog() | |
117 | */ | |
118 | let builtLog = co.buildLog('example'); | |
119 | ||
120 | // With the default level | |
121 | Tap.equal(typeof builtLog._cologneLog, 'string', | |
122 | '#buildLog() should return a cologne log'); | |
123 | Tap.equal(builtLog._level, 6, | |
124 | '#buildLog() should default to level 6'); | |
125 | ||
126 | // Now with a specific value | |
127 | builtLog = co.buildLog('example', 1); | |
128 | ||
129 | Tap.equal(builtLog._level, 1, | |
130 | '#buildLog() should use the specified level'); | |
131 | ||
132 | // Extending object properties | |
133 | builtLog = co.buildLog({ message: 'example', rainbows: true }, 1); | |
134 | ||
135 | Tap.equal(builtLog.message, 'example', | |
136 | '#buildLog() should use the message property as the message if available'); | |
137 | Tap.equal(builtLog.rainbows, true, | |
138 | '#buildLog() should extend the object with its properties'); | |
139 | ||
140 | /** | |
141 | * TEST: #log() with builtLog. | |
142 | */ | |
143 | co.log(builtLog); | |
144 | ||
145 | levelCheck = dummyLoggerA.values.reduce(levelChecker(1), 0); | |
146 | ||
147 | Tap.equal(levelCheck, 1, | |
148 | '#log() calls using a pre-built cologne log should maintain the log level'); | |
149 | ||
150 | ||
151 | /** | |
152 | * TEST: #removeLogger() | |
153 | */ | |
154 | co.removeLogger(dummyLoggerC); | |
155 | ||
156 | Tap.equal(co.loggers.length, 2, | |
157 | '#removeLogger() should do nothing if it can\'t find a logger'); | |
158 | ||
159 | co.log(...logs); | |
160 | co.removeLogger(dummyLoggerB); | |
161 | co.log(1); | |
162 | ||
163 | Tap.equal(co.loggers.length, 1, | |
164 | '#removeLogger() should remove a logger'); | |
165 | ||
166 | Tap.notEqual(dummyLoggerB.values.length, dummyLoggerA.values.length, | |
167 | '#removeLogger() should no longer affect removed logs'); | |
168 | ||
169 | /** | |
170 | * TEST: #addLogger() | |
171 | */ | |
172 | ||
173 | co.addLogger(dummyLoggerC); | |
174 | co.log(...logs); | |
175 | ||
176 | Tap.equal(dummyLoggerC.values.length, logs.length, | |
177 | '#addLogger() should add loggers after instance is live'); |