guard-jasmine 0.9.14 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +89 -18
- data/bin/guard-jasmine-debug +1 -1
- data/lib/guard/jasmine/phantomjs/guard-jasmine.coffee +115 -0
- data/lib/guard/jasmine/phantomjs/lib/console.js +168 -0
- data/lib/guard/jasmine/phantomjs/lib/reporter.js +134 -0
- data/lib/guard/jasmine/phantomjs/src/console.coffee +149 -0
- data/lib/guard/jasmine/phantomjs/src/reporter.coffee +134 -0
- data/lib/guard/jasmine/phantomjs/test/console_spec.coffee +125 -0
- data/lib/guard/jasmine/phantomjs/test/reporter_spec.coffee +0 -0
- data/lib/guard/jasmine/runner.rb +5 -3
- data/lib/guard/jasmine/task.rb +1 -1
- data/lib/guard/jasmine/version.rb +1 -1
- metadata +53 -25
- data/lib/guard/jasmine/phantomjs/run-jasmine.coffee +0 -247
@@ -0,0 +1,134 @@
|
|
1
|
+
(function() {
|
2
|
+
var ConsoleReporter;
|
3
|
+
|
4
|
+
ConsoleReporter = (function() {
|
5
|
+
|
6
|
+
function ConsoleReporter() {}
|
7
|
+
|
8
|
+
ConsoleReporter.prototype.runnerResult = {
|
9
|
+
passed: false,
|
10
|
+
stats: {
|
11
|
+
specs: 0,
|
12
|
+
failures: 0,
|
13
|
+
time: 0.0
|
14
|
+
},
|
15
|
+
suites: []
|
16
|
+
};
|
17
|
+
|
18
|
+
ConsoleReporter.prototype.specCount = 0;
|
19
|
+
|
20
|
+
ConsoleReporter.prototype.currentSpecs = [];
|
21
|
+
|
22
|
+
ConsoleReporter.prototype.nestedSuiteResults = {};
|
23
|
+
|
24
|
+
ConsoleReporter.prototype.reportSpecStarting = function(spec) {
|
25
|
+
return console.log("SPEC_START: " + spec.id);
|
26
|
+
};
|
27
|
+
|
28
|
+
ConsoleReporter.prototype.reportSpecResults = function(spec) {
|
29
|
+
var messages, result, specResult, _i, _len, _ref;
|
30
|
+
if (!spec.results().skipped) {
|
31
|
+
specResult = {
|
32
|
+
id: spec.id,
|
33
|
+
description: spec.description,
|
34
|
+
passed: spec.results().failedCount === 0
|
35
|
+
};
|
36
|
+
if (spec.results().failedCount !== 0) {
|
37
|
+
messages = [];
|
38
|
+
_ref = spec.results().getItems();
|
39
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
40
|
+
result = _ref[_i];
|
41
|
+
messages.push(result.message);
|
42
|
+
}
|
43
|
+
if (messages.length !== 0) specResult['messages'] = messages;
|
44
|
+
}
|
45
|
+
this.specCount += 1;
|
46
|
+
return this.currentSpecs.push(specResult);
|
47
|
+
}
|
48
|
+
};
|
49
|
+
|
50
|
+
ConsoleReporter.prototype.reportSuiteResults = function(suite) {
|
51
|
+
var parent, suiteResult, _ref;
|
52
|
+
if (!suite.results().skipped) {
|
53
|
+
suiteResult = {
|
54
|
+
id: suite.id,
|
55
|
+
parent: (_ref = suite.parentSuite) != null ? _ref.id : void 0,
|
56
|
+
description: suite.description,
|
57
|
+
passed: suite.results().failedCount === 0,
|
58
|
+
specs: this.currentSpecs,
|
59
|
+
suites: []
|
60
|
+
};
|
61
|
+
if (suite.parentSuite != null) {
|
62
|
+
parent = suite.parentSuite.id;
|
63
|
+
if (!this.nestedSuiteResults[parent]) {
|
64
|
+
this.nestedSuiteResults[parent] = [];
|
65
|
+
}
|
66
|
+
this.nestedSuiteResults[parent].push(suiteResult);
|
67
|
+
} else {
|
68
|
+
this.addNestedSuites(suiteResult);
|
69
|
+
this.removeEmptySuites(suiteResult);
|
70
|
+
if (suiteResult.specs.length !== 0 || suiteResult.suites.length !== 0) {
|
71
|
+
this.runnerResult.suites.push(suiteResult);
|
72
|
+
}
|
73
|
+
}
|
74
|
+
}
|
75
|
+
return this.currentSpecs = [];
|
76
|
+
};
|
77
|
+
|
78
|
+
ConsoleReporter.prototype.reportRunnerResults = function(runner) {
|
79
|
+
var runtime;
|
80
|
+
runtime = (new Date().getTime() - this.startTime) / 1000;
|
81
|
+
this.runnerResult['passed'] = runner.results().failedCount === 0;
|
82
|
+
this.runnerResult['stats'] = {
|
83
|
+
specs: this.specCount,
|
84
|
+
failures: runner.results().failedCount,
|
85
|
+
time: runtime
|
86
|
+
};
|
87
|
+
return console.log("RUNNER_RESULT: " + (JSON.stringify(this.runnerResult)));
|
88
|
+
};
|
89
|
+
|
90
|
+
ConsoleReporter.prototype.reportRunnerStarting = function(runner) {
|
91
|
+
return this.startTime = new Date().getTime();
|
92
|
+
};
|
93
|
+
|
94
|
+
ConsoleReporter.prototype.addNestedSuites = function(suiteResult) {
|
95
|
+
var suite, _i, _len, _ref, _results;
|
96
|
+
if (this.nestedSuiteResults[suiteResult.id]) {
|
97
|
+
_ref = this.nestedSuiteResults[suiteResult.id];
|
98
|
+
_results = [];
|
99
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
100
|
+
suite = _ref[_i];
|
101
|
+
this.addNestedSuites(suite);
|
102
|
+
_results.push(suiteResult.suites.push(suite));
|
103
|
+
}
|
104
|
+
return _results;
|
105
|
+
}
|
106
|
+
};
|
107
|
+
|
108
|
+
ConsoleReporter.prototype.removeEmptySuites = function(suiteResult) {
|
109
|
+
var suite, suites, _i, _len, _ref;
|
110
|
+
suites = [];
|
111
|
+
_ref = suiteResult.suites;
|
112
|
+
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
113
|
+
suite = _ref[_i];
|
114
|
+
this.removeEmptySuites(suite);
|
115
|
+
if (suite.suites.length !== 0 || suite.specs.length !== 0) {
|
116
|
+
suites.push(suite);
|
117
|
+
}
|
118
|
+
}
|
119
|
+
return suiteResult.suites = suites;
|
120
|
+
};
|
121
|
+
|
122
|
+
ConsoleReporter.prototype.log = function(message) {};
|
123
|
+
|
124
|
+
return ConsoleReporter;
|
125
|
+
|
126
|
+
})();
|
127
|
+
|
128
|
+
if (typeof module !== 'undefined' && module.exports) {
|
129
|
+
module.exports = ConsoleReporter;
|
130
|
+
} else {
|
131
|
+
window.ConsoleReporter = ConsoleReporter;
|
132
|
+
}
|
133
|
+
|
134
|
+
}).call(this);
|
@@ -0,0 +1,149 @@
|
|
1
|
+
# Simplified console logger rreplacement.
|
2
|
+
#
|
3
|
+
class Console
|
4
|
+
|
5
|
+
# Construct the console wrapper and attach
|
6
|
+
# the log methods.
|
7
|
+
#
|
8
|
+
constructor: (console) ->
|
9
|
+
log = console.log
|
10
|
+
|
11
|
+
console.log = (args...) ->
|
12
|
+
log.call console, Console.format(args...)
|
13
|
+
|
14
|
+
console.info = (args...) ->
|
15
|
+
log.call console, "INFO: #{ Console.format(args...) }"
|
16
|
+
|
17
|
+
console.warn = (args...) ->
|
18
|
+
log.call console, "WARN: #{ Console.format(args...) }"
|
19
|
+
|
20
|
+
console.error = (args...) ->
|
21
|
+
log.call console, "ERROR: #{ Console.format(args...) }"
|
22
|
+
|
23
|
+
console.debug = (args...) ->
|
24
|
+
log.call console, "DEBUG: #{ Console.format(args...) }"
|
25
|
+
|
26
|
+
@MAX_OBJECT_DEPTH: 2
|
27
|
+
|
28
|
+
# Format the console arguments. This parses the known
|
29
|
+
# % placeholder with the object value and/or concatenates
|
30
|
+
# the arguments.
|
31
|
+
#
|
32
|
+
# @param [Array] args the log arguments
|
33
|
+
#
|
34
|
+
@format: (args...) ->
|
35
|
+
result = []
|
36
|
+
|
37
|
+
if typeof args[0] is 'string' and /%[sdifo]/gi.test args[0]
|
38
|
+
arg = args.shift()
|
39
|
+
result.push arg.replace /%[sdifo]/gi, (str) => Console.inspect args.shift(), str
|
40
|
+
|
41
|
+
result.push Console.inspect arg for arg in args
|
42
|
+
result.join ' '
|
43
|
+
|
44
|
+
# Inspect a log object and return a string representation.
|
45
|
+
#
|
46
|
+
# @param [Object] object the object to inspect
|
47
|
+
# @param [String] type the format type
|
48
|
+
# @return [String] a string representation
|
49
|
+
#
|
50
|
+
@inspect: (object, type) ->
|
51
|
+
switch type
|
52
|
+
when '%s'
|
53
|
+
result = String(object)
|
54
|
+
result = match[1] if match = /'(.*)'/.exec result
|
55
|
+
|
56
|
+
when '%d', '%i'
|
57
|
+
result = parseInt object
|
58
|
+
|
59
|
+
when '%f'
|
60
|
+
result = parseFloat object
|
61
|
+
|
62
|
+
else
|
63
|
+
type = Object::toString.call(object).slice 8, -1
|
64
|
+
|
65
|
+
if type is 'Object' and object.toJSON
|
66
|
+
result = Console.pp object.toJSON()
|
67
|
+
|
68
|
+
else if type is 'Object' and object.toString and object.toString() isnt '[object Object]'
|
69
|
+
result = Console.pp object.toString()
|
70
|
+
result = match[1] if match = /'(.*)'/.exec result
|
71
|
+
|
72
|
+
else if type is 'String'
|
73
|
+
result = String(object)
|
74
|
+
result = match[1] if match = /'(.*)'/.exec result
|
75
|
+
|
76
|
+
else
|
77
|
+
result = Console.pp object
|
78
|
+
|
79
|
+
result
|
80
|
+
|
81
|
+
# Pretty print an object
|
82
|
+
#
|
83
|
+
# @param [Object] object the object to inspect
|
84
|
+
# @param [Number] depth the object depth
|
85
|
+
# @return [String] a string representation
|
86
|
+
#
|
87
|
+
@pp: (object, depth = 0) ->
|
88
|
+
type = Object::toString.call(object).slice 8, -1
|
89
|
+
result = ''
|
90
|
+
|
91
|
+
switch type
|
92
|
+
when 'Undefined', 'Null'
|
93
|
+
result += type.toLowerCase()
|
94
|
+
|
95
|
+
when 'Boolean', 'Number', 'Date'
|
96
|
+
result += object.toString()
|
97
|
+
|
98
|
+
when 'String'
|
99
|
+
result += "'#{ object.toString() }'"
|
100
|
+
|
101
|
+
when 'Array'
|
102
|
+
if object.length > 0
|
103
|
+
result += '['
|
104
|
+
|
105
|
+
for value in object
|
106
|
+
if depth < Console.MAX_OBJECT_DEPTH or Object::toString.call(value).slice(8, -1) isnt 'Object'
|
107
|
+
result += "#{ Console.pp value, depth + 1 }, "
|
108
|
+
else
|
109
|
+
result += "[Object], "
|
110
|
+
|
111
|
+
result = result.slice(0, -2)
|
112
|
+
result += ']'
|
113
|
+
else
|
114
|
+
result += '[]'
|
115
|
+
|
116
|
+
when 'Object'
|
117
|
+
if object.jquery
|
118
|
+
if object.length > 0
|
119
|
+
result += '['
|
120
|
+
|
121
|
+
object.each -> result += jQuery(@).html()
|
122
|
+
|
123
|
+
result += ']'
|
124
|
+
else
|
125
|
+
result += '[]'
|
126
|
+
|
127
|
+
else if Object.keys(object).length > 0
|
128
|
+
result += '{ '
|
129
|
+
|
130
|
+
for key, value of object
|
131
|
+
if depth < Console.MAX_OBJECT_DEPTH or Object::toString.call(value).slice(8, -1) isnt 'Object'
|
132
|
+
result += "#{ key }: #{ Console.pp value, depth + 1 }, " if object.hasOwnProperty key
|
133
|
+
else
|
134
|
+
result += "#{ key }: [Object], "
|
135
|
+
|
136
|
+
result = result.slice(0, -2)
|
137
|
+
result += ' }'
|
138
|
+
else
|
139
|
+
result += '{}'
|
140
|
+
|
141
|
+
when 'Function'
|
142
|
+
result += '[Function]'
|
143
|
+
|
144
|
+
result
|
145
|
+
|
146
|
+
if typeof module isnt 'undefined' and module.exports
|
147
|
+
module.exports = Console if module
|
148
|
+
else
|
149
|
+
new Console(window.console) if window
|
@@ -0,0 +1,134 @@
|
|
1
|
+
# Jasmine Reporter that logs reporter steps
|
2
|
+
# and results to the console.
|
3
|
+
#
|
4
|
+
class ConsoleReporter
|
5
|
+
|
6
|
+
runnerResult: {
|
7
|
+
passed: false
|
8
|
+
stats: {
|
9
|
+
specs: 0
|
10
|
+
failures: 0
|
11
|
+
time: 0.0
|
12
|
+
}
|
13
|
+
suites: []
|
14
|
+
}
|
15
|
+
|
16
|
+
specCount: 0
|
17
|
+
currentSpecs: []
|
18
|
+
nestedSuiteResults: {}
|
19
|
+
|
20
|
+
# Report the start of a spec.
|
21
|
+
#
|
22
|
+
# @param spec [jasmine.Spec] the spec
|
23
|
+
#
|
24
|
+
reportSpecStarting: (spec) ->
|
25
|
+
console.log "SPEC_START: #{ spec.id }"
|
26
|
+
|
27
|
+
# Report results from a spec.
|
28
|
+
#
|
29
|
+
# @param spec [jasmine.Spec] the spec
|
30
|
+
#
|
31
|
+
reportSpecResults: (spec) ->
|
32
|
+
unless spec.results().skipped
|
33
|
+
specResult = {
|
34
|
+
id: spec.id
|
35
|
+
description: spec.description
|
36
|
+
passed: spec.results().failedCount is 0
|
37
|
+
}
|
38
|
+
|
39
|
+
if spec.results().failedCount isnt 0
|
40
|
+
messages = []
|
41
|
+
messages.push result.message for result in spec.results().getItems()
|
42
|
+
specResult['messages'] = messages if messages.length isnt 0
|
43
|
+
|
44
|
+
@specCount += 1
|
45
|
+
@currentSpecs.push specResult
|
46
|
+
|
47
|
+
# Report results from a suite.
|
48
|
+
#
|
49
|
+
# @param suite [jasmine.Suite] the suite
|
50
|
+
#
|
51
|
+
reportSuiteResults: (suite) ->
|
52
|
+
unless suite.results().skipped
|
53
|
+
suiteResult = {
|
54
|
+
id: suite.id
|
55
|
+
parent: suite.parentSuite?.id
|
56
|
+
description: suite.description
|
57
|
+
passed: suite.results().failedCount is 0
|
58
|
+
specs: @currentSpecs
|
59
|
+
suites: []
|
60
|
+
}
|
61
|
+
|
62
|
+
if suite.parentSuite?
|
63
|
+
parent = suite.parentSuite.id
|
64
|
+
@nestedSuiteResults[parent] = [] unless @nestedSuiteResults[parent]
|
65
|
+
@nestedSuiteResults[parent].push suiteResult
|
66
|
+
else
|
67
|
+
@addNestedSuites suiteResult
|
68
|
+
@removeEmptySuites suiteResult
|
69
|
+
|
70
|
+
if suiteResult.specs.length isnt 0 || suiteResult.suites.length isnt 0
|
71
|
+
@runnerResult.suites.push suiteResult
|
72
|
+
|
73
|
+
@currentSpecs = []
|
74
|
+
|
75
|
+
# Report results from the runner.
|
76
|
+
#
|
77
|
+
# @param runner [jasmine.Runner] the runner
|
78
|
+
#
|
79
|
+
reportRunnerResults: (runner) ->
|
80
|
+
runtime = (new Date().getTime() - @startTime) / 1000
|
81
|
+
|
82
|
+
@runnerResult['passed'] = runner.results().failedCount is 0
|
83
|
+
|
84
|
+
@runnerResult['stats'] = {
|
85
|
+
specs: @specCount
|
86
|
+
failures: runner.results().failedCount
|
87
|
+
time: runtime
|
88
|
+
}
|
89
|
+
|
90
|
+
console.log "RUNNER_RESULT: #{ JSON.stringify(@runnerResult) }"
|
91
|
+
|
92
|
+
# Report the start of the runner
|
93
|
+
#
|
94
|
+
# @param runner [jasmine.Runner] the runner
|
95
|
+
#
|
96
|
+
reportRunnerStarting: (runner) ->
|
97
|
+
@startTime = new Date().getTime()
|
98
|
+
|
99
|
+
# Add all nested suites that have previously
|
100
|
+
# been processed.
|
101
|
+
#
|
102
|
+
# @param suiteResult [Object] the suite result
|
103
|
+
#
|
104
|
+
addNestedSuites: (suiteResult) ->
|
105
|
+
if @nestedSuiteResults[suiteResult.id]
|
106
|
+
for suite in @nestedSuiteResults[suiteResult.id]
|
107
|
+
@addNestedSuites suite
|
108
|
+
suiteResult.suites.push suite
|
109
|
+
|
110
|
+
# Removes suites without child suites or specs.
|
111
|
+
#
|
112
|
+
# @param suiteResult [Object] the suite result
|
113
|
+
#
|
114
|
+
removeEmptySuites: (suiteResult) ->
|
115
|
+
suites = []
|
116
|
+
|
117
|
+
for suite in suiteResult.suites
|
118
|
+
@removeEmptySuites suite
|
119
|
+
|
120
|
+
suites.push suite if suite.suites.length isnt 0 || suite.specs.length isnt 0
|
121
|
+
|
122
|
+
suiteResult.suites = suites
|
123
|
+
|
124
|
+
# Log a message
|
125
|
+
#
|
126
|
+
# @param message [String] the log message
|
127
|
+
#
|
128
|
+
log: (message) ->
|
129
|
+
|
130
|
+
|
131
|
+
if typeof module isnt 'undefined' and module.exports
|
132
|
+
module.exports = ConsoleReporter
|
133
|
+
else
|
134
|
+
window.ConsoleReporter = ConsoleReporter
|
@@ -0,0 +1,125 @@
|
|
1
|
+
sinon = require 'sinon'
|
2
|
+
{expect} = require 'chai'
|
3
|
+
|
4
|
+
Console = require '../src/console'
|
5
|
+
|
6
|
+
describe 'console', ->
|
7
|
+
beforeEach ->
|
8
|
+
@log = sinon.stub()
|
9
|
+
@console = { log: @log }
|
10
|
+
|
11
|
+
new Console(@console)
|
12
|
+
|
13
|
+
describe '#log', ->
|
14
|
+
describe 'with strings', ->
|
15
|
+
it 'logs a single string', ->
|
16
|
+
@console.log 'Hello logger'
|
17
|
+
expect(@log.args[0][0]).to.equal 'Hello logger'
|
18
|
+
|
19
|
+
it 'concatenates multipe strings', ->
|
20
|
+
@console.log 'Hello logger', 'We welcome you', 'Here on Earth'
|
21
|
+
expect(@log.args[0][0]).to.equal 'Hello logger We welcome you Here on Earth'
|
22
|
+
|
23
|
+
it 'replaces a single %s', ->
|
24
|
+
@console.log 'Hello %s!', 'logger'
|
25
|
+
expect(@log.args[0][0]).to.equal 'Hello logger!'
|
26
|
+
|
27
|
+
it 'replaces multiple %s', ->
|
28
|
+
@console.log 'Hello %s, we welcome you to %s!', 'logger', 'Switzerland'
|
29
|
+
expect(@log.args[0][0]).to.equal 'Hello logger, we welcome you to Switzerland!'
|
30
|
+
|
31
|
+
it 'attaches %s surplus strings', ->
|
32
|
+
@console.log 'Hello %s, we welcome you to Switzerland!', 'logger', 'Yay!'
|
33
|
+
expect(@log.args[0][0]).to.equal 'Hello logger, we welcome you to Switzerland! Yay!'
|
34
|
+
|
35
|
+
describe 'with numbers', ->
|
36
|
+
it 'logs a single number', ->
|
37
|
+
@console.log 1
|
38
|
+
expect(@log.args[0][0]).to.equal '1'
|
39
|
+
|
40
|
+
it 'concatenates multipe numbers', ->
|
41
|
+
@console.log 1, 2, 3, 4
|
42
|
+
expect(@log.args[0][0]).to.equal '1 2 3 4'
|
43
|
+
|
44
|
+
it 'replaces a single %d', ->
|
45
|
+
@console.log 'Hello %d!', 1
|
46
|
+
expect(@log.args[0][0]).to.equal 'Hello 1!'
|
47
|
+
|
48
|
+
it 'replaces a single %i', ->
|
49
|
+
@console.log 'Hello %i!', 3
|
50
|
+
expect(@log.args[0][0]).to.equal 'Hello 3!'
|
51
|
+
|
52
|
+
it 'replaces multiple %d', ->
|
53
|
+
@console.log 'I can count %d, %d and %d!', 1, 2, 3
|
54
|
+
expect(@log.args[0][0]).to.equal 'I can count 1, 2 and 3!'
|
55
|
+
|
56
|
+
it 'replaces multiple %i', ->
|
57
|
+
@console.log 'I can count reverse %i, %i and %i!', 3, 2, 1
|
58
|
+
expect(@log.args[0][0]).to.equal 'I can count reverse 3, 2 and 1!'
|
59
|
+
|
60
|
+
it 'attaches %d surplus numbers', ->
|
61
|
+
@console.log 'Hello %d!', 1, 2, 3
|
62
|
+
expect(@log.args[0][0]).to.equal 'Hello 1! 2 3'
|
63
|
+
|
64
|
+
it 'attaches %i surplus numbers', ->
|
65
|
+
@console.log 'Hello %i!', 1, 2, 3
|
66
|
+
expect(@log.args[0][0]).to.equal 'Hello 1! 2 3'
|
67
|
+
|
68
|
+
describe 'with objects', ->
|
69
|
+
it 'logs a boolean', ->
|
70
|
+
@console.log true, false
|
71
|
+
expect(@log.args[0][0]).to.equal 'true false'
|
72
|
+
|
73
|
+
it 'logs a date', ->
|
74
|
+
@console.log new Date('Thu Mar 08 2012 20:28:56 GMT+0100 (CET)')
|
75
|
+
expect(@log.args[0][0]).to.equal 'Thu Mar 08 2012 20:28:56 GMT+0100 (CET)'
|
76
|
+
|
77
|
+
it 'logs an array', ->
|
78
|
+
@console.log [1, 2, 3, 4]
|
79
|
+
expect(@log.args[0][0]).to.equal '[1, 2, 3, 4]'
|
80
|
+
|
81
|
+
it 'logs an object', ->
|
82
|
+
@console.log { a: 1 }
|
83
|
+
expect(@log.args[0][0]).to.equal '{ a: 1 }'
|
84
|
+
|
85
|
+
it 'logs a nested object', ->
|
86
|
+
@console.log "Hello object %o. Nice to meet you", { a: 1, b: { x: 1 } }
|
87
|
+
expect(@log.args[0][0]).to.equal 'Hello object { a: 1, b: { x: 1 } }. Nice to meet you'
|
88
|
+
|
89
|
+
it 'logs a nested object until depth 2', ->
|
90
|
+
@console.log "Hello object %o. Nice to meet you", { a: 1, b: { x: { a: 1, b: { x: 1 } } } }
|
91
|
+
expect(@log.args[0][0]).to.equal 'Hello object { a: 1, b: { x: { a: 1, b: [Object] } } }. Nice to meet you'
|
92
|
+
|
93
|
+
describe 'with an Object that implements toString()', ->
|
94
|
+
it '%s logs the custom string representation', ->
|
95
|
+
@console.log 'I have a toString(): %s!', { toString: -> '[Yepa]' }
|
96
|
+
expect(@log.args[0][0]).to.equal 'I have a toString(): [Yepa]!'
|
97
|
+
|
98
|
+
it '%o logs the custom string representation', ->
|
99
|
+
@console.log 'I have a toString(): %o!', { toString: -> '[Yepa]' }
|
100
|
+
expect(@log.args[0][0]).to.equal 'I have a toString(): [Yepa]!'
|
101
|
+
|
102
|
+
describe 'with an Object that implements toJSON()', ->
|
103
|
+
it '%o logs the custom JSON representation', ->
|
104
|
+
@console.log 'I have a toJSON(): %o!', { toJSON: -> { a: 1 } }
|
105
|
+
expect(@log.args[0][0]).to.equal 'I have a toJSON(): { a: 1 }!'
|
106
|
+
|
107
|
+
describe '#info', ->
|
108
|
+
it 'prefixes a string with INFO', ->
|
109
|
+
@console.info true, { a: 1 }, 'Hello logger'
|
110
|
+
expect(@log.args[0][0]).to.equal 'INFO: true { a: 1 } Hello logger'
|
111
|
+
|
112
|
+
describe '#warn', ->
|
113
|
+
it 'prefixes a string with WARN', ->
|
114
|
+
@console.warn true, { a: 1 }, 'Hello logger'
|
115
|
+
expect(@log.args[0][0]).to.equal 'WARN: true { a: 1 } Hello logger'
|
116
|
+
|
117
|
+
describe '#error', ->
|
118
|
+
it 'prefixes a string with ERROR', ->
|
119
|
+
@console.error true, { a: 1 }, 'Hello logger'
|
120
|
+
expect(@log.args[0][0]).to.equal 'ERROR: true { a: 1 } Hello logger'
|
121
|
+
|
122
|
+
describe '#debug', ->
|
123
|
+
it 'prefixes a string with DEBUG', ->
|
124
|
+
@console.debug true, { a: 1 }, 'Hello logger'
|
125
|
+
expect(@log.args[0][0]).to.equal 'DEBUG: true { a: 1 } Hello logger'
|