diff options
| author | Igor Minar | 2013-08-23 15:41:47 -0700 | 
|---|---|---|
| committer | Igor Minar | 2013-08-23 15:46:11 -0700 | 
| commit | 1d06a943857719ef533ca374c05aa5e02089a4d9 (patch) | |
| tree | 4b8b0b4b6e263dd0da7211052ae0c5047fcc78a9 /test/testabilityPatch.js | |
| parent | 7c605ddf1c57c9f162827713ca5b0fbb12de5fa5 (diff) | |
| download | angular.js-1d06a943857719ef533ca374c05aa5e02089a4d9.tar.bz2 | |
chore: reorganize test helper files under test/helpers
Diffstat (limited to 'test/testabilityPatch.js')
| -rw-r--r-- | test/testabilityPatch.js | 297 | 
1 files changed, 0 insertions, 297 deletions
| diff --git a/test/testabilityPatch.js b/test/testabilityPatch.js deleted file mode 100644 index 514a5fdb..00000000 --- a/test/testabilityPatch.js +++ /dev/null @@ -1,297 +0,0 @@ -'use strict'; - -/** - * Here is the problem: http://bugs.jquery.com/ticket/7292 - * basically jQuery treats change event on some browsers (IE) as a - * special event and changes it form 'change' to 'click/keydown' and - * few others. This horrible hack removes the special treatment - */ -if (window._jQuery) _jQuery.event.special.change = undefined; - -if (window.bindJQuery) bindJQuery(); - -beforeEach(function() { -  // all this stuff is not needed for module tests, where jqlite and publishExternalAPI and jqLite are not global vars -  if (window.publishExternalAPI) { -    publishExternalAPI(angular); - -    // workaround for IE bug https://plus.google.com/104744871076396904202/posts/Kqjuj6RSbbT -    // IE overwrite window.jQuery with undefined because of empty jQuery var statement, so we have to -    // correct this, but only if we are not running in jqLite mode -    if (!_jqLiteMode && _jQuery !== jQuery) { -      jQuery = _jQuery; -    } - -    // This resets global id counter; -    uid = ['0', '0', '0']; - -    // reset to jQuery or default to us. -    bindJQuery(); -  } - - -  angular.element(document.body).html('').removeData(); -}); - -afterEach(function() { -  if (this.$injector) { -    var $rootScope = this.$injector.get('$rootScope'); -    var $rootElement = this.$injector.get('$rootElement'); -    var $log = this.$injector.get('$log'); -    // release the injector -    dealoc($rootScope); -    dealoc($rootElement); - -    // check $log mock -    $log.assertEmpty && $log.assertEmpty(); -  } - -  // complain about uncleared jqCache references -  var count = 0; - -  // This line should be enabled as soon as this bug is fixed: http://bugs.jquery.com/ticket/11775 -  //var cache = jqLite.cache; -  var cache = angular.element.cache; - -  forEachSorted(cache, function(expando, key){ -    angular.forEach(expando.data, function(value, key){ -      count ++; -      if (value && value.$element) { -        dump('LEAK', key, value.$id, sortedHtml(value.$element)); -      } else { -        dump('LEAK', key, angular.toJson(value)); -      } -    }); -  }); -  if (count) { -    throw new Error('Found jqCache references that were not deallocated! count: ' + count); -  } - - -  // copied from Angular.js -  // we need these two methods here so that we can run module tests with wrapped angular.js -  function sortedKeys(obj) { -    var keys = []; -    for (var key in obj) { -      if (obj.hasOwnProperty(key)) { -        keys.push(key); -      } -    } -    return keys.sort(); -  } - -  function forEachSorted(obj, iterator, context) { -    var keys = sortedKeys(obj); -    for ( var i = 0; i < keys.length; i++) { -      iterator.call(context, obj[keys[i]], keys[i]); -    } -    return keys; -  } -}); - - -function dealoc(obj) { -  var jqCache = angular.element.cache; -  if (obj) { -    if (angular.isElement(obj)) { -      cleanup(angular.element(obj)); -    } else { -      for(var key in jqCache) { -        var value = jqCache[key]; -        if (value.data && value.data.$scope == obj) { -          delete jqCache[key]; -        } -      } -    } -  } - -  function cleanup(element) { -    element.off().removeData(); -    // Note:  We aren't using element.contents() here.  Under jQuery, element.contents() can fail -    // for IFRAME elements.  jQuery explicitly uses (element.contentDocument || -    // element.contentWindow.document) and both properties are null for IFRAMES that aren't attached -    // to a document. -    var children = element[0].childNodes || []; -    for ( var i = 0; i < children.length; i++) { -      cleanup(angular.element(children[i])); -    } -  } -} - -/** - * @param {DOMElement} element - * @param {boolean=} showNgClass - */ -function sortedHtml(element, showNgClass) { -  var html = ""; -  forEach(jqLite(element), function toString(node) { - -    if (node.nodeName == "#text") { -      html += node.nodeValue. -        replace(/&(\w+[&;\W])?/g, function(match, entity){return entity?match:'&';}). -        replace(/</g, '<'). -        replace(/>/g, '>'); -    } else if (node.nodeName == "#comment") { -      html += '<!--' + node.nodeValue + '-->'; -    } else { -      html += '<' + (node.nodeName || '?NOT_A_NODE?').toLowerCase(); -      var attributes = node.attributes || []; -      var attrs = []; -      var className = node.className || ''; -      if (!showNgClass) { -        className = className.replace(/ng-[\w-]+\s*/g, ''); -      } -      className = trim(className); -      if (className) { -        attrs.push(' class="' + className + '"'); -      } -      for(var i=0; i<attributes.length; i++) { -        if (i>0 && attributes[i] == attributes[i-1]) -          continue; //IE9 creates dupes. Ignore them! - -        var attr = attributes[i]; -        if(attr.name.match(/^ng[\:\-]/) || -            (attr.value || attr.value == '') && -            attr.value !='null' && -            attr.value !='auto' && -            attr.value !='false' && -            attr.value !='inherit' && -            (attr.value !='0' || attr.name =='value') && -            attr.name !='loop' && -            attr.name !='complete' && -            attr.name !='maxLength' && -            attr.name !='size' && -            attr.name !='class' && -            attr.name !='start' && -            attr.name !='tabIndex' && -            attr.name !='style' && -            attr.name.substr(0, 6) != 'jQuery') { -          // in IE we need to check for all of these. -          if (/ng-\d+/.exec(attr.name) || -              attr.name == 'getElementById' || -              // IE7 has `selected` in attributes -              attr.name == 'selected' || -              // IE7 adds `value` attribute to all LI tags -              (node.nodeName == 'LI' && attr.name == 'value') || -              // IE8 adds bogus rowspan=1 and colspan=1 to TD elements -              (node.nodeName == 'TD' && attr.name == 'rowSpan' && attr.value == '1') || -              (node.nodeName == 'TD' && attr.name == 'colSpan' && attr.value == '1')) { -            continue; -          } - -          attrs.push(' ' + attr.name + '="' + attr.value + '"'); -        } -      } -      attrs.sort(); -      html += attrs.join(''); -      if (node.style) { -        var style = []; -        if (node.style.cssText) { -          forEach(node.style.cssText.split(';'), function(value){ -            value = trim(value); -            if (value) { -              style.push(lowercase(value)); -            } -          }); -        } -        for(var css in node.style){ -          var value = node.style[css]; -          if (isString(value) && isString(css) && css != 'cssText' && value && (1*css != css)) { -            var text = lowercase(css + ': ' + value); -            if (value != 'false' && indexOf(style, text) == -1) { -              style.push(text); -            } -          } -        } -        style.sort(); -        var tmp = style; -        style = []; -        forEach(tmp, function(value){ -          if (!value.match(/^max[^\-]/)) -            style.push(value); -        }); -        if (style.length) { -          html += ' style="' + style.join('; ') + ';"'; -        } -      } -      html += '>'; -      var children = node.childNodes; -      for(var j=0; j<children.length; j++) { -        toString(children[j]); -      } -      html += '</' + node.nodeName.toLowerCase() + '>'; -    } -  }); -  return html; -} - - -// TODO(vojta): migrate these helpers into jasmine matchers -/**a - * This method is a cheap way of testing if css for a given node is not set to 'none'. It doesn't - * actually test if an element is displayed by the browser. Be aware!!! - */ -function isCssVisible(node) { -  var display = node.css('display'); -  return !node.hasClass('ng-hide') && display != 'none'; -} - -function assertHidden(node) { -  if (isCssVisible(node)) { -    throw new Error('Node should be hidden but was visible: ' + angular.module.ngMock.dump(node)); -  } -} - -function assertVisible(node) { -  if (!isCssVisible(node)) { -    throw new Error('Node should be visible but was hidden: ' + angular.module.ngMock.dump(node)); -  } -} - -function provideLog($provide) { -  $provide.factory('log', function() { -      var messages = []; - -      function log(msg) { -        messages.push(msg); -        return msg; -      } - -      log.toString = function() { -        return messages.join('; '); -      } - -      log.toArray = function() { -        return messages; -      } - -      log.reset = function() { -        messages = []; -      } - -      log.fn = function(msg) { -        return function() { -          log(msg); -        } -      } - -      log.$$log = true; - -      return log; -    }); -} - -function pending() { -  dump('PENDING'); -}; - -function trace(name) { -  dump(new Error(name).stack); -} - -var karmaDump = dump; -window.dump = function () { -  karmaDump.apply(undefined, map(arguments, function(arg) { -    return angular.mock.dump(arg); -  })); -}; | 
