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