Skip to content

Commit 39c502c

Browse files
author
Denys Rul
committed
MAGETWO-59587: Debugging and profiling tools for UI Components and Javascript modules
- Add tests
1 parent b75cb6b commit 39c502c

File tree

5 files changed

+730
-0
lines changed

5 files changed

+730
-0
lines changed
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
/**
2+
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
/* eslint-disable max-nested-callbacks */
6+
/*jscs:disable jsDoc*/
7+
8+
define([
9+
'Magento_Ui/js/lib/logger/console-logger',
10+
'Magento_Ui/js/lib/logger/logger',
11+
'Magento_Ui/js/lib/logger/entry',
12+
'Magento_Ui/js/lib/logger/levels-poll',
13+
'Magento_Ui/js/lib/logger/message-poll'
14+
], function (logger, Logger, LogEntry, levelsPoll, messagePoll) {
15+
'use strict';
16+
17+
var levels = levelsPoll.getLevels();
18+
19+
describe('Magento_Ui/js/lib/logger/console-logger', function () {
20+
describe('constructor', function () {
21+
it('is an instance of the Logger class', function () {
22+
expect(logger instanceof Logger).toBe(true);
23+
});
24+
25+
it('provides reference to the available log levels', function () {
26+
expect(logger.levels).toBe(levels);
27+
});
28+
29+
it('provides reference to the poll of available messages', function () {
30+
expect(logger.messages).toBe(messagePoll);
31+
});
32+
});
33+
34+
describe('error', function () {
35+
it('allows to provide code from the messages poll', function () {
36+
var entry;
37+
38+
spyOn(Logger.prototype, 'error').and.callThrough();
39+
40+
logger.setDisplayLevel(logger.levels.NONE);
41+
logger.messages.addMessage('ERROR_MESSAGE', 'error message');
42+
43+
entry = logger.error('ERROR_MESSAGE');
44+
45+
expect(entry instanceof LogEntry).toBe(true);
46+
expect(Logger.prototype.error).toHaveBeenCalled();
47+
expect(entry).toEqual(jasmine.objectContaining({
48+
message: 'error message',
49+
data: {
50+
messageCode: 'ERROR_MESSAGE'
51+
}
52+
}));
53+
});
54+
});
55+
56+
describe('warn', function () {
57+
it('allows to provide code from the messages poll', function () {
58+
var entry;
59+
60+
spyOn(Logger.prototype, 'warn').and.callThrough();
61+
62+
logger.setDisplayLevel(logger.levels.NONE);
63+
logger.messages.addMessage('WARN_MESSAGE', 'warn message');
64+
65+
entry = logger.warn('WARN_MESSAGE');
66+
67+
expect(entry instanceof LogEntry).toBe(true);
68+
expect(Logger.prototype.warn).toHaveBeenCalled();
69+
expect(entry).toEqual(jasmine.objectContaining({
70+
message: 'warn message',
71+
data: {
72+
messageCode: 'WARN_MESSAGE'
73+
}
74+
}));
75+
});
76+
});
77+
78+
describe('info', function () {
79+
it('allows to provide code from the messages poll', function () {
80+
var entry;
81+
82+
spyOn(Logger.prototype, 'info').and.callThrough();
83+
84+
logger.setDisplayLevel(logger.levels.NONE);
85+
logger.messages.addMessage('INFO_MESSAGE', 'info message');
86+
87+
entry = logger.info('INFO_MESSAGE');
88+
89+
expect(entry instanceof LogEntry).toBe(true);
90+
expect(Logger.prototype.info).toHaveBeenCalled();
91+
expect(entry).toEqual(jasmine.objectContaining({
92+
message: 'info message',
93+
data: {
94+
messageCode: 'INFO_MESSAGE'
95+
}
96+
}));
97+
});
98+
});
99+
100+
describe('debug', function () {
101+
it('allows to provide code from the messages poll', function () {
102+
var entry;
103+
104+
spyOn(Logger.prototype, 'debug').and.callThrough();
105+
106+
logger.setDisplayLevel(logger.levels.NONE);
107+
logger.messages.addMessage('DEBUG_MESSAGE', 'debug message');
108+
109+
entry = logger.debug('DEBUG_MESSAGE');
110+
111+
expect(entry instanceof LogEntry).toBe(true);
112+
expect(Logger.prototype.debug).toHaveBeenCalled();
113+
expect(entry).toEqual(jasmine.objectContaining({
114+
message: 'debug message',
115+
data: {
116+
messageCode: 'DEBUG_MESSAGE'
117+
}
118+
}));
119+
});
120+
});
121+
});
122+
});
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
/**
2+
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
/* eslint-disable max-nested-callbacks */
6+
/*jscs:disable jsDoc*/
7+
8+
define([
9+
'Magento_Ui/js/lib/logger/console-output-handler',
10+
'Magento_Ui/js/lib/logger/levels-poll'
11+
], function (ConsoleHandler, levelsPoll) {
12+
'use strict';
13+
14+
var levels = levelsPoll.getLevels(),
15+
formatter = {
16+
process: function (entry) {
17+
return 'Formatted message: ' + entry.message;
18+
}
19+
};
20+
21+
describe('Magento_Ui/js/lib/logger/console-output-handler', function () {
22+
describe('show', function () {
23+
it('displays an entry of the "error" level', function () {
24+
var handler = new ConsoleHandler(formatter),
25+
entry = {
26+
level: levels.ERROR,
27+
message: 'error'
28+
};
29+
30+
spyOn(console, 'error');
31+
spyOn(formatter, 'process').and.callThrough();
32+
33+
handler.show(entry);
34+
35+
expect(formatter.process).toHaveBeenCalledWith(entry);
36+
expect(console.error).toHaveBeenCalledWith('Formatted message: error');
37+
});
38+
39+
it('displays an entry of the "warn" level', function () {
40+
var handler = new ConsoleHandler(formatter),
41+
entry = {
42+
level: levels.WARN,
43+
message: 'warn message'
44+
};
45+
46+
spyOn(console, 'warn');
47+
spyOn(formatter, 'process').and.callThrough();
48+
49+
handler.show(entry);
50+
51+
expect(formatter.process).toHaveBeenCalledWith(entry);
52+
expect(console.warn).toHaveBeenCalledWith('Formatted message: warn message');
53+
});
54+
55+
it('displays an entry of the "info" level', function () {
56+
var handler = new ConsoleHandler(formatter),
57+
entry = {
58+
level: levels.INFO,
59+
message: 'info message'
60+
};
61+
62+
spyOn(console, 'info');
63+
spyOn(formatter, 'process').and.callThrough();
64+
65+
handler.show(entry);
66+
67+
expect(formatter.process).toHaveBeenCalledWith(entry);
68+
expect(console.info).toHaveBeenCalledWith('Formatted message: info message');
69+
});
70+
71+
it('displays an entry of the "debug" levels', function () {
72+
var handler = new ConsoleHandler(formatter),
73+
entry = {
74+
level: levels.DEBUG,
75+
message: 'debug message'
76+
};
77+
78+
spyOn(console, 'log');
79+
spyOn(formatter, 'process').and.callThrough();
80+
81+
handler.show(entry);
82+
83+
expect(formatter.process).toHaveBeenCalledWith(entry);
84+
expect(console.log).toHaveBeenCalledWith('Formatted message: debug message');
85+
});
86+
});
87+
88+
describe('dump', function () {
89+
it('displays multiple entries', function () {
90+
var handler = new ConsoleHandler(formatter),
91+
debugEntry = {},
92+
warnEntry = {};
93+
94+
spyOn(handler, 'show');
95+
96+
handler.dump([debugEntry, warnEntry]);
97+
98+
expect(handler.show).toHaveBeenCalledTimes(2);
99+
expect(handler.show.calls.argsFor(0)[0]).toBe(debugEntry);
100+
expect(handler.show.calls.argsFor(1)[0]).toBe(warnEntry);
101+
});
102+
});
103+
});
104+
});
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/**
2+
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
/* eslint-disable max-nested-callbacks */
6+
/*jscs:disable jsDoc*/
7+
8+
define([
9+
'Magento_Ui/js/lib/logger/entry',
10+
'Magento_Ui/js/lib/logger/levels-poll'
11+
], function (Entry, levelsPoll) {
12+
'use strict';
13+
14+
var levels = levelsPoll.getLevels();
15+
16+
describe('Magento_Ui/js/lib/logger/entry', function () {
17+
describe('constructor', function () {
18+
it('has the "level" field', function () {
19+
var entry = new Entry('message', levels.INFO, {});
20+
21+
expect(entry.level).toBe(levels.INFO);
22+
});
23+
24+
it('contains name of the provided level', function () {
25+
var entry;
26+
27+
spyOn(levelsPoll, 'getNameByCode').and.callFake(function () {
28+
return 'level\'s name';
29+
});
30+
31+
entry = new Entry('message', levels.INFO, {});
32+
33+
expect(entry.levelName).toBe('level\'s name');
34+
});
35+
36+
it('has the "message" field', function () {
37+
var entryMessage = 'entry message',
38+
entry = new Entry(entryMessage, levels.INFO, {});
39+
40+
expect(entry.message).toBe(entryMessage);
41+
});
42+
43+
it('doesn\'t interpolate provided message', function () {
44+
var entryMessage = '${ $.customData }',
45+
entry = new Entry(entryMessage, levels.INFO, {
46+
customData: 'foo'
47+
});
48+
49+
expect(entry.message).toBe(entryMessage);
50+
});
51+
52+
it('has the "data" field', function () {
53+
var entryData = {},
54+
entry = new Entry('message', levels.INFO, entryData);
55+
56+
expect(entry.data).toBe(entryData);
57+
});
58+
59+
it('has the "timestamp" field', function () {
60+
var entry = new Entry('message', levels.INFO, {});
61+
62+
expect(entry.timestamp).toBe(Date.now());
63+
});
64+
});
65+
});
66+
});
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
/**
2+
* Copyright © 2013-2017 Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
/* eslint-disable max-nested-callbacks */
6+
/*jscs:disable jsDoc*/
7+
8+
define([
9+
'Magento_Ui/js/lib/logger/formatter',
10+
'moment'
11+
], function (Formatter, moment) {
12+
'use strict';
13+
14+
describe('Magento_Ui/js/lib/logger/formatter', function () {
15+
describe('process', function () {
16+
it('creates a string representation of the entry using default settings', function () {
17+
var formatter = new Formatter(),
18+
entry,
19+
date;
20+
21+
entry = {
22+
message: 'message text',
23+
levelName: 'DEBUG',
24+
timestamp: Date.now()
25+
};
26+
27+
date = moment(entry.timestamp).format('YYYY-MM-DD hh:mm:ss');
28+
29+
expect(formatter.process(entry)).toBe('[' + date + '] [DEBUG] message text');
30+
});
31+
32+
it('interpolates message of the entry', function () {
33+
var formatter = new Formatter(),
34+
entry,
35+
date;
36+
37+
entry = {
38+
message: 'Foo ${ $.customData }',
39+
levelName: 'DEBUG',
40+
timestamp: Date.now(),
41+
data: {
42+
customData: 'Bar'
43+
}
44+
};
45+
46+
date = moment(entry.timestamp).format('YYYY-MM-DD hh:mm:ss');
47+
48+
expect(formatter.process(entry)).toBe('[' + date + '] [DEBUG] Foo Bar');
49+
});
50+
51+
it('may use custom date format', function () {
52+
var dateFormat = 'MMMM Do YYYY, h:mm:ss a',
53+
formatter = new Formatter(dateFormat),
54+
entry,
55+
date;
56+
57+
entry = {
58+
message: 'message text',
59+
levelName: 'DEBUG',
60+
timestamp: Date.now()
61+
};
62+
63+
date = moment(entry.timestamp).format(dateFormat);
64+
65+
expect(formatter.process(entry)).toBe('[' + date + '] [DEBUG] message text');
66+
});
67+
68+
it('may use custom template', function () {
69+
var dateFormat = 'MMMM Do YYYY, h:mm:ss a',
70+
template = '[${ $.date }]: ${ $.message } (${$.entry.levelName}-CUSTOM)',
71+
formatter = new Formatter(dateFormat, template),
72+
entry,
73+
date;
74+
75+
entry = {
76+
message: 'Foo ${ $.customData }',
77+
levelName: 'DEBUG',
78+
timestamp: Date.now(),
79+
data: {
80+
customData: 'Bar'
81+
}
82+
};
83+
84+
date = moment(entry.timestamp).format(dateFormat);
85+
86+
expect(formatter.process(entry)).toBe('[' + date + ']: Foo Bar (DEBUG-CUSTOM)');
87+
});
88+
});
89+
});
90+
});

0 commit comments

Comments
 (0)