diff --git a/lib/jasmine-core/jasmine-html.js b/lib/jasmine-core/jasmine-html.js
index 307f20e0..26ae6ac9 100644
--- a/lib/jasmine-core/jasmine-html.js
+++ b/lib/jasmine-core/jasmine-html.js
@@ -132,7 +132,7 @@ jasmineRequire.HtmlReporter = function(j$) {
if (result.status === 'failed') {
failures.push(failureDom(result));
}
- addDeprecationWarnings(result);
+ addDeprecationWarnings(result, 'suite');
};
this.specStarted = function(result) {
@@ -168,7 +168,7 @@ jasmineRequire.HtmlReporter = function(j$) {
failures.push(failureDom(result));
}
- addDeprecationWarnings(result);
+ addDeprecationWarnings(result, 'spec');
};
this.displaySpecInCorrectFormat = function(result) {
@@ -307,14 +307,27 @@ jasmineRequire.HtmlReporter = function(j$) {
addDeprecationWarnings(doneResult);
- var warningBarClassName = 'jasmine-bar jasmine-warning';
for (i = 0; i < deprecationWarnings.length; i++) {
- var warning = deprecationWarnings[i];
+ var context;
+
+ switch (deprecationWarnings[i].runnableType) {
+ case 'spec':
+ context = '(in spec: ' + deprecationWarnings[i].runnableName + ')';
+ break;
+ case 'suite':
+ context = '(in suite: ' + deprecationWarnings[i].runnableName + ')';
+ break;
+ default:
+ context = '';
+ }
+
alert.appendChild(
createDom(
'span',
- { className: warningBarClassName },
- 'DEPRECATION: ' + warning
+ { className: 'jasmine-bar jasmine-warning' },
+ 'DEPRECATION: ' + deprecationWarnings[i].message,
+ createDom('br'),
+ context
)
);
}
@@ -625,12 +638,18 @@ jasmineRequire.HtmlReporter = function(j$) {
return addToExistingQueryString('spec', els.join(' '));
}
- function addDeprecationWarnings(result) {
+ function addDeprecationWarnings(result, runnableType) {
if (result && result.deprecationWarnings) {
for (var i = 0; i < result.deprecationWarnings.length; i++) {
var warning = result.deprecationWarnings[i].message;
+ debugger;
if (!j$.util.arrayContains(warning)) {
- deprecationWarnings.push(warning);
+ debugger;
+ deprecationWarnings.push({
+ message: warning,
+ runnableName: result.fullName,
+ runnableType: runnableType
+ });
}
}
}
diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js
index 71194eeb..f86e9f55 100644
--- a/lib/jasmine-core/jasmine.js
+++ b/lib/jasmine-core/jasmine.js
@@ -1537,12 +1537,22 @@ getJasmineRequireObj().Env = function(j$) {
this.deprecated = function(deprecation) {
var runnable = currentRunnable() || topSuite;
+ var context;
+
+ if (runnable === topSuite) {
+ context = '';
+ } else if (runnable === currentSuite()) {
+ context = ' (in suite: ' + runnable.getFullName() + ')';
+ } else {
+ context = ' (in spec: ' + runnable.getFullName() + ')';
+ }
+
runnable.addDeprecationWarning(deprecation);
if (
typeof console !== 'undefined' &&
typeof console.error === 'function'
) {
- console.error('DEPRECATION:', deprecation);
+ console.error('DEPRECATION: ' + deprecation + context);
}
};
@@ -7151,17 +7161,21 @@ getJasmineRequireObj().QueueRunner = function(j$) {
if (retval && j$.isFunction_(retval.then)) {
// Issue a warning that matches the user's code
if (j$.isAsyncFunction_(fn)) {
- this.deprecated('An asynchronous before/it/after ' +
- 'function was defined with the async keyword but also took a ' +
- 'done callback. This is not supported and will stop working in' +
- ' the future. Either remove the done callback (recommended) or ' +
- 'remove the async keyword.');
+ this.deprecated(
+ 'An asynchronous before/it/after ' +
+ 'function was defined with the async keyword but also took a ' +
+ 'done callback. This is not supported and will stop working in' +
+ ' the future. Either remove the done callback (recommended) or ' +
+ 'remove the async keyword.'
+ );
} else {
- this.deprecated('An asynchronous before/it/after ' +
- 'function took a done callback but also returned a promise. ' +
- 'This is not supported and will stop working in the future. ' +
- 'Either remove the done callback (recommended) or change the ' +
- 'function to not return a promise.');
+ this.deprecated(
+ 'An asynchronous before/it/after ' +
+ 'function took a done callback but also returned a promise. ' +
+ 'This is not supported and will stop working in the future. ' +
+ 'Either remove the done callback (recommended) or change the ' +
+ 'function to not return a promise.'
+ );
}
}
};
diff --git a/spec/core/QueueRunnerSpec.js b/spec/core/QueueRunnerSpec.js
index c722aaff..7333b02a 100644
--- a/spec/core/QueueRunnerSpec.js
+++ b/spec/core/QueueRunnerSpec.js
@@ -528,11 +528,12 @@ describe('QueueRunner', function() {
queueRunner.execute();
- expect(deprecated).toHaveBeenCalledWith('An asynchronous ' +
- 'before/it/after function took a done callback but also returned a '+
- 'promise. This is not supported and will stop working in the future. ' +
- 'Either remove the done callback (recommended) or change the function ' +
- 'to not return a promise.'
+ expect(deprecated).toHaveBeenCalledWith(
+ 'An asynchronous ' +
+ 'before/it/after function took a done callback but also returned a ' +
+ 'promise. This is not supported and will stop working in the future. ' +
+ 'Either remove the done callback (recommended) or change the function ' +
+ 'to not return a promise.'
);
});
@@ -541,17 +542,18 @@ describe('QueueRunner', function() {
eval('var fn = async function(done){};');
var deprecated = jasmine.createSpy('deprecated'),
queueRunner = new jasmineUnderTest.QueueRunner({
- queueableFns: [{fn: fn}],
+ queueableFns: [{ fn: fn }],
deprecated: deprecated
});
queueRunner.execute();
- expect(deprecated).toHaveBeenCalledWith('An asynchronous ' +
- 'before/it/after function was defined with the async keyword but ' +
- 'also took a done callback. This is not supported and will stop ' +
- 'working in the future. Either remove the done callback ' +
- '(recommended) or remove the async keyword.'
+ expect(deprecated).toHaveBeenCalledWith(
+ 'An asynchronous ' +
+ 'before/it/after function was defined with the async keyword but ' +
+ 'also took a done callback. This is not supported and will stop ' +
+ 'working in the future. Either remove the done callback ' +
+ '(recommended) or remove the async keyword.'
);
});
});
diff --git a/spec/core/integration/EnvSpec.js b/spec/core/integration/EnvSpec.js
index b51a7297..a11897b3 100644
--- a/spec/core/integration/EnvSpec.js
+++ b/spec/core/integration/EnvSpec.js
@@ -2294,7 +2294,7 @@ describe("Env integration", function() {
it('should report deprecation warnings on the correct specs and suites', function(done) {
var reporter = jasmine.createSpyObj('reporter', ['jasmineDone', 'suiteDone', 'specDone']);
- // prevent deprecation from being displayed
+ // prevent deprecation from being displayed, as well as letting us observe calls
spyOn(console, "error");
env.addReporter(reporter);
@@ -2316,6 +2316,7 @@ describe("Env integration", function() {
expect(result.deprecationWarnings).toEqual([
jasmine.objectContaining({ message: 'top level deprecation' })
]);
+ expect(console.error).toHaveBeenCalledWith('DEPRECATION: top level deprecation');
expect(reporter.suiteDone).toHaveBeenCalledWith(jasmine.objectContaining({
fullName: 'suite',
@@ -2323,6 +2324,7 @@ describe("Env integration", function() {
jasmine.objectContaining({ message: 'suite level deprecation' })
]
}));
+ expect(console.error).toHaveBeenCalledWith('DEPRECATION: suite level deprecation (in suite: suite)');
expect(reporter.specDone).toHaveBeenCalledWith(jasmine.objectContaining({
fullName: 'suite spec',
@@ -2330,6 +2332,7 @@ describe("Env integration", function() {
jasmine.objectContaining({ message: 'spec level deprecation' })
]
}));
+ expect(console.error).toHaveBeenCalledWith('DEPRECATION: spec level deprecation (in spec: suite spec)');
done();
});
diff --git a/spec/html/HtmlReporterSpec.js b/spec/html/HtmlReporterSpec.js
index 3b4f20e5..c41b68bb 100644
--- a/spec/html/HtmlReporterSpec.js
+++ b/spec/html/HtmlReporterSpec.js
@@ -270,12 +270,14 @@ describe('HtmlReporter', function() {
reporter.jasmineStarted({});
reporter.specDone({
status: 'passed',
+ fullName: 'a spec with a deprecation',
deprecationWarnings: [{ message: 'spec deprecation' }],
failedExpectations: [],
passedExpectations: []
});
reporter.suiteDone({
status: 'passed',
+ fullName: 'a suite with a deprecation',
deprecationWarnings: [{ message: 'suite deprecation' }],
failedExpectations: []
});
@@ -287,12 +289,17 @@ describe('HtmlReporter', function() {
var alertBars = container.querySelectorAll('.jasmine-alert .jasmine-bar');
expect(alertBars.length).toEqual(4);
- expect(alertBars[1].innerHTML).toMatch(/spec deprecation/);
+ expect(alertBars[1].innerHTML).toMatch(
+ /spec deprecation.*\(in spec: a spec with a deprecation\)/
+ );
expect(alertBars[1].getAttribute('class')).toEqual(
'jasmine-bar jasmine-warning'
);
- expect(alertBars[2].innerHTML).toMatch(/suite deprecation/);
+ expect(alertBars[2].innerHTML).toMatch(
+ /suite deprecation.*\(in suite: a suite with a deprecation\)/
+ );
expect(alertBars[3].innerHTML).toMatch(/global deprecation/);
+ expect(alertBars[3].innerHTML).not.toMatch(/in /);
});
});
diff --git a/src/core/Env.js b/src/core/Env.js
index 7e299717..a70413b8 100644
--- a/src/core/Env.js
+++ b/src/core/Env.js
@@ -581,12 +581,22 @@ getJasmineRequireObj().Env = function(j$) {
this.deprecated = function(deprecation) {
var runnable = currentRunnable() || topSuite;
+ var context;
+
+ if (runnable === topSuite) {
+ context = '';
+ } else if (runnable === currentSuite()) {
+ context = ' (in suite: ' + runnable.getFullName() + ')';
+ } else {
+ context = ' (in spec: ' + runnable.getFullName() + ')';
+ }
+
runnable.addDeprecationWarning(deprecation);
if (
typeof console !== 'undefined' &&
typeof console.error === 'function'
) {
- console.error('DEPRECATION:', deprecation);
+ console.error('DEPRECATION: ' + deprecation + context);
}
};
diff --git a/src/core/QueueRunner.js b/src/core/QueueRunner.js
index f009c3b5..be9e7f62 100644
--- a/src/core/QueueRunner.js
+++ b/src/core/QueueRunner.js
@@ -218,17 +218,21 @@ getJasmineRequireObj().QueueRunner = function(j$) {
if (retval && j$.isFunction_(retval.then)) {
// Issue a warning that matches the user's code
if (j$.isAsyncFunction_(fn)) {
- this.deprecated('An asynchronous before/it/after ' +
- 'function was defined with the async keyword but also took a ' +
- 'done callback. This is not supported and will stop working in' +
- ' the future. Either remove the done callback (recommended) or ' +
- 'remove the async keyword.');
+ this.deprecated(
+ 'An asynchronous before/it/after ' +
+ 'function was defined with the async keyword but also took a ' +
+ 'done callback. This is not supported and will stop working in' +
+ ' the future. Either remove the done callback (recommended) or ' +
+ 'remove the async keyword.'
+ );
} else {
- this.deprecated('An asynchronous before/it/after ' +
- 'function took a done callback but also returned a promise. ' +
- 'This is not supported and will stop working in the future. ' +
- 'Either remove the done callback (recommended) or change the ' +
- 'function to not return a promise.');
+ this.deprecated(
+ 'An asynchronous before/it/after ' +
+ 'function took a done callback but also returned a promise. ' +
+ 'This is not supported and will stop working in the future. ' +
+ 'Either remove the done callback (recommended) or change the ' +
+ 'function to not return a promise.'
+ );
}
}
};
diff --git a/src/html/HtmlReporter.js b/src/html/HtmlReporter.js
index 24d3a404..7cb2227e 100644
--- a/src/html/HtmlReporter.js
+++ b/src/html/HtmlReporter.js
@@ -101,7 +101,7 @@ jasmineRequire.HtmlReporter = function(j$) {
if (result.status === 'failed') {
failures.push(failureDom(result));
}
- addDeprecationWarnings(result);
+ addDeprecationWarnings(result, 'suite');
};
this.specStarted = function(result) {
@@ -137,7 +137,7 @@ jasmineRequire.HtmlReporter = function(j$) {
failures.push(failureDom(result));
}
- addDeprecationWarnings(result);
+ addDeprecationWarnings(result, 'spec');
};
this.displaySpecInCorrectFormat = function(result) {
@@ -276,14 +276,27 @@ jasmineRequire.HtmlReporter = function(j$) {
addDeprecationWarnings(doneResult);
- var warningBarClassName = 'jasmine-bar jasmine-warning';
for (i = 0; i < deprecationWarnings.length; i++) {
- var warning = deprecationWarnings[i];
+ var context;
+
+ switch (deprecationWarnings[i].runnableType) {
+ case 'spec':
+ context = '(in spec: ' + deprecationWarnings[i].runnableName + ')';
+ break;
+ case 'suite':
+ context = '(in suite: ' + deprecationWarnings[i].runnableName + ')';
+ break;
+ default:
+ context = '';
+ }
+
alert.appendChild(
createDom(
'span',
- { className: warningBarClassName },
- 'DEPRECATION: ' + warning
+ { className: 'jasmine-bar jasmine-warning' },
+ 'DEPRECATION: ' + deprecationWarnings[i].message,
+ createDom('br'),
+ context
)
);
}
@@ -594,12 +607,18 @@ jasmineRequire.HtmlReporter = function(j$) {
return addToExistingQueryString('spec', els.join(' '));
}
- function addDeprecationWarnings(result) {
+ function addDeprecationWarnings(result, runnableType) {
if (result && result.deprecationWarnings) {
for (var i = 0; i < result.deprecationWarnings.length; i++) {
var warning = result.deprecationWarnings[i].message;
+ debugger;
if (!j$.util.arrayContains(warning)) {
- deprecationWarnings.push(warning);
+ debugger;
+ deprecationWarnings.push({
+ message: warning,
+ runnableName: result.fullName,
+ runnableType: runnableType
+ });
}
}
}