@@ -234,6 +234,12 @@ Item {
238+ target: LightDM.Infographic
239+ property: "username"
237 SignalSpy {
243 SignalSpy {
238 id: selectedSpy
244 id: selectedSpy
239 target: loader.item
245 target: loader.item
@@ -258,6 +264,12 @@ Item {
258 signalName: "emergencyCall"
264 signalName: "emergencyCall"
268+ id: infographicDataChangedSpy
269+ target: LightDM.Infographic
270+ signalName: "dataChanged"
261 UT.UnityTestCase {
273 UT.UnityTestCase {
262 name: "WideView"
274 name: "WideView"
263 when: windowShown
275 when: windowShown
@@ -266,10 +278,12 @@ Item {
267 function init() {
279 function init() {
268 view.currentIndex = 0; // break binding with text field
280 view.currentIndex = 0; // break binding with text field
269 selectedSpy.clear();
282 selectedSpy.clear();
270 respondedSpy.clear();
283 respondedSpy.clear();
271 teaseSpy.clear();
284 teaseSpy.clear();
272 emergencySpy.clear();
285 emergencySpy.clear();
286+ infographicDataChangedSpy.clear();
275 function cleanup() {
289 function cleanup() {
@@ -283,10 +297,18 @@ Item {
283 removeTimeConstraintsFromDirectionalDragAreas(loader.item);
297 removeTimeConstraintsFromDirectionalDragAreas(loader.item);
286− function swipeAwayCover() {
300+ function swipeAwayCover(toTheRight) {
301+ if (toTheRight === undefined) {
287 tryCompare(view, "fullyShown", true);
305 tryCompare(view, "fullyShown", true);
288 var touchY = view.height / 2;
306 var touchY = view.height / 2;
308+ touchFlick(view, 0, touchY, view.width, touchY);
289− touchFlick(view, view.width, touchY, 0, touchY);
310+ touchFlick(view, view.width, touchY, 0, touchY);
290 var coverPage = findChild(view, "coverPage");
312 var coverPage = findChild(view, "coverPage");
291 tryCompare(coverPage, "showProgress", 0);
313 tryCompare(coverPage, "showProgress", 0);
292 waitForRendering(view);
314 waitForRendering(view);
@@ -300,9 +322,18 @@ Item {
325+ function test_tease_data() {
327+ {tag: "left", x: 0, offset: 0, count: 1},
328+ {tag: "leftWithOffsetPass", x: 10, offset: 10, count: 1},
329+ {tag: "leftWithOffsetFail", x: 9, offset: 10, count: 0},
330+ {tag: "right", x: view.width, offset: 0, count: 1}
303− function test_tease() {
333+ function test_tease(data) {
334+ view.dragHandleLeftMargin = data.offset;
304− tap(view, 1, 1);
335+ tap(view, data.x, 0);
305− compare(teaseSpy.count, 1);
336+ compare(teaseSpy.count, data.count);
308 function test_respondedWithPin() {
339 function test_respondedWithPin() {
@@ -323,8 +354,16 @@ Item {
323 compare(respondedSpy.signalArguments[0][0], "test");
354 compare(respondedSpy.signalArguments[0][0], "test");
357+ function test_respondedWithSwipe_data() {
359+ {tag: "left", toTheRight: false, hiddenX: -view.width},
360+ {tag: "right", toTheRight: true, hiddenX: view.width},
326− function test_respondedWithSwipe() {
363+ function test_respondedWithSwipe(data) {
327− swipeAwayCover();
364+ swipeAwayCover(data.toTheRight);
365+ var coverPage = findChild(view, "coverPage");
366+ compare(coverPage.x, data.hiddenX);
328 compare(respondedSpy.count, 1);
367 compare(respondedSpy.count, 1);
329 compare(respondedSpy.signalArguments[0][0], "");
368 compare(respondedSpy.signalArguments[0][0], "");
@@ -356,5 +395,61 @@ Item {
356 view.locked = false;
395 view.locked = false;
357 tryCompare(view, "required", false);
396 tryCompare(view, "required", false);
400+ Regression test for https://bugs.launchpad.net/ubuntu/+source/unity8/+bug/1388359
401+ "User metrics can no longer be changed by double tap"
403+ function test_doubleTapSwitchesToNextInfographic() {
404+ var infographicPrivate = findInvisibleChild(view, "infographicPrivate");
405+ verify(infographicPrivate);
407+ // wait for the UI to settle down before double tapping it
408+ tryCompare(infographicPrivate, "animating", false);
410+ var dataCircle = findChild(view, "dataCircle");
417+ tryCompare(infographicDataChangedSpy, "count", 1);
420+ function test_movesBackIntoPlaceWhenNotDraggedFarEnough() {
421+ var coverPage = findChild(view, "coverPage");
423+ var dragEvaluator = findInvisibleChild(coverPage, "edgeDragEvaluator");
424+ verify(dragEvaluator);
426+ // Make it easier to get a rejection/rollback. Otherwise would have to inject
427+ // a fake timer into dragEvaluator.
428+ // Afterall, we are testing if the CoverPage indeed moves back on a
429+ // rollback decision, not the drag evaluation itself.
430+ dragEvaluator.minDragDistance = dragEvaluator.maxDragDistance / 2;
432+ // it starts as fully shown
433+ compare(coverPage.x, 0);
435+ // then we drag it a bit
436+ var startX = coverPage.width - 1;
437+ var touchY = coverPage.height / 2;
438+ var dragXDelta = -(dragEvaluator.minDragDistance * 0.3);
439+ touchFlick(coverPage,
440+ startX , touchY, // start pos
441+ startX + dragXDelta, touchY, // end pos
442+ true /* beginTouch */, false /* endTouch */);
444+ // which should make it move a bit
445+ tryCompareFunction(function() {return coverPage.x < 0;}, true);
447+ // then we release it
448+ touchRelease(coverPage, startX + dragXDelta, touchY);
450+ // which should make it move back into its original position as it didn't move
451+ // far enough to have it hidden
452+ tryCompare(coverPage, "x", 0);