forked from angular/material
-
Notifications
You must be signed in to change notification settings - Fork 0
/
angular-material-spec.js
128 lines (107 loc) · 3.45 KB
/
angular-material-spec.js
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/**
* angular-material-spec.js
*
* This Jasmine configuration file is used internally for testing the
* unit test files: "\angular\material\src\**\*.spec.js"
*
*/
(function() {
beforeEach(function() {
/**
* Before each test, require that the 'ngMaterial-mock' module is ready for injection
* NOTE: assumes that angular-material-mocks.js has been loaded.
*/
module('ngMaterial-mock')
/**
* Mocks angular.element#focus ONLY for the duration of a particular test.
*
* @example
*
* it('some focus test', inject(function($document)
* {
* jasmine.mockElementFocus(this); // 'this' is the test instance
*
* doSomething();
* expect($document.activeElement).toBe(someElement[0]);
*
* }));
*
*/
jasmine.mockElementFocus = function(test) {
var focus = angular.element.prototype.focus;
inject(function($document) {
angular.element.prototype.focus = function() {
$document.activeElement = this[0];
};
});
// Un-mock focus after the test is done
afterEach(function() {
angular.element.prototype.focus = focus;
});
};
/**
* Add special matchers used in the Angular-Material specs
*
*/
jasmine.addMatchers({
toHaveClass: function() {
return {
compare: function(actual, expected) {
var results = { pass : true };
var classes = expected.trim().split(/\s+/);
for (var i=0; i<classes.length; ++i) {
if (!angular.element(actual).hasClass(classes[i])) {
results.pass = false;
}
}
var negation = !results.pass ? "" : " not ";
results.message = "";
results.message += "Expected '";
results.message += angular.mock.dump(actual);
results.message += negation + "to have class '" + expected + "'.";
return results;
}
};
},
/**
* A helper to match the type of a given value
* @example expect(1).toBeOfType('number')
*/
toBeOfType: function(type) {
return {
compare: function(actual, expected) {
var results = {
pass : typeof actual == expected
};
var negation = !results.pass ? "" : " not ";
results.message = "";
results.message += "Expected ";
results.message += angular.mock.dump(actual) + " of type ";
results.message += (typeof actual);
results.message += negation + "to have type '" + type + "'.";
return results;
}
};
},
toHaveFields: function() {
return {
compare: function(actual, expected) {
var results = { pass : true };
for (var key in expected) {
if (!(actual || {}).hasOwnProperty(key) || !angular.equals(actual[key], expected[key])) {
results.pass = false;
}
}
var negation = !results.pass ? "" : " not ";
results.message = "";
results.message += "Expected ";
results.message += angular.mock.dump(actual) + " of type ";
results.message += (typeof actual);
results.message += negation + "to have fields matching '" + angular.mock.dump(expected);
return results;
}
};
}
});
});
})();