diff --git a/platform/core/bundle.json b/platform/core/bundle.json index 3ae730083c..5800f8d69e 100644 --- a/platform/core/bundle.json +++ b/platform/core/bundle.json @@ -148,6 +148,12 @@ "depends": [ "$q" ] } ], + "services": [ + { + "key": "now", + "implementation": "services/Now.js" + } + ], "roots": [ { "id": "mine", diff --git a/platform/core/src/services/Now.js b/platform/core/src/services/Now.js new file mode 100644 index 0000000000..134b32fe9b --- /dev/null +++ b/platform/core/src/services/Now.js @@ -0,0 +1,27 @@ +/*global define*/ + +define( + [], + function () { + "use strict"; + + /** + * Defines the `now` service, which is a simple wrapper upon + * `Date.now()` which can be injected to support testability. + * + * @returns {Function} a function which returns current system time + */ + function Now() { + /** + * Get the current time. + * @returns {number} current time, in milliseconds since + * 1970-01-01 00:00:00Z + */ + return function () { + return Date.now(); + }; + } + + return Now; + } +); \ No newline at end of file diff --git a/platform/core/test/services/NowSpec.js b/platform/core/test/services/NowSpec.js new file mode 100644 index 0000000000..1d185bf9e7 --- /dev/null +++ b/platform/core/test/services/NowSpec.js @@ -0,0 +1,28 @@ +/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ + +define( + ["../../src/services/Now"], + function (Now) { + "use strict"; + + describe("The 'now' service", function () { + var now = new Now(); + + it("reports system time", function () { + var a = Date.now(), + b = now(), + c = Date.now(); + + // Clock could, in principle, tick between evaluating the + // expressions above. We can't predict or prevent this but + // want the test to be stable, so we only verify that now() + // returns a value that makes sense given a previous and + // subsequent measurement from Date.now() + expect(a <= b).toBeTruthy(); + expect(b <= c).toBeTruthy(); + expect(b).toBeDefined(); + }); + + }); + } +); \ No newline at end of file diff --git a/platform/core/test/suite.json b/platform/core/test/suite.json index 33dbe49241..335b86d190 100644 --- a/platform/core/test/suite.json +++ b/platform/core/test/suite.json @@ -20,6 +20,8 @@ "objects/DomainObject", "objects/DomainObjectProvider", + "services/Now", + "types/MergeModels", "types/TypeCapability", "types/TypeImpl",