diff --git a/spec/stackframe-spec.js b/spec/stackframe-spec.js index feb1da3..3b04c25 100644 --- a/spec/stackframe-spec.js +++ b/spec/stackframe-spec.js @@ -8,6 +8,40 @@ describe('StackFrame', function() { }).not.toThrow(); }); + it('should set properties from given object', function() { + var stackFrame = new StackFrame({ + args: ['ARG1', null], + columnNumber: 2, + functionName: 'FUNCTION_NAME', + fileName: 'FILE_NAME', + isConstructor: false, + isEval: false, + isNative: false, + isTopLevel: true, + lineNumber: 1, + source: 'SOURCE' + }); + expect(stackFrame.args).toEqual(['ARG1', null]); + expect(stackFrame.columnNumber).toBe(2); + expect(stackFrame.fileName).toBe('FILE_NAME'); + expect(stackFrame.functionName).toBe('FUNCTION_NAME'); + expect(stackFrame.isConstructor).toBeFalsy(); + expect(stackFrame.isEval).toBeFalsy(); + expect(stackFrame.isNative).toBeFalsy(); + expect(stackFrame.isTopLevel).toBeFalsy(); + expect(stackFrame.lineNumber).toBe(1); + expect(stackFrame.source).toBe('SOURCE'); + }); + + it('allows construction with v0.x arguments in non-strict mode', function() { + var stackFrame = new StackFrame('FUNCTION_NAME', [], 'FILE_NAME', 1, 2); + expect(stackFrame.args).toEqual(['ARG1', null]); + expect(stackFrame.columnNumber).toBe(2); + expect(stackFrame.fileName).toBe('FILE_NAME'); + expect(stackFrame.functionName).toBe('FUNCTION_NAME'); + expect(stackFrame.lineNumber).toBe(1); + }); + it('throws an error given an illogical line number', function() { var fn = function() { new StackFrame({lineNumber: 'BOGUS'}); diff --git a/stackframe.js b/stackframe.js index 1d8d609..59a6054 100644 --- a/stackframe.js +++ b/stackframe.js @@ -11,7 +11,6 @@ root.StackFrame = factory(); } }(this, function() { - 'use strict'; function _isNumber(n) { return !isNaN(parseFloat(n)) && isFinite(n); } @@ -20,6 +19,11 @@ return str[0].toUpperCase() + str.substring(1); } + function _inStrictMode() { + // TODO: implementation + return true; + } + function _getter(p) { return function() { return this[p]; @@ -40,6 +44,17 @@ this['set' + _capitalize(props[i])](obj[props[i]]); } } + } else if (!_inStrictMode()) { + if (console && typeof console.warn === 'function') { + console.warn('Constructing StackFrame with an Array is deprecated. ' + + 'Please use an Object as described in https://edub.me/stackframe-v1'); + } + var args = Array.prototype.slice.call(arguments); + this.setFunctionName(args[0]); + this.setArgs(args[1]); + this.setFileName(args[2]); + this.setLineNumber(args[3]); + this.setColumnNumber(args[4]); } }