diff options
| author | Misko Hevery | 2011-11-04 12:33:01 -0700 |
|---|---|---|
| committer | Misko Hevery | 2011-11-14 20:31:14 -0800 |
| commit | a87f2fb9e4d65ac5d260e914b5e31aa0e0f47b2c (patch) | |
| tree | 93e69475affd24ef5b16c68e47d1476bc37787a7 /src/angular-mocks.js | |
| parent | c27aba4354c69c4a67fab587a59a8079cc9edc91 (diff) | |
| download | angular.js-a87f2fb9e4d65ac5d260e914b5e31aa0e0f47b2c.tar.bz2 | |
refactor(mock): moved mocks into its own module
Diffstat (limited to 'src/angular-mocks.js')
| -rw-r--r-- | src/angular-mocks.js | 106 |
1 files changed, 95 insertions, 11 deletions
diff --git a/src/angular-mocks.js b/src/angular-mocks.js index 497fdc58..970a1b6d 100644 --- a/src/angular-mocks.js +++ b/src/angular-mocks.js @@ -363,16 +363,21 @@ angular.mock.$ExceptionHandlerProvider = function(){ var handler; this.mode = function(mode){ - handler = { - rethrow: function(e) { - throw e; - }, - log: angular.extend(function log(e) { - log.errors.push(e); - }, {errors:[]}) - }[mode]; - if (!handler) { - throw Error("Unknown mode '" + mode + "', only 'log'/'rethrow' modes are allowed!"); + switch(mode) { + case 'rethrow': + handler = function(e) { + throw e; + } + break; + case 'log': + var errors = []; + handler = function(e) { + errors.push(e); + } + handler.errors = errors; + break; + default: + throw Error("Unknown mode '" + mode + "', only 'log'/'rethrow' modes are allowed!"); } }; @@ -396,6 +401,12 @@ angular.mock.$ExceptionHandlerProvider = function(){ * See {@link angular.mock} for more info on angular mocks. */ angular.mock.$LogProvider = function(){ + + function concat(array1, array2, index) { + return array1.concat(Array.prototype.slice.call(array2, index)); + } + + this.$get = function () { var $log = { log: function() { $log.log.logs.push(concat([], arguments, 0)); }, @@ -416,7 +427,7 @@ angular.mock.$LogProvider = function(){ angular.forEach(['error', 'warn', 'info', 'log'], function(logLevel) { angular.forEach($log[logLevel].logs, function(log) { angular.forEach(log, function (logItem) { - errors.push('MOCK $log (' + logLevel + '): ' + (logItem.stack || logItem)); + errors.push('MOCK $log (' + logLevel + '): ' + String(logItem) + '\n' + (logItem.stack || '')); }); }); }); @@ -569,3 +580,76 @@ angular.mock.TzDate = function (offset, timestamp) { //make "tzDateInstance instanceof Date" return true angular.mock.TzDate.prototype = Date.prototype; + + +/** + * Method for serializing common objects into strings, useful for debugging. + * @param {*} object - any object to turn into string. + * @return a serialized string of the argument + */ +angular.mock.dump = function(object){ + var out; + if (angular.isElement(object)) { + object = angular.element(object); + out = angular.element('<div></div>') + angular.forEach(object, function(element){ + out.append(angular.element(element).clone()); + }); + out = out.html(); + } else if (angular.isObject(object)) { + if (angular.isFunction(object.$eval) && angular.isFunction(object.$apply)) { + out = serializeScope(object); + } else { + out = angular.toJson(object, true); + } + } else { + out = String(object); + } + return out; + + function serializeScope(scope, offset) { + offset = offset || ' '; + var log = [offset + 'Scope(' + scope.$id + '): {']; + for ( var key in scope ) { + if (scope.hasOwnProperty(key) && !key.match(/^(\$|this)/)) { + log.push(' ' + key + ': ' + angular.toJson(scope[key])); + } + } + var child = scope.$$childHead; + while(child) { + log.push(serializeScope(child, offset + ' ')); + child = child.$$nextSibling; + } + log.push('}'); + return log.join('\n' + offset); + } +}; + +window.jstestdriver && (function(window){ + /** + * Global method to output any number of objects into JSTD console. Useful for debugging. + */ + window.dump = function() { + var args = []; + angular.forEach(arguments, function(arg){ + args.push(angular.mock.dump(arg)); + }); + jstestdriver.console.log.apply(jstestdriver.console, args); + }; +})(window); + + +window.jasmine && (function(window){ + window.inject = function (){ + var blockFns = Array.prototype.slice.call(arguments, 0); + return function(){ + var injector = this.$injector; + if (!injector) { + injector = this.$injector = angular.injector('NG', 'NG_MOCK'); + } + for(var i = 0, ii = blockFns.length; i < ii; i++) { + injector.invoke(this, blockFns[i]); + } + }; + } +})(window); |
