diff --git a/angularFiles.js b/angularFiles.js index d0b0d8dd8504..5f1c5830d583 100755 --- a/angularFiles.js +++ b/angularFiles.js @@ -37,6 +37,7 @@ var angularFiles = { 'src/ng/sniffer.js', 'src/ng/templateRequest.js', 'src/ng/testability.js', + 'src/ng/date.js', 'src/ng/timeout.js', 'src/ng/urlUtils.js', 'src/ng/window.js', diff --git a/src/AngularPublic.js b/src/AngularPublic.js index b81257b9fff7..c6383eaf9787 100644 --- a/src/AngularPublic.js +++ b/src/AngularPublic.js @@ -80,6 +80,7 @@ $TemplateCacheProvider, $TemplateRequestProvider, $$TestabilityProvider, + $TimeProvider, $TimeoutProvider, $$RAFProvider, $$AsyncCallbackProvider, @@ -234,6 +235,7 @@ function publishExternalAPI(angular) { $templateCache: $TemplateCacheProvider, $templateRequest: $TemplateRequestProvider, $$testability: $$TestabilityProvider, + $date: $DateProvider, $timeout: $TimeoutProvider, $window: $WindowProvider, $$rAF: $$RAFProvider, diff --git a/src/ng/date.js b/src/ng/date.js new file mode 100644 index 000000000000..4ec221fe2a0a --- /dev/null +++ b/src/ng/date.js @@ -0,0 +1,45 @@ +'use strict'; + +/** + * @ngdoc service + * @name $date + * @requires $window + * + * @description + * Simple service for accessing date. + * + * The main purpose of this service is to simplify mocking date in tests. + * + * @example + + + angular.module('dateExample', []) + .controller('TimeController', ['$scope', '$date', function($scope, $date) { + $scope.now = $date.now(); + }]); + + +
+

Time when the page was created: {{now | date}}

+
+
+
+ */ +function $DateProvider() { + var self = this; + + this.$get = ['$window', function($window) { + return { + /** + * @ngdoc method + * @name $date#now + * + * @description + * Return Date object representing current date + */ + now: function () { + return $window.Date(); + } + }; + }]; +} diff --git a/test/ng/dateSpec.js b/test/ng/dateSpec.js new file mode 100644 index 000000000000..8f3aed856222 --- /dev/null +++ b/test/ng/dateSpec.js @@ -0,0 +1,25 @@ +/* global $TimeProvider: false */ +'use strict'; + +describe('$date', function() { + var $window; + + beforeEach(module(function($provide) { + $window = {}; + + $provide.value('$window', $window); + })); + + it('should return Date.new() when $date.now() is called', inject( + function() { + $window.Date = function() { + return Date(1418998923940); + }; + }, + function($date) { + var date = $date.now(); + expect(date).toEqual(Date(1418998923940)); + } + )); + +});