Skip to content

Commit c6cd418

Browse files
feat($time): create time service
Add simple $time service to allow easier mocking dates in applications. Closes angular#10402
1 parent 3d78bf3 commit c6cd418

File tree

4 files changed

+72
-0
lines changed

4 files changed

+72
-0
lines changed

angularFiles.js

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ var angularFiles = {
3737
'src/ng/sniffer.js',
3838
'src/ng/templateRequest.js',
3939
'src/ng/testability.js',
40+
'src/ng/time.js',
4041
'src/ng/timeout.js',
4142
'src/ng/urlUtils.js',
4243
'src/ng/window.js',

src/AngularPublic.js

+2
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
$TemplateCacheProvider,
8181
$TemplateRequestProvider,
8282
$$TestabilityProvider,
83+
$TimeProvider,
8384
$TimeoutProvider,
8485
$$RAFProvider,
8586
$$AsyncCallbackProvider,
@@ -234,6 +235,7 @@ function publishExternalAPI(angular) {
234235
$templateCache: $TemplateCacheProvider,
235236
$templateRequest: $TemplateRequestProvider,
236237
$$testability: $$TestabilityProvider,
238+
$time: $TimeProvider,
237239
$timeout: $TimeoutProvider,
238240
$window: $WindowProvider,
239241
$$rAF: $$RAFProvider,

src/ng/time.js

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
'use strict';
2+
3+
/**
4+
* @ngdoc service
5+
* @name $time
6+
* @requires $window
7+
*
8+
* @description
9+
* Simple service for accessing time.
10+
*
11+
* The main purpose of this service is to simplify mocking time in tests.
12+
*
13+
* @example
14+
<example module="timeExample">
15+
<file name="script.js">
16+
angular.module('timeExample', [])
17+
.controller('TimeController', ['$scope', '$time', function($scope, $time) {
18+
$scope.now = $time.now();
19+
}]);
20+
</file>
21+
<file name="index.html">
22+
<div ng-controller="TimeController">
23+
<p>Time when the page was created: {{now | date}}</p>
24+
</div>
25+
</file>
26+
</example>
27+
*/
28+
function $TimeProvider() {
29+
var self = this;
30+
31+
this.$get = ['$window', function($window) {
32+
return {
33+
/**
34+
* @ngdoc method
35+
* @name $time#now
36+
*
37+
* @description
38+
* Return current date getter
39+
*/
40+
now: $window.Date.now
41+
};
42+
}];
43+
}

test/ng/timeSpec.js

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/* global $TimeProvider: false */
2+
'use strict';
3+
4+
describe('$time', function() {
5+
var $window;
6+
7+
beforeEach(module(function($provide) {
8+
$window = {Date: {
9+
}};
10+
11+
$provide.value('$window', $window);
12+
}));
13+
14+
it('should return Date.new() when $time.now() is called', inject(
15+
function() {
16+
$window.Date.now = function() {
17+
return 1418982310112;
18+
};
19+
},
20+
function($time) {
21+
var time = $time.now();
22+
expect(time).toEqual(1418982310112);
23+
}
24+
));
25+
26+
});

0 commit comments

Comments
 (0)