Skip to content

Commit

Permalink
Add extractNonMessagePayloadArgumentsFromArguments()
Browse files Browse the repository at this point in the history
  • Loading branch information
jbpros committed Jun 7, 2011
1 parent d49ce12 commit 95f5a07
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 15 deletions.
8 changes: 7 additions & 1 deletion lib/cucumber.js
Expand Up @@ -334,9 +334,15 @@ Cucumber.Ast.TreeWalker = function(features, supportCodeLibrary, listeners) {
},

extractUserFunctionFromArguments: function extractUserFunctionFromArguments(argumentsObject) {
var nonPayloadArguments = self.extractNonMessagePayloadArgumentsFromArguments(argumentsObject);
var userFunction = nonPayloadArguments.unshift();
return userFunction;
},

extractNonMessagePayloadArgumentsFromArguments: function extractNonMessagePayloadArgumentsFromArguments(argumentsObject) {
var argumentsArray = Cucumber.Util.Arguments(argumentsObject);
var nonPayloadArguments = argumentsArray.slice(-Cucumber.Ast.TreeWalker.NON_PAYLOAD_TRAILING_PARAMETERS_COUNT);
return nonPayloadArguments.unshift();
return nonPayloadArguments;
},

extractCallbackFromArguments: TODO("extractCallbackFromArguments()"),
Expand Down
49 changes: 35 additions & 14 deletions spec/cucumber/ast/tree_walker_spec.js
Expand Up @@ -267,34 +267,26 @@ describe("Cucumber.Ast.TreeWalker", function() {
);
});

it("returns the sliced array", function() {
it("returns the array slice", function() {
expect(treeWalker.extractMessagePayloadFromArguments(argumentsObject)).
toBe(payload);
});
});

describe("extractUserFunctionFromArguments()", function() {
var argumentsObject, argumentsArray, userFunction, nonPayloadArguments;
var argumentsObject, userFunction, nonPayloadArguments;

beforeEach(function() {
userFunction = createSpy("User function");
argumentsObject = createSpy("Arguments object");
nonPayloadArguments = createSpyWithStubs("Non payload arguments", {unshift: userFunction});
argumentsArray = createSpyWithStubs("Cucumber util arguments array",
{slice: nonPayloadArguments});
spyOn(Cucumber.Util, 'Arguments').andReturn(argumentsArray);
});

it("transforms the arguments object into an array", function() {
treeWalker.extractUserFunctionFromArguments(argumentsObject);
expect(Cucumber.Util.Arguments).toHaveBeenCalledWith(argumentsObject);
spyOn(treeWalker, 'extractNonMessagePayloadArgumentsFromArguments').
andReturn(nonPayloadArguments);
});

it("slices the payload parameters off", function() {
it("extracts the non-payload arguments from the arguments object", function() {
treeWalker.extractUserFunctionFromArguments(argumentsObject);
expect(argumentsArray.slice).toHaveBeenCalledWith(
-Cucumber.Ast.TreeWalker.NON_PAYLOAD_TRAILING_PARAMETERS_COUNT
);
expect(treeWalker.extractNonMessagePayloadArgumentsFromArguments).toHaveBeenCalledWith(argumentsObject);
});

it("shifts the first argument from the non-payload arguments", function() {
Expand All @@ -308,6 +300,35 @@ describe("Cucumber.Ast.TreeWalker", function() {
});
});

describe("extractNonMessagePayloadArgumentsFromArguments()", function() {
var argumentsObject, argumentsArray, nonPayloadArguments;

beforeEach(function() {
nonPayloadArguments = createSpy("Non payload arguments");
argumentsObject = createSpy("Arguments object");
argumentsArray = createSpyWithStubs("Cucumber util arguments array",
{slice: nonPayloadArguments});
spyOn(Cucumber.Util, 'Arguments').andReturn(argumentsArray);
});

it("transforms the arguments object into an array", function() {
treeWalker.extractNonMessagePayloadArgumentsFromArguments(argumentsObject);
expect(Cucumber.Util.Arguments).toHaveBeenCalledWith(argumentsObject);
});

it("slices the payload parameters off", function() {
treeWalker.extractNonMessagePayloadArgumentsFromArguments(argumentsObject);
expect(argumentsArray.slice).toHaveBeenCalledWith(
-Cucumber.Ast.TreeWalker.NON_PAYLOAD_TRAILING_PARAMETERS_COUNT
);
});

it("returns the array slice", function() {
var returned = treeWalker.extractNonMessagePayloadArgumentsFromArguments(argumentsObject);
expect(returned).toBe(nonPayloadArguments);
});
});

/*
describe("broadcastUserFunction()", function() {
var message, userFunction, callback;
Expand Down

0 comments on commit 95f5a07

Please sign in to comment.