summaryrefslogtreecommitdiffstats
path: root/vnfmarket/common/thirdparty/angular-material/angular-material-mocks.js
diff options
context:
space:
mode:
Diffstat (limited to 'vnfmarket/common/thirdparty/angular-material/angular-material-mocks.js')
-rw-r--r--vnfmarket/common/thirdparty/angular-material/angular-material-mocks.js186
1 files changed, 186 insertions, 0 deletions
diff --git a/vnfmarket/common/thirdparty/angular-material/angular-material-mocks.js b/vnfmarket/common/thirdparty/angular-material/angular-material-mocks.js
new file mode 100644
index 00000000..d3d544b7
--- /dev/null
+++ b/vnfmarket/common/thirdparty/angular-material/angular-material-mocks.js
@@ -0,0 +1,186 @@
+/**
+ *
+ * Angular-Material-Mocks
+ *
+ * Developers interested in running their own custom unit tests WITH angular-material.js loaded...
+ * must also include this *mocks* file. Similar to `angular-mocks.js`, `angular-material-mocks.js`
+ * will override and disable specific Angular Material performance settings:
+ *
+ * - Disabled Theme CSS rule generations
+ * - Forces $mdAria.expectWithText() to be synchronous
+ * - Mocks $$rAF.throttle()
+ * - Captures flush exceptions from $$rAF
+ *
+ */
+(function(window, angular, undefined) {
+
+'use strict';
+
+ // Allow our code to know when they are running inside of a test so they can expose extra services
+ // that should NOT be exposed to the public but that should be tested.
+ //
+ // As an example, see input.js which exposes some animation-related methods.
+ window._mdMocksIncluded = true;
+
+/**
+ * @ngdoc module
+ * @name ngMaterial-mock
+ * @packageName angular-material-mocks
+ *
+ * @description
+ *
+ * The `ngMaterial-mock` module provides support
+ *
+ */
+angular.module('ngMaterial-mock', [
+ 'ngMock',
+ 'ngAnimateMock',
+ 'material.core'
+ ])
+ .config(['$provide', function($provide) {
+
+ $provide.factory('$material', ['$animate', '$timeout', function($animate, $timeout) {
+ return {
+ flushOutstandingAnimations: function() {
+ // this code is placed in a try-catch statement
+ // since 1.3 and 1.4 handle their animations differently
+ // and there may be situations where follow-up animations
+ // are run in one version and not the other
+ try { $animate.flush(); } catch(e) {}
+ },
+ flushInterimElement: function() {
+ this.flushOutstandingAnimations();
+ $timeout.flush();
+ this.flushOutstandingAnimations();
+ $timeout.flush();
+ this.flushOutstandingAnimations();
+ $timeout.flush();
+ }
+ };
+ }]);
+
+ /**
+ * Angular Material dynamically generates Style tags
+ * based on themes and palletes; for each ng-app.
+ *
+ * For testing, we want to disable generation and
+ * <style> DOM injections. So we clear the huge THEME
+ * styles while testing...
+ */
+ $provide.constant('$MD_THEME_CSS', '/**/');
+
+ /**
+ * Add throttle() and wrap .flush() to catch `no callbacks present`
+ * errors
+ */
+ $provide.decorator('$$rAF', function throttleInjector($delegate){
+
+ $delegate.throttle = function(cb) {
+ return function() {
+ cb.apply(this, arguments);
+ };
+ };
+
+ var ngFlush = $delegate.flush;
+ $delegate.flush = function() {
+ try { ngFlush(); }
+ catch(e) { ; }
+ };
+
+ return $delegate;
+ });
+
+ /**
+ * Capture $timeout.flush() errors: "No deferred tasks to be flushed"
+ * errors
+ */
+ $provide.decorator('$timeout', function throttleInjector($delegate){
+
+ var ngFlush = $delegate.flush;
+ $delegate.flush = function() {
+ var args = Array.prototype.slice.call(arguments);
+ try { ngFlush.apply($delegate, args); }
+ catch(e) { }
+ };
+
+ return $delegate;
+ });
+
+ }]);
+
+ /**
+ * Stylesheet Mocks used by `animateCss.spec.js`
+ */
+ window.createMockStyleSheet = function createMockStyleSheet(doc, wind) {
+ doc = doc ? doc[0] : window.document;
+ wind = wind || window;
+
+ var node = doc.createElement('style');
+ var head = doc.getElementsByTagName('head')[0];
+ head.appendChild(node);
+
+ var ss = doc.styleSheets[doc.styleSheets.length - 1];
+
+ return {
+ addRule: function(selector, styles) {
+ styles = addVendorPrefix(styles);
+
+ try {
+ ss.insertRule(selector + '{ ' + styles + '}', 0);
+ }
+ catch (e) {
+ try {
+ ss.addRule(selector, styles);
+ }
+ catch (e2) {}
+ }
+ },
+
+ destroy: function() {
+ head.removeChild(node);
+ }
+ };
+
+ /**
+ * Decompose styles, attached specific vendor prefixes
+ * and recompose...
+ * e.g.
+ * 'transition:0.5s linear all; font-size:100px;'
+ * becomes
+ * '-webkit-transition:0.5s linear all; transition:0.5s linear all; font-size:100px;'
+ */
+ function addVendorPrefix(styles) {
+ var cache = { };
+
+ // Decompose into cache registry
+ styles
+ .match(/([\-A-Za-z]*)\w\:\w*([A-Za-z0-9\.\-\s]*)/gi)
+ .forEach(function(style){
+ var pair = style.split(":");
+ var key = pair[0];
+
+ switch(key) {
+ case 'transition':
+ case 'transform':
+ case 'animation':
+ case 'transition-duration':
+ case 'animation-duration':
+ cache[key] = cache['-webkit-' + key] = pair[1];
+ break;
+ default:
+ cache[key] = pair[1];
+ }
+ });
+
+ // Recompose full style object (as string)
+ styles = "";
+ angular.forEach(cache, function(value, key) {
+ styles = styles + key + ":" + value + "; ";
+ });
+
+ return styles;
+ }
+
+ };
+
+})(window, window.angular);