diff -Nru unity8-8.10+15.10.20150612/CODING unity8-8.10+15.10.20150616.1/CODING --- unity8-8.10+15.10.20150612/CODING 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/CODING 2015-06-16 15:12:15.000000000 +0000 @@ -158,6 +158,10 @@ $ make gdbtestComponentName +To run a single test function of a single component/class: + +$ make testComponentName FUNCTION="TestCaseName::functionName" + To run a test application that allow you to manually test or to simply try out a given component: diff -Nru unity8-8.10+15.10.20150612/debian/changelog unity8-8.10+15.10.20150616.1/debian/changelog --- unity8-8.10+15.10.20150612/debian/changelog 2015-06-17 12:41:17.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/debian/changelog 2015-06-17 12:41:18.000000000 +0000 @@ -1,3 +1,48 @@ +unity8 (8.10+15.10.20150616.1-0ubuntu1) wily; urgency=medium + + [ Albert Astals Cid ] + * Bind running to the proper object.visible + * Do not use template in generated card creator code + * Fix regression introduced by the concierge change + * Take into account the extra margin on top when calculating the + display margin + * workaround oxide 1.7 issue (LP: #1459142) + + [ CI Train Bot ] + * New rebuild forced. + + [ Federico Gimenez ] + * On the autopilot helpers, swipe if the item to open from the dash is + not visible. unity8-autopilot dependencies now require ubuntu-ui- + toolkit-autopilot (>= 1.2.1485+15.04.20150417.1-0ubuntu1) + + [ Florian Boucault ] + * Notifications: shaped icon was stretching the icon instead of + respecting its aspect ratio and filling the whole shape. (LP: + #1450229) + + [ Josh Arenson ] + * Implement bare-bones shellMode=greeter and shellMode=shell + + [ Leo Arias ] + * On the autopilot helpers, swipe if the item to open from the dash is + not visible. unity8-autopilot dependencies now require ubuntu-ui- + toolkit-autopilot (>= 1.2.1485+15.04.20150417.1-0ubuntu1) + + [ Leonardo Arias Fonseca ] + * On the autopilot helpers, swipe if the item to open from the dash is + not visible. unity8-autopilot dependencies now require ubuntu-ui- + toolkit-autopilot (>= 1.2.1485+15.04.20150417.1-0ubuntu1) + + [ Michael Zanetti ] + * add info on how to run a single function in make test + + [ Richard Huddie ] + * Slow down the speed of autopilot helpers used to swipe to a + different scope to improve the reliability. (LP: #1461059, #1457047) + + -- CI Train Bot Tue, 16 Jun 2015 15:12:59 +0000 + unity8 (8.10+15.10.20150612-0ubuntu2) wily; urgency=medium * No-change rebuild against Qt 5.4.2. diff -Nru unity8-8.10+15.10.20150612/debian/control unity8-8.10+15.10.20150616.1/debian/control --- unity8-8.10+15.10.20150612/debian/control 2015-06-17 12:41:17.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/debian/control 2015-06-17 12:41:18.000000000 +0000 @@ -151,7 +151,7 @@ python3-fixtures, python3-gi, qttestability-autopilot (>= 1.4), - ubuntu-ui-toolkit-autopilot, + ubuntu-ui-toolkit-autopilot (>= 1.2.1485+15.04.20150417.1-0ubuntu1), unity-scope-click, unity8 (= ${source:Version}), unity8-fake-env (= ${source:Version}), diff -Nru unity8-8.10+15.10.20150612/plugins/Dash/CardCreator.js unity8-8.10+15.10.20150616.1/plugins/Dash/CardCreator.js --- unity8-8.10+15.10.20150612/plugins/Dash/CardCreator.js 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/plugins/Dash/CardCreator.js 2015-06-16 15:12:28.000000000 +0000 @@ -16,6 +16,9 @@ .pragma library +// %1 is the template["card-background"] string +// %2 is the template["card-background"]["elements"][0] +// %3 is the template["card-background"]["elements"][1] var kBackgroundLoaderCode = 'Loader {\n\ id: backgroundLoader; \n\ objectName: "backgroundLoader"; \n\ @@ -34,18 +37,14 @@ objectName: "backgroundImage"; \n\ source: { \n\ if (cardData && typeof cardData["background"] === "string") return cardData["background"]; \n\ - else if (template && typeof template["card-background"] === "string") return template["card-background"]; \n\ - else return ""; \n\ + else return "%1"; \n\ } \n\ } \n\ function getColor(index) { \n\ if (cardData && typeof cardData["background"] === "object" \n\ && (cardData["background"]["type"] === "color" || cardData["background"]["type"] === "gradient")) { \n\ return cardData["background"]["elements"][index]; \n\ - } else if (template && typeof template["card-background"] === "object" \n\ - && (template["card-background"]["type"] === "color" || template["card-background"]["type"] === "gradient")) { \n\ - return template["card-background"]["elements"][index]; \n\ - } else return undefined; \n\ + } else return index === 0 ? %2 : %3; \n\ } \n\ } \n\ }\n'; @@ -70,6 +69,7 @@ property bool doShapeItem: components["art"]["conciergeMode"] !== true; \n\ visible: image.status == Image.Ready; \n\ readonly property alias image: artImage.image; \n\ + property alias borderSource: artShapeShape.borderSource; \n\ ShaderEffectSource { \n\ id: artShapeSource; \n\ sourceItem: artImage; \n\ @@ -79,6 +79,7 @@ hideSource: doShapeItem; \n\ } \n\ Shape { \n\ + id: artShapeShape; \n\ image: artShapeSource; \n\ anchors.fill: parent; \n\ visible: doShapeItem; \n\ @@ -315,9 +316,11 @@ function cardString(template, components) { var code; + + var templateInteractive = (template == null ? true : (template["non-interactive"] !== undefined ? !template["non-interactive"] : true)) ? "true" : "false"; + code = 'AbstractButton { \n\ id: root; \n\ - property var template; \n\ property var components; \n\ property var cardData; \n\ property var artShapeBorderSource: undefined; \n\ @@ -330,8 +333,8 @@ property bool asynchronous: true; \n\ property bool showHeader: true; \n\ implicitWidth: childrenRect.width; \n\ - enabled: root.template == null ? true : (root.template["non-interactive"] !== undefined ? !root.template["non-interactive"] : true); \n\ - \n'; + enabled: %1; \n\ + \n'.arg(templateInteractive); var hasArt = components["art"] && components["art"]["field"] || false; var hasSummary = components["summary"] || false; @@ -348,7 +351,18 @@ var hasAttributes = hasTitle && components["attributes"]["field"] || false; if (hasBackground) { - code += kBackgroundLoaderCode; + var templateCardBackground = (template && typeof template["card-background"] === "string") ? template["card-background"] : ""; + var backgroundElements0; + var backgroundElements1; + if (template && typeof template["card-background"] === "object" && (template["card-background"]["type"] === "color" || template["card-background"]["type"] === "gradient")) { + if (template["card-background"]["elements"][0] !== undefined) { + backgroundElements0 = '"%1"'.arg(template["card-background"]["elements"][0]); + } + if (template["card-background"]["elements"][1] !== undefined) { + backgroundElements1 = '"%1"'.arg(template["card-background"]["elements"][1]); + } + } + code += kBackgroundLoaderCode.arg(templateCardBackground).arg(backgroundElements0).arg(backgroundElements1); } if (hasArt) { diff -Nru unity8-8.10+15.10.20150612/po/ast.po unity8-8.10+15.10.20150616.1/po/ast.po --- unity8-8.10+15.10.20150612/po/ast.po 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/po/ast.po 2015-06-16 15:11:19.000000000 +0000 @@ -15,7 +15,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2015-06-12 05:29+0000\n" +"X-Launchpad-Export-Date: 2015-06-16 11:20+0000\n" "X-Generator: Launchpad (build 17557)\n" #: plugins/LightDM/Greeter.cpp:112 diff -Nru unity8-8.10+15.10.20150612/qml/Components/ResponsiveVerticalJournal.qml unity8-8.10+15.10.20150616.1/qml/Components/ResponsiveVerticalJournal.qml --- unity8-8.10+15.10.20150612/qml/Components/ResponsiveVerticalJournal.qml 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/qml/Components/ResponsiveVerticalJournal.qml 2015-06-16 15:12:33.000000000 +0000 @@ -39,6 +39,8 @@ +-----+ */ Item { + id: root + property real minimumColumnSpacing: units.gu(1) property alias columnWidth: verticalJournalView.columnWidth @@ -46,8 +48,8 @@ property alias model: verticalJournalView.model property alias delegate: verticalJournalView.delegate property alias cacheBuffer: verticalJournalView.cacheBuffer - property alias displayMarginBeginning: verticalJournalView.displayMarginBeginning - property alias displayMarginEnd: verticalJournalView.displayMarginEnd + property real displayMarginBeginning: 0 + property real displayMarginEnd: 0 implicitHeight: verticalJournalView.implicitHeight + rowSpacing clip: height < implicitHeight @@ -63,6 +65,9 @@ bottomMargin: rowSpacing / 2 } + displayMarginBeginning: -Math.max(-root.displayMarginBeginning - anchors.topMargin, 0) + displayMarginEnd:-Math.max(-root.displayMarginEnd - anchors.topMargin, 0) + function px2gu(pixels) { return Math.floor(pixels / units.gu(1)) } diff -Nru unity8-8.10+15.10.20150612/qml/Dash/CardCarousel.qml unity8-8.10+15.10.20150616.1/qml/Dash/CardCarousel.qml --- unity8-8.10+15.10.20150612/qml/Dash/CardCarousel.qml 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/qml/Dash/CardCarousel.qml 2015-06-16 15:12:21.000000000 +0000 @@ -61,7 +61,6 @@ item.fixedHeaderHeight = Qt.binding(function() { return carousel.headerHeight; }); item.height = Qt.binding(function() { return cardTool.cardHeight; }); item.cardData = Qt.binding(function() { return model; }); - item.template = Qt.binding(function() { return cardTool.template; }); item.components = Qt.binding(function() { return cardTool.components; }); item.fontScale = Qt.binding(function() { return carousel.fontScale; }); item.showHeader = Qt.binding(function() { return loader.explicitlyScaled; }); diff -Nru unity8-8.10+15.10.20150612/qml/Dash/CardGrid.qml unity8-8.10+15.10.20150616.1/qml/Dash/CardGrid.qml --- unity8-8.10+15.10.20150612/qml/Dash/CardGrid.qml 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/qml/Dash/CardGrid.qml 2015-06-16 15:12:21.000000000 +0000 @@ -66,7 +66,6 @@ item.fixedHeaderHeight = Qt.binding(function() { return cardTool.headerHeight; }); item.fixedArtShapeSize = Qt.binding(function() { return cardTool.artShapeSize; }); item.cardData = Qt.binding(function() { return model; }); - item.template = Qt.binding(function() { return cardTool.template; }); item.components = Qt.binding(function() { return cardTool.components; }); item.titleAlignment = Qt.binding(function() { return cardTool.titleAlignment; }); item.scopeStyle = root.scopeStyle; diff -Nru unity8-8.10+15.10.20150612/qml/Dash/CardHorizontalList.qml unity8-8.10+15.10.20150616.1/qml/Dash/CardHorizontalList.qml --- unity8-8.10+15.10.20150612/qml/Dash/CardHorizontalList.qml 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/qml/Dash/CardHorizontalList.qml 2015-06-16 15:12:21.000000000 +0000 @@ -53,7 +53,6 @@ item.fixedArtShapeSize = Qt.binding(function() { return cardTool.artShapeSize; }); item.fixedHeaderHeight = Qt.binding(function() { return cardTool.headerHeight; }); item.cardData = Qt.binding(function() { return model; }); - item.template = Qt.binding(function() { return cardTool.template; }); item.components = Qt.binding(function() { return cardTool.components; }); item.titleAlignment = Qt.binding(function() { return cardTool.titleAlignment; }); item.scopeStyle = root.scopeStyle; diff -Nru unity8-8.10+15.10.20150612/qml/Dash/CardTool.qml unity8-8.10+15.10.20150616.1/qml/Dash/CardTool.qml --- unity8-8.10+15.10.20150612/qml/Dash/CardTool.qml 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/qml/Dash/CardTool.qml 2015-06-16 15:12:21.000000000 +0000 @@ -198,8 +198,8 @@ Loader { id: cardLoader - property var fields: ["art", "mascot", "title", "subtitle", "summary", "attributes"] - property var maxData: { + readonly property var fields: ["art", "mascot", "title", "subtitle", "summary", "attributes"] + readonly property var maxData: { "art": Qt.resolvedUrl("graphics/pixel.png"), "mascot": Qt.resolvedUrl("graphics/pixel.png"), "title": "—\n—", @@ -211,26 +211,27 @@ onLoaded: { item.objectName = "cardToolCard"; item.asynchronous = false; - item.template = Qt.binding(function() { return cardTool.template; }); item.components = Qt.binding(function() { return cardTool.components; }); item.width = Qt.binding(function() { return cardTool.cardWidth || item.implicitWidth; }); item.height = Qt.binding(function() { return cardTool.cardHeight || item.implicitHeight; }); } Connections { - target: cardLoader.item - onComponentsChanged: { - var data = {}; - for (var k in cardLoader.fields) { - var component = cardLoader.item.components[cardLoader.fields[k]]; - var key = cardLoader.fields[k]; - if ((typeof component === "string" && component.length > 0) || - (typeof component === "object" && component !== null - && typeof component["field"] === "string" && component["field"].length > 0)) { - data[key] = cardLoader.maxData[key]; - } + target: cardTool + onTemplateChanged: cardLoader.updateCardData(); + onComponentsChanged: cardLoader.updateCardData(); + } + function updateCardData() { + var data = {}; + for (var k in fields) { + var component = cardTool.components[fields[k]]; + var key = fields[k]; + if ((typeof component === "string" && component.length > 0) || + (typeof component === "object" && component !== null + && typeof component["field"] === "string" && component["field"].length > 0)) { + data[key] = maxData[key]; } - cardLoader.item.cardData = data; } + item.cardData = data; } } } diff -Nru unity8-8.10+15.10.20150612/qml/Dash/CardVerticalJournal.qml unity8-8.10+15.10.20150616.1/qml/Dash/CardVerticalJournal.qml --- unity8-8.10+15.10.20150612/qml/Dash/CardVerticalJournal.qml 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/qml/Dash/CardVerticalJournal.qml 2015-06-16 15:12:21.000000000 +0000 @@ -72,7 +72,6 @@ item.fixedArtShapeSize = Qt.binding(function() { return cardTool.artShapeSize; }); item.fixedHeaderHeight = Qt.binding(function() { return cardTool.headerHeight; }); item.cardData = Qt.binding(function() { return model; }); - item.template = Qt.binding(function() { return cardTool.template; }); item.components = Qt.binding(function() { return cardTool.components; }); item.titleAlignment = Qt.binding(function() { return cardTool.titleAlignment; }); item.scopeStyle = root.scopeStyle; diff -Nru unity8-8.10+15.10.20150612/qml/Dash/GenericScopeView.qml unity8-8.10+15.10.20150616.1/qml/Dash/GenericScopeView.qml --- unity8-8.10+15.10.20150612/qml/Dash/GenericScopeView.qml 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/qml/Dash/GenericScopeView.qml 2015-06-16 15:12:33.000000000 +0000 @@ -425,7 +425,7 @@ // to the next, we set the visible range to the viewport so // items are not culled (invisible) but still use no cacheBuffer // (it will be set once the scope is the current one) - var displayMarginBeginning = baseItem.y; + var displayMarginBeginning = baseItem.y + rendererLoader.anchors.topMargin; displayMarginBeginning = -Math.max(-displayMarginBeginning, 0); displayMarginBeginning = -Math.min(-displayMarginBeginning, baseItem.height); displayMarginBeginning = Math.round(displayMarginBeginning); diff -Nru unity8-8.10+15.10.20150612/qml/Greeter/ShimGreeter.qml unity8-8.10+15.10.20150616.1/qml/Greeter/ShimGreeter.qml --- unity8-8.10+15.10.20150612/qml/Greeter/ShimGreeter.qml 1970-01-01 00:00:00.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/qml/Greeter/ShimGreeter.qml 2015-06-16 15:12:46.000000000 +0000 @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2015 Canonical, Ltd. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import QtQuick 2.3 + +/* + * This is a shim greeter that is only used to provide a shell, + * running without a greeter, the requisite information + * + */ + +/* FIXME: this shuld be fine as a QtObject, but bug lp:1447391 + * dictates wrapping as an item instead + */ +Item { + id: shimGreeter + + readonly property bool active: false + readonly property bool hasLockedApp: lockedApp !== "" + readonly property bool locked: false + readonly property bool shown: false + readonly property bool waiting: false + + property string lockedApp: "" + + // Since ShimGreeter is never active, these can just return + property var forceShow: (function() { return; }) + property var notifyAboutToFocusApp: (function(appId) { return; }) + property var notifyAppFocused: (function(appId) { return; }) + property var notifyShowingDashFromDrag: (function(appId) { return false; }) + +} diff -Nru unity8-8.10+15.10.20150612/qml/Notifications/ShapedIcon.qml unity8-8.10+15.10.20150616.1/qml/Notifications/ShapedIcon.qml --- unity8-8.10+15.10.20150612/qml/Notifications/ShapedIcon.qml 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/qml/Notifications/ShapedIcon.qml 2015-06-16 15:12:53.000000000 +0000 @@ -14,8 +14,8 @@ * along with this program. If not, see . */ -import QtQuick 2.0 -import Ubuntu.Components 0.1 +import QtQuick 2.3 +import Ubuntu.Components 1.2 Item { property string fileSource @@ -25,7 +25,8 @@ objectName: "shapedIcon" anchors.fill: parent visible: shaped - image: realImage + source: realImage + sourceFillMode: UbuntuShape.PreserveAspectCrop } Image { diff -Nru unity8-8.10+15.10.20150612/qml/Shell.qml unity8-8.10+15.10.20150616.1/qml/Shell.qml --- unity8-8.10+15.10.20150612/qml/Shell.qml 2015-06-12 16:07:24.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/qml/Shell.qml 2015-06-16 15:12:46.000000000 +0000 @@ -111,6 +111,8 @@ // This is _only_ used to expose the property to autopilot tests readonly property string testShellMode: shellMode + readonly property alias greeter: greeterLoader.item + function activateApplication(appId) { if (ApplicationManager.findApplication(appId)) { ApplicationManager.requestFocusApplication(appId); @@ -262,7 +264,9 @@ ? "phone" : shell.usageScenario source: { - if (applicationsDisplayLoader.usageScenario === "phone") { + if(shellMode === "greeter") { + return "Stages/ShimStage.qml" + } else if (applicationsDisplayLoader.usageScenario === "phone") { return "Stages/PhoneStage.qml"; } else if (applicationsDisplayLoader.usageScenario === "tablet") { return "Stages/TabletStage.qml"; @@ -414,50 +418,59 @@ } } - Greeter { - id: greeter - objectName: "greeter" - - hides: [launcher, panel.indicators] - tabletMode: shell.usageScenario !== "phone" - launcherOffset: launcher.progress - forcedUnlock: tutorial.running - background: shell.background - + Loader { + id: greeterLoader anchors.fill: parent anchors.topMargin: panel.panelHeight + sourceComponent: shellMode != "shell" ? integratedGreeter : + Qt.createComponent(Qt.resolvedUrl("Greeter/ShimGreeter.qml")); + onLoaded: { + item.objectName = "greeter" + } + } - // avoid overlapping with Launcher's edge drag area - // FIXME: Fix TouchRegistry & friends and remove this workaround - // Issue involves launcher's DDA getting disabled on a long - // left-edge drag - dragHandleLeftMargin: launcher.available ? launcher.dragAreaWidth + 1 : 0 + Component { + id: integratedGreeter + Greeter { + + hides: [launcher, panel.indicators] + tabletMode: shell.sideStageEnabled + launcherOffset: launcher.progress + forcedUnlock: tutorial.running + background: shell.background + + // avoid overlapping with Launcher's edge drag area + // FIXME: Fix TouchRegistry & friends and remove this workaround + // Issue involves launcher's DDA getting disabled on a long + // left-edge drag + dragHandleLeftMargin: launcher.available ? launcher.dragAreaWidth + 1 : 0 - onSessionStarted: { - launcher.hide(); - } + onSessionStarted: { + launcher.hide(); + } - onTease: { - if (!tutorial.running) { - launcher.tease(); + onTease: { + if (!tutorial.running) { + launcher.tease(); + } } - } - onEmergencyCall: startLockedApp("dialer-app") + onEmergencyCall: startLockedApp("dialer-app") - Timer { - // See powerConnection for why this is useful - id: showGreeterDelayed - interval: 1 - onTriggered: { - greeter.forceShow(); + Binding { + target: ApplicationManager + property: "suspended" + value: greeter.shown } } + } - Binding { - target: ApplicationManager - property: "suspended" - value: greeter.shown + Timer { + // See powerConnection for why this is useful + id: showGreeterDelayed + interval: 1 + onTriggered: { + greeter.forceShow(); } } diff -Nru unity8-8.10+15.10.20150612/qml/Stages/ShimStage.qml unity8-8.10+15.10.20150616.1/qml/Stages/ShimStage.qml --- unity8-8.10+15.10.20150612/qml/Stages/ShimStage.qml 1970-01-01 00:00:00.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/qml/Stages/ShimStage.qml 2015-06-16 15:12:46.000000000 +0000 @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2015 Canonical, Ltd. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import QtQuick 2.3 +import Ubuntu.Components 0.1 + +Rectangle { + id: shimStage + + anchors.fill: parent + color: UbuntuColors.lightAubergine + + Text { + id: greeterModeText + + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + anchors.topMargin: units.gu(10) + font.bold: true + horizontalAlignment: Text.AlignHCenter + text: "Shell is in \"greeter\" mode" + } + + Text { + anchors.centerIn: parent + color: UbuntuColors.orange + font.pointSize: units.gu(8) + horizontalAlignment: Text.AlignHCenter + text: "Shim \nStage" + } +} diff -Nru unity8-8.10+15.10.20150612/tests/autopilot/unity8/shell/emulators/dash.py unity8-8.10+15.10.20150616.1/tests/autopilot/unity8/shell/emulators/dash.py --- unity8-8.10+15.10.20150612/tests/autopilot/unity8/shell/emulators/dash.py 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/autopilot/unity8/shell/emulators/dash.py 2015-06-16 15:12:08.000000000 +0000 @@ -130,7 +130,7 @@ x, y, width, height = dash_content.globalRect # Make the drag range be a multiple of the drag "rate" value. # Workarounds https://bugs.launchpad.net/mir/+bug/1399690 - rate = 10 + rate = 5 divisions = 5 jump = (width / divisions) // rate * rate start_x = x + jump @@ -146,7 +146,7 @@ x, y, width, height = dash_content.globalRect # Make the drag range be a multiple of the drag "rate" value. # Workarounds https://bugs.launchpad.net/mir/+bug/1399690 - rate = 10 + rate = 5 divisions = 5 jump = (width / divisions) // rate * rate start_x = x + jump * (divisions - 1) @@ -185,14 +185,15 @@ class ListViewWithPageHeader(ubuntuuitoolkit.QQuickFlickable): - pass + + margin_to_swipe_from_bottom = ubuntuuitoolkit.units.gu(4) class GenericScopeView(ubuntuuitoolkit.UbuntuUIToolkitCustomProxyObjectBase): """Autopilot emulator for generic scopes.""" @autopilot_logging.log_action(logger.info) - def open_preview(self, category, app_name): + def open_preview(self, category, app_name, press_duration=0.10): """Open the preview of an application. :parameter category: The name of the category where the application is. @@ -203,16 +204,19 @@ # FIXME some categories need a long press in order to see the preview. # Some categories do not show previews, like recent apps. # --elopio - 2014-1-14 - self.click_scope_item(category, app_name) + self.click_scope_item(category, app_name, press_duration) preview_list = self.wait_select_single( 'QQuickLoader', objectName='subPageLoader') preview_list.subPageShown.wait_for(True) preview_list.x.wait_for(0) + self.get_root_instance().select_single( + objectName='processingIndicator').visible.wait_for(False) return preview_list.select_single( - Preview, objectName='preview{}'.format(preview_list.currentIndex)) + Preview, objectName='preview{}'.format( + preview_list.initialIndex)) @autopilot_logging.log_action(logger.debug) - def click_scope_item(self, category, title): + def click_scope_item(self, category, title, press_duration=0.10): """Click an item from the scope. :parameter category: The name of the category where the item is. @@ -220,9 +224,12 @@ """ category_element = self._get_category_element(category) - icon = category_element.wait_select_single('AbstractButton', - title=title) - self.pointing_device.click_object(icon) + icon = category_element.wait_select_single( + 'AbstractButton', title=title) + list_view = self.select_single( + ListViewWithPageHeader, objectName='categoryListView') + list_view.swipe_child_into_view(icon) + self.pointing_device.click_object(icon, press_duration=press_duration) def _get_category_element(self, category): try: diff -Nru unity8-8.10+15.10.20150612/tests/autopilot/unity8/shell/tests/test_emulators.py unity8-8.10+15.10.20150616.1/tests/autopilot/unity8/shell/tests/test_emulators.py --- unity8-8.10+15.10.20150612/tests/autopilot/unity8/shell/tests/test_emulators.py 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/autopilot/unity8/shell/tests/test_emulators.py 2015-06-16 15:12:08.000000000 +0000 @@ -120,6 +120,12 @@ self.assertIsInstance(preview, dash_emulators.Preview) self.assertTrue(preview.isCurrent) + def test_open_preview_of_non_visible_item(self): + """Open an item that requires swiping to make it visible.""" + preview = self.generic_scope.open_preview('2', 'Title.2.0') + self.assertIsInstance(preview, dash_emulators.Preview) + self.assertTrue(preview.isCurrent) + class DashAppsEmulatorTestCase(tests.DashBaseTestCase): diff -Nru unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/1.res unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/1.res --- unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/1.res 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/1.res 2015-06-16 15:12:28.000000000 +0000 @@ -1,6 +1,5 @@ AbstractButton { id: root; - property var template; property var components; property var cardData; property var artShapeBorderSource: undefined; @@ -13,7 +12,7 @@ property bool asynchronous: true; property bool showHeader: true; implicitWidth: childrenRect.width; - enabled: root.template == null ? true : (root.template["non-interactive"] !== undefined ? !root.template["non-interactive"] : true); + enabled: true; onArtShapeBorderSourceChanged: { if (artShapeBorderSource !== undefined && artShapeLoader.item) artShapeLoader.item.borderSource = artShapeBorderSource; } readonly property size artShapeSize: artShapeLoader.item ? Qt.size(artShapeLoader.item.width, artShapeLoader.item.height) : Qt.size(-1, -1); @@ -34,6 +33,7 @@ property bool doShapeItem: components["art"]["conciergeMode"] !== true; visible: image.status == Image.Ready; readonly property alias image: artImage.image; + property alias borderSource: artShapeShape.borderSource; ShaderEffectSource { id: artShapeSource; sourceItem: artImage; @@ -43,6 +43,7 @@ hideSource: doShapeItem; } Shape { + id: artShapeShape; image: artShapeSource; anchors.fill: parent; visible: doShapeItem; diff -Nru unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/2.res unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/2.res --- unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/2.res 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/2.res 2015-06-16 15:12:21.000000000 +0000 @@ -1,6 +1,5 @@ AbstractButton { id: root; - property var template; property var components; property var cardData; property var artShapeBorderSource: undefined; @@ -13,7 +12,7 @@ property bool asynchronous: true; property bool showHeader: true; implicitWidth: childrenRect.width; - enabled: root.template == null ? true : (root.template["non-interactive"] !== undefined ? !root.template["non-interactive"] : true); + enabled: true; Loader { id: backgroundLoader; @@ -33,18 +32,14 @@ objectName: "backgroundImage"; source: { if (cardData && typeof cardData["background"] === "string") return cardData["background"]; - else if (template && typeof template["card-background"] === "string") return template["card-background"]; - else return ""; + else return ""; } } function getColor(index) { if (cardData && typeof cardData["background"] === "object" && (cardData["background"]["type"] === "color" || cardData["background"]["type"] === "gradient")) { return cardData["background"]["elements"][index]; - } else if (template && typeof template["card-background"] === "object" - && (template["card-background"]["type"] === "color" || template["card-background"]["type"] === "gradient")) { - return template["card-background"]["elements"][index]; - } else return undefined; + } else return index === 0 ? "#E9E9E9" : undefined; } } } diff -Nru unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/3.res unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/3.res --- unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/3.res 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/3.res 2015-06-16 15:12:28.000000000 +0000 @@ -1,6 +1,5 @@ AbstractButton { id: root; - property var template; property var components; property var cardData; property var artShapeBorderSource: undefined; @@ -13,7 +12,7 @@ property bool asynchronous: true; property bool showHeader: true; implicitWidth: childrenRect.width; - enabled: root.template == null ? true : (root.template["non-interactive"] !== undefined ? !root.template["non-interactive"] : true); + enabled: true; onArtShapeBorderSourceChanged: { if (artShapeBorderSource !== undefined && artShapeLoader.item) artShapeLoader.item.borderSource = artShapeBorderSource; } readonly property size artShapeSize: artShapeLoader.item ? Qt.size(artShapeLoader.item.width, artShapeLoader.item.height) : Qt.size(-1, -1); @@ -34,6 +33,7 @@ property bool doShapeItem: components["art"]["conciergeMode"] !== true; visible: image.status == Image.Ready; readonly property alias image: artImage.image; + property alias borderSource: artShapeShape.borderSource; ShaderEffectSource { id: artShapeSource; sourceItem: artImage; @@ -43,6 +43,7 @@ hideSource: doShapeItem; } Shape { + id: artShapeShape; image: artShapeSource; anchors.fill: parent; visible: doShapeItem; diff -Nru unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/4.res unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/4.res --- unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/4.res 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/4.res 2015-06-16 15:12:21.000000000 +0000 @@ -1,6 +1,5 @@ AbstractButton { id: root; - property var template; property var components; property var cardData; property var artShapeBorderSource: undefined; @@ -13,7 +12,7 @@ property bool asynchronous: true; property bool showHeader: true; implicitWidth: childrenRect.width; - enabled: root.template == null ? true : (root.template["non-interactive"] !== undefined ? !root.template["non-interactive"] : true); + enabled: true; readonly property size artShapeSize: Qt.size(-1, -1); readonly property int headerHeight: row.height; diff -Nru unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/5.res unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/5.res --- unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/5.res 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/5.res 2015-06-16 15:12:28.000000000 +0000 @@ -1,6 +1,5 @@ AbstractButton { id: root; - property var template; property var components; property var cardData; property var artShapeBorderSource: undefined; @@ -13,7 +12,7 @@ property bool asynchronous: true; property bool showHeader: true; implicitWidth: childrenRect.width; - enabled: root.template == null ? true : (root.template["non-interactive"] !== undefined ? !root.template["non-interactive"] : true); + enabled: false; onArtShapeBorderSourceChanged: { if (artShapeBorderSource !== undefined && artShapeLoader.item) artShapeLoader.item.borderSource = artShapeBorderSource; } readonly property size artShapeSize: artShapeLoader.item ? Qt.size(artShapeLoader.item.width, artShapeLoader.item.height) : Qt.size(-1, -1); @@ -34,6 +33,7 @@ property bool doShapeItem: components["art"]["conciergeMode"] !== true; visible: image.status == Image.Ready; readonly property alias image: artImage.image; + property alias borderSource: artShapeShape.borderSource; ShaderEffectSource { id: artShapeSource; sourceItem: artImage; @@ -43,6 +43,7 @@ hideSource: doShapeItem; } Shape { + id: artShapeShape; image: artShapeSource; anchors.fill: parent; visible: doShapeItem; diff -Nru unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/5.tst unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/5.tst --- unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/5.tst 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/5.tst 2015-06-16 15:12:21.000000000 +0000 @@ -1,3 +1,3 @@ -template: {"card-layout":"vertical","card-size":"medium","category-layout":"carousel","collapsed-rows":2,"overlay":true} +template: {"non-interactive":true,"card-layout":"vertical","card-size":"medium","category-layout":"carousel","collapsed-rows":2,"overlay":true} components: {"art":{"aspect-ratio":1,"field":"art"},"subtitle":{"field":"artist"},"title":{"field":"title"},"attributes":{}} result: 5.res diff -Nru unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/6.res unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/6.res --- unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/6.res 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/6.res 2015-06-16 15:12:21.000000000 +0000 @@ -1,6 +1,5 @@ AbstractButton { id: root; - property var template; property var components; property var cardData; property var artShapeBorderSource: undefined; @@ -13,7 +12,7 @@ property bool asynchronous: true; property bool showHeader: true; implicitWidth: childrenRect.width; - enabled: root.template == null ? true : (root.template["non-interactive"] !== undefined ? !root.template["non-interactive"] : true); + enabled: true; Loader { id: backgroundLoader; @@ -33,18 +32,14 @@ objectName: "backgroundImage"; source: { if (cardData && typeof cardData["background"] === "string") return cardData["background"]; - else if (template && typeof template["card-background"] === "string") return template["card-background"]; - else return ""; + else return "http://assets.ubuntu.com/sites/ubuntu/latest/u/img/logos/logo-ubuntu-grey.png"; } } function getColor(index) { if (cardData && typeof cardData["background"] === "object" && (cardData["background"]["type"] === "color" || cardData["background"]["type"] === "gradient")) { return cardData["background"]["elements"][index]; - } else if (template && typeof template["card-background"] === "object" - && (template["card-background"]["type"] === "color" || template["card-background"]["type"] === "gradient")) { - return template["card-background"]["elements"][index]; - } else return undefined; + } else return index === 0 ? undefined : undefined; } } } diff -Nru unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/6.tst unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/6.tst --- unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/6.tst 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/6.tst 2015-06-16 15:12:21.000000000 +0000 @@ -1,3 +1,3 @@ -template: {"card-background":{"elements":["#E9E9E9"],"type":"color"},"card-layout":"vertical","card-size":"medium","category-layout":"grid","collapsed-rows":2} +template: {"card-background":"http://assets.ubuntu.com/sites/ubuntu/latest/u/img/logos/logo-ubuntu-grey.png","card-layout":"vertical","card-size":"medium","category-layout":"grid","collapsed-rows":2} components: {"art":{"aspect-ratio":1},"background":{"field":"background"},"subtitle":{"field":"author"},"title":{"field":"title"},"emblem":{"field":"source"},"attributes":{}} result: 6.res diff -Nru unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/7.res unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/7.res --- unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/7.res 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/7.res 2015-06-16 15:12:21.000000000 +0000 @@ -1,6 +1,5 @@ AbstractButton { id: root; - property var template; property var components; property var cardData; property var artShapeBorderSource: undefined; @@ -13,7 +12,7 @@ property bool asynchronous: true; property bool showHeader: true; implicitWidth: childrenRect.width; - enabled: root.template == null ? true : (root.template["non-interactive"] !== undefined ? !root.template["non-interactive"] : true); + enabled: true; Loader { id: backgroundLoader; @@ -33,18 +32,14 @@ objectName: "backgroundImage"; source: { if (cardData && typeof cardData["background"] === "string") return cardData["background"]; - else if (template && typeof template["card-background"] === "string") return template["card-background"]; - else return ""; + else return ""; } } function getColor(index) { if (cardData && typeof cardData["background"] === "object" && (cardData["background"]["type"] === "color" || cardData["background"]["type"] === "gradient")) { return cardData["background"]["elements"][index]; - } else if (template && typeof template["card-background"] === "object" - && (template["card-background"]["type"] === "color" || template["card-background"]["type"] === "gradient")) { - return template["card-background"]["elements"][index]; - } else return undefined; + } else return index === 0 ? "#E9E9E9" : "#E9AAE9"; } } } diff -Nru unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/7.tst unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/7.tst --- unity8-8.10+15.10.20150612/tests/plugins/Dash/cardcreator/7.tst 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/plugins/Dash/cardcreator/7.tst 2015-06-16 15:12:21.000000000 +0000 @@ -1,3 +1,3 @@ -template: {"card-background":{"elements":["#E9E9E9"],"type":"color"},"card-layout":"vertical","card-size":"medium","category-layout":"grid","collapsed-rows":2} +template: {"card-background":{"elements":["#E9E9E9","#E9AAE9"],"type":"color"},"card-layout":"vertical","card-size":"medium","category-layout":"grid","collapsed-rows":2} components: {"art":{"aspect-ratio":1},"background":{"field":"background"},"mascot":{"field":"icon"},"subtitle":{"field":"author"},"title":{"field":"title"},"attributes":{"field":"attributes","max-count":2}} result: 7.res diff -Nru unity8-8.10+15.10.20150612/tests/qmltests/CMakeLists.txt unity8-8.10+15.10.20150616.1/tests/qmltests/CMakeLists.txt --- unity8-8.10+15.10.20150612/tests/qmltests/CMakeLists.txt 2015-06-12 16:07:24.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/qmltests/CMakeLists.txt 2015-06-16 15:11:48.000000000 +0000 @@ -94,4 +94,4 @@ add_qml_test(Stages WindowMoveResizeArea) add_qml_test(Stages Splash) add_qml_test(Tutorial Tutorial) -add_qml_test(Wizard Wizard) +add_qml_test(Wizard Wizard ENVIRONMENT "OXIDE_NO_SANDBOX=1") diff -Nru unity8-8.10+15.10.20150612/tests/qmltests/Dash/tst_Card.qml unity8-8.10+15.10.20150616.1/tests/qmltests/Dash/tst_Card.qml --- unity8-8.10+15.10.20150612/tests/qmltests/Dash/tst_Card.qml 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/qmltests/Dash/tst_Card.qml 2015-06-16 15:12:21.000000000 +0000 @@ -124,7 +124,6 @@ sourceComponent: cardTool.cardComponent clip: true onLoaded: { - item.template = Qt.binding(function() { return cardTool.template; }); item.components = Qt.binding(function() { return cardTool.components; }); item.cardData = Qt.binding(function() { return Helpers.mapData(dataArea.text, cardTool.components, dataError); }); item.width = Qt.binding(function() { return cardTool.cardWidth || item.implicitWidth; }); diff -Nru unity8-8.10+15.10.20150612/tests/qmltests/Dash/tst_GenericScopeView.qml unity8-8.10+15.10.20150616.1/tests/qmltests/Dash/tst_GenericScopeView.qml --- unity8-8.10+15.10.20150612/tests/qmltests/Dash/tst_GenericScopeView.qml 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/qmltests/Dash/tst_GenericScopeView.qml 2015-06-16 15:12:28.000000000 +0000 @@ -302,6 +302,7 @@ } function closePreview() { + tryCompare(testCase.subPageLoader, "x", 0); var closePreviewMouseArea = findChild(subPageLoader.item, "pageHeader"); mouseClick(closePreviewMouseArea, units.gu(2), units.gu(2)); @@ -616,27 +617,49 @@ waitForRendering(category0); var cardTool = findChild(category0, "cardTool"); - var cardGrid = category0.item; - cardTool.template["non-interactive"] = true; + cardTool.templateChanged(); + + var category0 = findChild(categoryListView, "dashCategory0"); + waitForRendering(category0); + + var cardGrid = category0.item; compare(cardGrid.cardTool.template["non-interactive"], true); var item0 = findChild(cardGrid, "delegate0"); waitForRendering(item0); - item0.template = cardTool.template; - compare(item0.template["non-interactive"], true); compare(item0.enabled, false); var touchdown = findChild(item0, "touchdown"); compare(touchdown.visible, false); - mouseClick(item0); + mousePress(item0); compare(touchdown.visible, false); + mouseRelease(item0); cardTool.template["non-interactive"] = false; + cardTool.templateChanged(); compare(cardGrid.cardTool.template["non-interactive"], false); - item0.template = cardTool.template; - compare(item0.template["non-interactive"], false); + + waitForRendering(category0); + item0 = findChild(cardGrid, "delegate0"); compare(item0.enabled, true); + var touchdown = findChild(item0, "touchdown"); + + compare(touchdown.visible, false); + mousePress(item0); + compare(touchdown.visible, true); + mouseRelease(item0); + compare(touchdown.visible, false); + closePreview(); + } + + function test_carousel_borderSource() { + var category = scrollToCategory("dashCategory1"); + var tile = findChild(category, "carouselDelegate0"); + tryCompareFunction(function() { return findChild(tile, "artShapeLoader") !== null; }, true); + var artShapeLoader = findChild(tile, "artShapeLoader"); + var shape = findChildsByType(artShapeLoader, "UCUbuntuShape"); + compare(shape.borderSource, undefined); } } } diff -Nru unity8-8.10+15.10.20150612/tests/qmltests/tst_Shell.qml unity8-8.10+15.10.20150616.1/tests/qmltests/tst_Shell.qml --- unity8-8.10+15.10.20150612/tests/qmltests/tst_Shell.qml 2015-06-12 16:07:24.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/qmltests/tst_Shell.qml 2015-06-16 15:12:46.000000000 +0000 @@ -81,6 +81,8 @@ property bool itemDestroyed: false sourceComponent: Component { Shell { + property string shellMode: "full-greeter" /* default */ + usageScenario: "phone" orientation: Qt.PortraitOrientation primaryOrientation: Qt.PortraitOrientation diff -Nru unity8-8.10+15.10.20150612/tests/qmltests/tst_ShellWithPin.qml unity8-8.10+15.10.20150616.1/tests/qmltests/tst_ShellWithPin.qml --- unity8-8.10+15.10.20150612/tests/qmltests/tst_ShellWithPin.qml 2015-06-12 16:07:24.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/qmltests/tst_ShellWithPin.qml 2015-06-16 15:12:46.000000000 +0000 @@ -69,6 +69,8 @@ property bool itemDestroyed: false sourceComponent: Component { Shell { + property string shellMode: "full-greeter" /* default */ + Component.onDestruction: { shellLoader.itemDestroyed = true } diff -Nru unity8-8.10+15.10.20150612/tests/qmltests/Tutorial/tst_Tutorial.qml unity8-8.10+15.10.20150616.1/tests/qmltests/Tutorial/tst_Tutorial.qml --- unity8-8.10+15.10.20150612/tests/qmltests/Tutorial/tst_Tutorial.qml 2015-06-12 16:07:04.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/qmltests/Tutorial/tst_Tutorial.qml 2015-06-16 15:12:46.000000000 +0000 @@ -73,6 +73,7 @@ sourceComponent: Component { Shell { property string indicatorProfile: "phone" + property string shellMode: "full-greeter" /* default */ Component.onDestruction: { shellLoader.itemDestroyed = true; diff -Nru unity8-8.10+15.10.20150612/tests/utils/modules/Unity/Test/UnityTestCase.qml unity8-8.10+15.10.20150616.1/tests/utils/modules/Unity/Test/UnityTestCase.qml --- unity8-8.10+15.10.20150612/tests/utils/modules/Unity/Test/UnityTestCase.qml 2015-06-12 16:07:24.000000000 +0000 +++ unity8-8.10+15.10.20150616.1/tests/utils/modules/Unity/Test/UnityTestCase.qml 2015-06-16 15:11:53.000000000 +0000 @@ -26,6 +26,7 @@ // This is needed for waitForRendering calls to return // if the watched element already got rendered Rectangle { + id: rotatingRectangle width: units.gu(1) height: width parent: testCase.parent @@ -35,7 +36,7 @@ visible: testCase.running RotationAnimation on rotation { - running: parent.visible + running: rotatingRectangle.visible from: 0 to: 360 loops: Animation.Infinite