From c584f182ab47af427c60030cb63ea0ac1db19964 Mon Sep 17 00:00:00 2001 From: "Davis W. Frank & Rajan Agaskar" Date: Fri, 7 Dec 2012 11:11:09 -0800 Subject: [PATCH] Fix getFullName on spec. - Fixes specFiltering on nested specs --- lib/jasmine-core/jasmine.js | 17 +++++------------ spec/core/ClockSpec.js | 2 -- spec/core/EnvSpec.js | 26 +++++++++++++++++++++++++- spec/core/SpecSpec.js | 4 +--- src/core/Env.js | 12 +++--------- src/core/Spec.js | 5 ++--- 6 files changed, 36 insertions(+), 30 deletions(-) diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index dae085c3..87401787 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -593,14 +593,8 @@ jasmine.buildExpectationResult = function(params) { var specConstructor = jasmine.Spec; - // TODO: this deserves a better name (not a Factory the way others are) - var fullNameFactory = function(spec, currentSuite) { - var descriptions = []; - for (var suite = currentSuite; suite; suite = suite.parentSuite) { - descriptions.push(suite.description) - } - descriptions.push(spec.description); - return descriptions.join(' ') + '.'; + var getSpecName = function(spec, currentSuite) { + return currentSuite.getFullName() + ' ' + spec.description + '.'; }; var buildExpectationResult = jasmine.buildExpectationResult; @@ -616,7 +610,7 @@ jasmine.buildExpectationResult = function(params) { expectationFactory: expectationFactory, exceptionFormatter: exceptionFormatter, resultCallback: specResultCallback, - fullNameFactory: function(spec) { return fullNameFactory(spec, suite) }, + getSpecName: function(spec) { return getSpecName(spec, suite) }, startCallback: startCallback, description: description, catchExceptions: self.catchExceptions, @@ -1933,7 +1927,7 @@ jasmine.Spec = function(attrs) { this.catchExceptions = attrs.catchExceptions; this.startCallback = attrs.startCallback || function() {}; this.exceptionFormatter = attrs.exceptionFormatter || function() {}; - this.fullNameFactory = attrs.fullNameFactory; + this.getSpecName = attrs.getSpecName; this.expectationResultFactory = attrs.expectationResultFactory || function() {}; }; @@ -2013,9 +2007,8 @@ jasmine.Spec.prototype.status = function() { } }; -//TODO: remove jasmine.Spec.prototype.getFullName = function() { - return this.fullNameFactory(this); + return this.getSpecName(this); } /** * Internal representation of a Jasmine suite. diff --git a/spec/core/ClockSpec.js b/spec/core/ClockSpec.js index f5135c31..84cbf0a3 100644 --- a/spec/core/ClockSpec.js +++ b/spec/core/ClockSpec.js @@ -1,7 +1,5 @@ describe("Clock", function() { -// TODO: fullName/SpecFilter is broken, so don't nest describes you want to filter - it("calls the global setTimeout directly if Clock is not installed", function() { var setTimeout = jasmine.createSpy('setTimeout'), delayedFunctionScheduler = jasmine.createSpyObj('delayedFunctionScheduler', ['scheduleFunction']), diff --git a/spec/core/EnvSpec.js b/spec/core/EnvSpec.js index 3190a6dd..32c734c6 100644 --- a/spec/core/EnvSpec.js +++ b/spec/core/EnvSpec.js @@ -158,7 +158,7 @@ describe("jasmine.Env", function() { }); }); -describe("jasmine Env", function() { +describe("jasmine Env (integration)", function() { it("Mock clock can be installed and used in tests", function() { var setTimeout = jasmine.createSpy('setTimeout'), @@ -186,4 +186,28 @@ describe("jasmine Env", function() { expect(setTimeout).toHaveBeenCalledWith(globalTimeoutFn, 100); }); + it("should be possible to get full name from a spec", function() { + var env = new jasmine.Env({global: { setTimeout: setTimeout }}), + topLevelSpec, nestedSpec, doublyNestedSpec; + + env.describe("my tests", function() { + topLevelSpec = env.it("are sometimes top level", function() { + }); + env.describe("are sometimes", function() { + nestedSpec = env.it("singly nested", function() { + + }); + env.describe("even", function() { + doublyNestedSpec = env.it("doubly nested", function() { + + }); + }); + }); + }); + + env.execute(); + expect(topLevelSpec.getFullName()).toBe("my tests are sometimes top level."); + expect(nestedSpec.getFullName()).toBe("my tests are sometimes singly nested."); + expect(doublyNestedSpec.getFullName()).toBe("my tests are sometimes even doubly nested."); + }); }); diff --git a/spec/core/SpecSpec.js b/spec/core/SpecSpec.js index 07d6a639..0b5c6ab0 100644 --- a/spec/core/SpecSpec.js +++ b/spec/core/SpecSpec.js @@ -166,10 +166,8 @@ describe("Spec (real-ish unit tests)", function() { }); it("can return its full name", function() { - //TODO: not convinced that a spec should provide this as part of its public interface, but adding temporarily - //until we fix the reporting var spec = new jasmine.Spec({ - fullNameFactory: function(passedVal) { + getSpecName: function(passedVal) { expect(passedVal).toBe(spec); return 'expected val'; } diff --git a/src/core/Env.js b/src/core/Env.js index 15eef30f..955a3384 100644 --- a/src/core/Env.js +++ b/src/core/Env.js @@ -78,14 +78,8 @@ var specConstructor = jasmine.Spec; - // TODO: this deserves a better name (not a Factory the way others are) - var fullNameFactory = function(spec, currentSuite) { - var descriptions = []; - for (var suite = currentSuite; suite; suite = suite.parentSuite) { - descriptions.push(suite.description) - } - descriptions.push(spec.description); - return descriptions.join(' ') + '.'; + var getSpecName = function(spec, currentSuite) { + return currentSuite.getFullName() + ' ' + spec.description + '.'; }; var buildExpectationResult = jasmine.buildExpectationResult; @@ -101,7 +95,7 @@ expectationFactory: expectationFactory, exceptionFormatter: exceptionFormatter, resultCallback: specResultCallback, - fullNameFactory: function(spec) { return fullNameFactory(spec, suite) }, + getSpecName: function(spec) { return getSpecName(spec, suite) }, startCallback: startCallback, description: description, catchExceptions: self.catchExceptions, diff --git a/src/core/Spec.js b/src/core/Spec.js index cdbfd113..65817175 100644 --- a/src/core/Spec.js +++ b/src/core/Spec.js @@ -11,7 +11,7 @@ jasmine.Spec = function(attrs) { this.catchExceptions = attrs.catchExceptions; this.startCallback = attrs.startCallback || function() {}; this.exceptionFormatter = attrs.exceptionFormatter || function() {}; - this.fullNameFactory = attrs.fullNameFactory; + this.getSpecName = attrs.getSpecName; this.expectationResultFactory = attrs.expectationResultFactory || function() {}; }; @@ -91,7 +91,6 @@ jasmine.Spec.prototype.status = function() { } }; -//TODO: remove jasmine.Spec.prototype.getFullName = function() { - return this.fullNameFactory(this); + return this.getSpecName(this); }