aboutsummaryrefslogtreecommitdiffstats
path: root/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/plugins/head/test/spec/specHelper.js
blob: d6f2083a41d6d46f1a501f172c29968d5f94ac1e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/**
 * Copyright 2010-2013 Ben Birch
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this software except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
// find *Spec.js files in the src directory next to the corresponding source file

var test = window.test = {};

test.cb = (function( jasmine ) {
	var callbacks = [];

	return {
		use: function() {
			callbacks = [];
		},
		createSpy: function( name, arg, data, context ) {
			return jasmine.createSpy( name ).and.callFake( function() {
				callbacks.push( { cb: arguments[ arg || 0 ], data: data, context: context } );
			});
		},
		execOne: function() {
			var exec = callbacks.shift();
			exec.cb.apply( exec.context, exec.data );
		},
		execAll: function() {
			while( callbacks.length ) {
				this.execOne();
			}
		}
	};
})( this.jasmine );


test.clock = ( function() {
	var id = 0, timers, saved;
	var names = [ "setTimeout", "setInterval", "clearTimeout", "clearInterval" ];
	var byNext = function( a, b ) { return a.next - b.next; };
	var mocks = {
		setTimeout: function( fn, t ) {
			timers.push( { id: id, fn: fn, next: t, t: t, type: "t" } );
			return id++;
		},
		clearTimeout: function( id ) {
			timers = timers.filter( function( timer ) { return timer.id !== id; } );
		},
		setInterval: function( fn, t ) {
			timers.push( { id: id, fn: fn, next: t, t: t, type: "i" } );
			return id++;
		},
		clearInterval: function( id ) {
			timers = timers.filter( function( timer ) { return timer.id !== id; } );
		}
	};

	return {
		steal: function() {
			timers = [];
			saved = {};
			names.forEach( function( n ) {
				saved[n] = window[n];
				window[n] = mocks[n];
			});
		},
		restore: function() {
			names.forEach( function( n ) {
				window[n] = saved[n];
			});
			timers = null;
			saved = null;
		},
		tick: function() {
			if( timers.length ) {
				timers.sort( byNext );
				var t0 = timers[0];
				if( t0.type === "t" ) {
					timers.shift();
				} else {
					t0.next += t0.t;
				}
				t0.fn();
			}
		}
	};

})();