Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/apps/system/test/unit/lockscreen_test.js
diff options
context:
space:
mode:
Diffstat (limited to 'apps/system/test/unit/lockscreen_test.js')
-rw-r--r--apps/system/test/unit/lockscreen_test.js122
1 files changed, 122 insertions, 0 deletions
diff --git a/apps/system/test/unit/lockscreen_test.js b/apps/system/test/unit/lockscreen_test.js
new file mode 100644
index 0000000..7258670
--- /dev/null
+++ b/apps/system/test/unit/lockscreen_test.js
@@ -0,0 +1,122 @@
+'use strict';
+
+requireApp('system/test/unit/mock_settings_listener.js');
+requireApp('system/test/unit/mocks_helper.js');
+requireApp('system/test/unit/mock_l10n.js');
+
+requireApp('system/js/lockscreen.js');
+
+var mocksForStatusBar = ['SettingsListener'];
+
+mocksForStatusBar.forEach(function(mockName) {
+ if (! window[mockName]) {
+ window[mockName] = null;
+ }
+});
+
+suite('lockscreen', function() {
+ var mocksHelper;
+
+ var realSettingsListener, realMozL10n;
+
+ var fakeLockscreenPanel;
+
+ var red_png, green_png;
+
+ suiteSetup(function() {
+ mocksHelper = new MocksHelper(mocksForStatusBar);
+ mocksHelper.suiteSetup();
+ realMozL10n = navigator.mozL10n;
+ navigator.mozL10n = MockL10n;
+
+ red_png =
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAHgAQMAAADuQiYHAAAAA1BMVEX/AAAZ4gk3AAAAKUlEQVR4Xu3AMQEAAADCIPuntsROWAQAAAAAAAAAAAAAAAAAAAAAAADgTOAAAZXle7kAAAAASUVORK5CYII=';
+ green_png =
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAHgAQMAAAAlmcL5AAAAA1BMVEUAgACc+aWRAAAAKUlEQVR4Xu3BMQEAAADCoPVPbQ0PoAAAAAAAAAAAAAAAAAAAAAAAAL4MSSAAAZTTyRkAAAAASUVORK5CYII=';
+ });
+
+ suiteTeardown(function() {
+ mocksHelper.suiteTeardown();
+ navigator.mozL10n = realMozL10n;
+ });
+
+ setup(function() {
+ fakeLockscreenPanel = document.createElement('div');
+ fakeLockscreenPanel.classList.add('lockscreen-panel');
+ fakeLockscreenPanel.setAttribute('data-wallpaper', '');
+ document.body.appendChild(fakeLockscreenPanel);
+
+ mocksHelper.setup();
+ });
+
+ teardown(function() {
+ fakeLockscreenPanel.parentNode.removeChild(fakeLockscreenPanel);
+ mocksHelper.teardown();
+ });
+
+ test('wallpaper has vignette effect', function(done) {
+ LockScreen.updateBackground(red_png);
+
+ (function checkCanvas() {
+ var canvas = fakeLockscreenPanel.getElementsByTagName('canvas')[0];
+ if (!canvas) {
+ setTimeout(checkCanvas, 10);
+ return;
+ }
+ var ctx = canvas.getContext('2d');
+ var top_pixel = ctx.getImageData(0, 0, 1, 1).data;
+
+ assert.equal(top_pixel[0], 77);
+ assert.equal(top_pixel[1], 0);
+ assert.equal(top_pixel[2], 0);
+
+ var center_width = Math.floor(canvas.width / 2);
+ var center_height = Math.floor(canvas.height / 2);
+ var center_pixel = ctx.getImageData(center_width, center_height,
+ 1 , 1).data;
+ assert.equal(center_pixel[0], 251);
+ assert.equal(center_pixel[1], 0);
+ assert.equal(center_pixel[2], 0);
+
+ done();
+ })();
+
+ });
+
+ test('multiple wallpaper updates only keep one canvas', function(done) {
+ function waitFirstUpdate(callback) {
+ var first_canvas = fakeLockscreenPanel.getElementsByTagName('canvas')[0];
+ if (!first_canvas) {
+ setTimeout(waitFirstUpdate, 10, callback);
+ return;
+ }
+
+ setTimeout(callback, 10);
+ }
+
+ function waitSecondUpdate(callback) {
+ var second_canvas = fakeLockscreenPanel.getElementsByTagName('canvas')[0];
+
+ var ctx = second_canvas.getContext('2d');
+ var top_pixel = ctx.getImageData(0, 0, 1, 1).data;
+ // Canvas is not green yet
+ if (top_pixel[1] == 0) {
+ setTimeout(waitSecondUpdate, 10, callback);
+ return;
+ }
+
+ setTimeout(callback, 10);
+ }
+
+ LockScreen.updateBackground(red_png);
+ setTimeout(waitFirstUpdate, 10, function then() {
+ LockScreen.updateBackground(green_png);
+
+ setTimeout(waitSecondUpdate, 10, function then2() {
+ assert.equal(fakeLockscreenPanel.getElementsByTagName('canvas').length, 1);
+ done();
+ });
+ });
+
+ });
+});