Merge lp:~cimi/unity8/fix-open-new-scope-from-tmp into lp:unity8

Proposed by Andrea Cimitan on 2015-02-04
Status: Superseded
Proposed branch: lp:~cimi/unity8/fix-open-new-scope-from-tmp
Merge into: lp:unity8
Diff against target: 470 lines (+171/-17)
16 files modified
qml/Dash/Dash.qml (+6/-4)
qml/Dash/DashContent.qml (+1/-2)
qml/Dash/Previews/Preview.qml (+2/-0)
qml/Dash/Previews/PreviewActions.qml (+1/-0)
tests/mocks/Unity/fake_previewmodel.cpp (+13/-1)
tests/mocks/Unity/fake_previewmodel.h (+7/-1)
tests/mocks/Unity/fake_previewstack.cpp (+3/-2)
tests/mocks/Unity/fake_previewstack.h (+4/-1)
tests/mocks/Unity/fake_previewwidgetmodel.cpp (+11/-0)
tests/mocks/Unity/fake_scope.cpp (+5/-5)
tests/mocks/Unity/fake_scopes.cpp (+14/-0)
tests/mocks/Unity/fake_scopes.h (+6/-0)
tests/mocks/Unity/fake_scopesoverview.cpp (+1/-0)
tests/qmltests/Dash/Previews/tst_Preview.qml (+31/-0)
tests/qmltests/Dash/tst_Dash.qml (+65/-0)
tests/qmltests/Dash/tst_GenericScopeView.qml (+1/-1)
To merge this branch: bzr merge lp:~cimi/unity8/fix-open-new-scope-from-tmp
Reviewer Review Type Date Requested Status
Michał Sawicz Needs Fixing on 2015-02-11
PS Jenkins bot continuous-integration Needs Fixing on 2015-02-04
Albert Astals Cid (community) 2015-02-04 Needs Information on 2015-02-04
Review via email: mp+248538@code.launchpad.net

This proposal has been superseded by a proposal from 2015-02-12.

Commit Message

Fix temp scopes opening temp scopes

Description of the Change

 * Are there any related MPs required for this MP to build/function as expected? Please list.
https://code.launchpad.net/~stolowski/unity-scopes-shell/fix-temp-scopes/+merge/248235
 * Did you perform an exploratory manual test run of your code change and any related functionality?
Yes
 * Did you make sure that your branch does not contain spurious tags?
Yes
 * If you changed the packaging (debian), did you subscribe the ubuntu-unity team to this MP?
n/a
 * If you changed the UI, has there been a design review?
n/a

To post a comment you must log in.
1552. By Andrea Cimitan on 2015-02-04

whitespace

Albert Astals Cid (aacid) wrote :

I don't understand the MR, you're adding to fake_scopes three methods that you don't use and you're removing the code in closeScopes that checks that the scope you closed is indeed a scope that was opened.

Also what's the point of having the scopeThatOpenedScope variable now that you can simply use scopes.closeScope?

review: Needs Information
Andrea Cimitan (cimi) wrote :

> I don't understand the MR, you're adding to fake_scopes three methods that you
> don't use

future proof, if we wanted to test those, since they added API for this branch

and you're removing the code in closeScopes that checks that the
> scope you closed is indeed a scope that was opened.
>
that code is broken... m_openScope is never updated

> Also what's the point of having the scopeThatOpenedScope variable now that you
> can simply use scopes.closeScope?

I can switch to that too... but didn't want to move far from the previous implementation

Albert Astals Cid (aacid) wrote :

> > I don't understand the MR, you're adding to fake_scopes three methods that
> you
> > don't use
>
> future proof, if we wanted to test those, since they added API for this branch

Hmmm, no, the only added api for the branch is
Q_INVOKABLE void closeScope(unity::shell::scopes::ScopeInterface* scope);
the others are private methods you'll never see

>
> and you're removing the code in closeScopes that checks that the
> > scope you closed is indeed a scope that was opened.
> >
> that code is broken... m_openScope is never updated

Broken where? after your changes? may be, then what about fixing it?

> > Also what's the point of having the scopeThatOpenedScope variable now that
> you
> > can simply use scopes.closeScope?
>
> I can switch to that too... but didn't want to move far from the previous
> implementation

Well, you made Pawel to add this new method and now you're not using it?

Also, why are you using
  dashTempScopeItem.scope.openScope(scopes.getScopeFromAll("MockScope9"));
?
Can you please make it work with a click that calls activate in the scope and thus ends up in Scope::activate that emits openScope?
That way we're properly exercising all the parts of the code

Michał Sawicz (saviq) wrote :

You need to depend on the new unity-api version, bump the API requirement in tests/mocks/Unity/CMakeLists.txt and bump unity-scopes-impl dep in debian/control.

review: Needs Fixing
1553. By Andrea Cimitan on 2015-02-11

Merged albert branch, more implementations on the mock

1554. By Andrea Cimitan on 2015-02-11

Moar fixes

1555. By Andrea Cimitan on 2015-02-12

More fixes

1556. By Andrea Cimitan on 2015-02-12

bump versions

1557. By Andrea Cimitan on 2015-02-12

remove console log

1558. By Andrea Cimitan on 2015-02-12

as review

1559. By Andrea Cimitan on 2015-02-12

As suggested

1560. By Andrea Cimitan on 2015-02-12

Small tweak

1561. By Andrea Cimitan on 2015-02-13

Bump version

1562. By Andrea Cimitan on 2015-02-13

merge el trunko

1563. By Andrea Cimitan on 2015-02-16

Fix testPreview

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'qml/Dash/Dash.qml'
2--- qml/Dash/Dash.qml 2015-01-12 08:31:10 +0000
3+++ qml/Dash/Dash.qml 2015-02-12 10:33:33 +0000
4@@ -130,7 +130,7 @@
5 UbuntuNumberAnimation {
6 onRunningChanged: {
7 if (!running && dashContent.x == 0) {
8- scopeItem.scopeThatOpenedScope.closeScope(scopeItem.scope);
9+ scopes.closeScope(scopeItem.scope);
10 scopeItem.scope = null;
11 }
12 }
13@@ -199,8 +199,7 @@
14 }
15 }
16
17- DashBackground
18- {
19+ DashBackground {
20 anchors.fill: scopeItem
21 visible: scopeItem.visible
22 }
23@@ -229,7 +228,10 @@
24 dashContent.gotoScope(scopeId);
25 }
26 onOpenScope: {
27- dashContent.openScope(scope);
28+ scopeItem.closePreview();
29+ var oldScope = scopeItem.scope;
30+ scopeItem.scope = scope;
31+ scopes.closeScope(oldScope);
32 }
33 }
34 }
35
36=== modified file 'qml/Dash/DashContent.qml'
37--- qml/Dash/DashContent.qml 2015-01-05 15:08:04 +0000
38+++ qml/Dash/DashContent.qml 2015-02-12 10:33:33 +0000
39@@ -84,8 +84,7 @@
40
41 set_current_index = undefined;
42
43- if (dashContentList.count > index)
44- {
45+ if (dashContentList.count > index) {
46 dashContentList.currentIndex = index
47
48 if (reset) {
49
50=== modified file 'qml/Dash/Previews/Preview.qml'
51--- qml/Dash/Previews/Preview.qml 2014-10-23 11:59:22 +0000
52+++ qml/Dash/Previews/Preview.qml 2015-02-12 10:33:33 +0000
53@@ -65,6 +65,7 @@
54
55 delegate: ListView {
56 id: column
57+ objectName: "previewListRow" + index
58 anchors { top: parent.top; bottom: parent.bottom }
59 width: row.columnWidth
60 spacing: row.spacing
61@@ -89,6 +90,7 @@
62 }
63
64 onTriggered: {
65+ console.log(widgetId, actionId, data);
66 previewModel.triggered(widgetId, actionId, data);
67 }
68
69
70=== modified file 'qml/Dash/Previews/PreviewActions.qml'
71--- qml/Dash/Previews/PreviewActions.qml 2014-11-20 11:44:44 +0000
72+++ qml/Dash/Previews/PreviewActions.qml 2015-02-12 10:33:33 +0000
73@@ -55,6 +55,7 @@
74 Connections {
75 target: loader.item
76 onTriggeredAction: {
77+ console.log(root.widgetId, actionData.id, actionData);
78 root.triggered(root.widgetId, actionData.id, actionData);
79 }
80 }
81
82=== modified file 'tests/mocks/Unity/fake_previewmodel.cpp'
83--- tests/mocks/Unity/fake_previewmodel.cpp 2014-08-11 09:57:29 +0000
84+++ tests/mocks/Unity/fake_previewmodel.cpp 2015-02-12 10:33:33 +0000
85@@ -22,18 +22,23 @@
86 #include "fake_previewmodel.h"
87
88 // local
89+#include "fake_scope.h"
90+#include "fake_scopes.h"
91 #include "fake_previewwidgetmodel.h"
92
93 // Qt
94 #include <QDebug>
95
96-PreviewModel::PreviewModel(QObject* parent)
97+PreviewModel::PreviewModel(QObject* parent, Scope* scope)
98 : unity::shell::scopes::PreviewModelInterface(parent)
99 , m_loaded(true)
100+ , m_scope(scope)
101 {
102 // we have one column by default
103 PreviewWidgetModel* columnModel = new PreviewWidgetModel(this);
104 m_previewWidgetModels.append(columnModel);
105+ connect(this, SIGNAL(triggered(QString const&, QString const&, QVariantMap const&)),
106+ this, SLOT(triggeredSlot(QString const&, QString const&, QVariantMap const&)));
107 }
108
109 void PreviewModel::setWidgetColumnCount(int count)
110@@ -80,3 +85,10 @@
111 Q_EMIT loadedChanged();
112 }
113 }
114+
115+void PreviewModel::triggeredSlot(QString const&, QString const&, QVariantMap const&) {
116+ Scopes *scopes = dynamic_cast<Scopes*>(m_scope->parent());
117+ Scope* scope = scopes->getScopeFromAll("MockScope9");
118+ scopes->addTempScope(scope);
119+ Q_EMIT m_scope->openScope(scope);
120+}
121
122=== modified file 'tests/mocks/Unity/fake_previewmodel.h'
123--- tests/mocks/Unity/fake_previewmodel.h 2014-08-11 09:57:29 +0000
124+++ tests/mocks/Unity/fake_previewmodel.h 2015-02-12 10:33:33 +0000
125@@ -25,12 +25,14 @@
126
127 class PreviewWidgetModel;
128
129+class Scope;
130+
131 class PreviewModel : public unity::shell::scopes::PreviewModelInterface
132 {
133 Q_OBJECT
134
135 public:
136- explicit PreviewModel(QObject* parent = 0);
137+ explicit PreviewModel(QObject* parent = 0, Scope* scope = 0);
138
139 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
140 int rowCount(const QModelIndex& parent = QModelIndex()) const override;
141@@ -42,9 +44,13 @@
142
143 Q_INVOKABLE void setLoaded(bool); // Only available for testing
144
145+private Q_SLOTS:
146+ void triggeredSlot(QString const&, QString const&, QVariantMap const&);
147+
148 private:
149 QList<PreviewWidgetModel*> m_previewWidgetModels;
150 bool m_loaded;
151+ Scope* m_scope;
152 };
153
154 Q_DECLARE_METATYPE(PreviewModel*)
155
156=== modified file 'tests/mocks/Unity/fake_previewstack.cpp'
157--- tests/mocks/Unity/fake_previewstack.cpp 2014-05-19 11:10:58 +0000
158+++ tests/mocks/Unity/fake_previewstack.cpp 2015-02-12 10:33:33 +0000
159@@ -21,10 +21,11 @@
160 #include "fake_previewmodel.h"
161 #include "fake_scope.h"
162
163-PreviewStack::PreviewStack(QObject* parent)
164+PreviewStack::PreviewStack(QObject* parent, Scope *scope)
165 : unity::shell::scopes::PreviewStackInterface(parent)
166+ , m_scope(scope)
167 {
168- m_previews << new PreviewModel(this);
169+ m_previews << new PreviewModel(this, m_scope);
170 }
171
172 PreviewStack::~PreviewStack()
173
174=== modified file 'tests/mocks/Unity/fake_previewstack.h'
175--- tests/mocks/Unity/fake_previewstack.h 2014-05-19 11:10:58 +0000
176+++ tests/mocks/Unity/fake_previewstack.h 2015-02-12 10:33:33 +0000
177@@ -25,12 +25,14 @@
178
179 class PreviewModel;
180
181+class Scope;
182+
183 class PreviewStack : public unity::shell::scopes::PreviewStackInterface
184 {
185 Q_OBJECT
186
187 public:
188- explicit PreviewStack(QObject* parent = 0);
189+ explicit PreviewStack(QObject* parent = 0, Scope* scope = 0);
190 virtual ~PreviewStack();
191
192 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
193@@ -43,6 +45,7 @@
194
195 private:
196 QList<PreviewModel*> m_previews;
197+ Scope* m_scope;
198 };
199
200 Q_DECLARE_METATYPE(PreviewStack*)
201
202=== modified file 'tests/mocks/Unity/fake_previewwidgetmodel.cpp'
203--- tests/mocks/Unity/fake_previewwidgetmodel.cpp 2014-05-14 08:36:42 +0000
204+++ tests/mocks/Unity/fake_previewwidgetmodel.cpp 2015-02-12 10:33:33 +0000
205@@ -53,6 +53,17 @@
206 PreviewData* preview_data = new PreviewData(QString("widget-%1").arg(i), QString("text"), attributes);
207 m_previewWidgets.append(QSharedPointer<PreviewData>(preview_data));
208 }
209+
210+ QVariantMap attributes;
211+ QVariantMap buttonData;
212+ buttonData["label"] = "Button";
213+ buttonData["id"] = "open_click";
214+ QVariantList buttons;
215+ buttons << buttonData << buttonData << buttonData;
216+ attributes["actions"] = QVariant::fromValue(buttons);
217+ PreviewData* preview_data = new PreviewData(QString("widget-21"), QString("actions"), attributes);
218+ m_previewWidgets.append(QSharedPointer<PreviewData>(preview_data));
219+
220 endResetModel();
221
222 }
223
224=== modified file 'tests/mocks/Unity/fake_scope.cpp'
225--- tests/mocks/Unity/fake_scope.cpp 2014-12-15 12:39:00 +0000
226+++ tests/mocks/Unity/fake_scope.cpp 2015-02-12 10:33:33 +0000
227@@ -185,6 +185,7 @@
228 if (result.toString() == "Result.2.2") {
229 Scopes *scopes = dynamic_cast<Scopes*>(parent());
230 m_openScope = scopes->getScopeFromAll("MockScope9");
231+ scopes->addTempScope(m_openScope);
232 Q_EMIT openScope(m_openScope);
233 }
234 }
235@@ -198,7 +199,7 @@
236 } else {
237 // This probably leaks, do we don't care
238 // it's a test after all
239- return new PreviewStack;
240+ return new PreviewStack(this, this);
241 }
242 }
243
244@@ -208,11 +209,10 @@
245
246 void Scope::closeScope(unity::shell::scopes::ScopeInterface* scope)
247 {
248- if (scope != m_openScope) {
249- qDebug() << scope << m_openScope;
250- qFatal("Scope::closeScope got wrong scope in closeScope");
251+ Scopes *scopes = dynamic_cast<Scopes*>(parent());
252+ if (scopes) {
253+ return scopes->closeScope(scope);
254 }
255- m_openScope = nullptr;
256 }
257
258 QString Scope::currentNavigationId() const
259
260=== modified file 'tests/mocks/Unity/fake_scopes.cpp'
261--- tests/mocks/Unity/fake_scopes.cpp 2014-12-16 09:03:37 +0000
262+++ tests/mocks/Unity/fake_scopes.cpp 2015-02-12 10:33:33 +0000
263@@ -23,6 +23,7 @@
264 // TODO: Implement remaining pieces, like Categories (i.e. LensView now gives warnings)
265
266 // Qt
267+#include <QDebug>
268 #include <QTimer>
269
270 Scopes::Scopes(QObject *parent)
271@@ -177,6 +178,19 @@
272 return m_scopesOverview;
273 }
274
275+void Scopes::addTempScope(unity::shell::scopes::ScopeInterface* scope)
276+{
277+ if (!m_tempScopes.contains(scope)) {
278+ m_tempScopes.insert(scope);
279+ }
280+}
281+
282+void Scopes::closeScope(unity::shell::scopes::ScopeInterface* scope)
283+{
284+ Q_ASSERT(m_tempScopes.contains(scope));
285+ m_tempScopes.remove(scope);
286+}
287+
288 void Scopes::setFavorite(const QString& scopeId, bool favorite)
289 {
290 if (favorite) {
291
292=== modified file 'tests/mocks/Unity/fake_scopes.h'
293--- tests/mocks/Unity/fake_scopes.h 2014-12-10 09:07:14 +0000
294+++ tests/mocks/Unity/fake_scopes.h 2015-02-12 10:33:33 +0000
295@@ -26,6 +26,7 @@
296
297 // Qt
298 #include <QList>
299+#include <QSet>
300 #include <QTimer>
301
302 class ScopesOverview;
303@@ -59,6 +60,10 @@
304 Q_INVOKABLE void setFavorite(const QString& scopeId, bool favorite) override;
305 Q_INVOKABLE void moveFavoriteTo(const QString& scopeId, int index) override;
306
307+ unity::shell::scopes::ScopeInterface* findTempScope(QString const& id) const;
308+ void addTempScope(unity::shell::scopes::ScopeInterface* scope);
309+ Q_INVOKABLE void closeScope(unity::shell::scopes::ScopeInterface* scope);
310+
311 // This is used as part of implementation of the other C++ code, not API
312 QList<Scope*> favScopes() const;
313 QList<Scope*> nonFavScopes() const;
314@@ -70,6 +75,7 @@
315 private:
316 QList<Scope*> m_scopes; // the favorite ones
317 QList<Scope*> m_allScopes;
318+ QSet<unity::shell::scopes::ScopeInterface*> m_tempScopes;
319 ScopesOverview *m_scopesOverview;
320 bool m_loaded;
321 QTimer timer;
322
323=== modified file 'tests/mocks/Unity/fake_scopesoverview.cpp'
324--- tests/mocks/Unity/fake_scopesoverview.cpp 2014-12-16 09:03:37 +0000
325+++ tests/mocks/Unity/fake_scopesoverview.cpp 2015-02-12 10:33:33 +0000
326@@ -48,6 +48,7 @@
327 Q_EMIT gotoScope(result.toString());
328 } else {
329 m_openScope = scopes->getScopeFromAll(result.toString());
330+ scopes->addTempScope(m_openScope);
331 Q_EMIT openScope(m_openScope);
332 }
333 }
334
335=== modified file 'tests/qmltests/Dash/Previews/tst_Preview.qml'
336--- tests/qmltests/Dash/Previews/tst_Preview.qml 2014-07-04 16:20:48 +0000
337+++ tests/qmltests/Dash/Previews/tst_Preview.qml 2015-02-12 10:33:33 +0000
338@@ -54,6 +54,11 @@
339 name: "Preview"
340 when: windowShown
341
342+ function init() {
343+ var widget = findChild(preview, "previewListRow0");
344+ widget.positionViewAtBeginning();
345+ }
346+
347 function test_triggered() {
348 waitForRendering(preview);
349 var widget = findChild(preview, "widget-3");
350@@ -102,5 +107,31 @@
351 return bottomLeft.y <= preview.height
352 }, true);
353 }
354+
355+ function test_comboEnsureVisible() {
356+ waitForRendering(preview);
357+
358+ // Scroll down
359+ var previewListRow0 = findChild(preview, "previewListRow0");
360+ touchFlick(preview, preview.width / 2, units.gu(20), preview.width / 2, units.gu(1));
361+ tryCompare(previewListRow0, "atYEnd", true);
362+ tryCompare(previewListRow0, "moving", false);
363+
364+ // Click on the combo
365+ var widget = findChild(preview, "widget-21");
366+ var initialWidgetHeight = widget.height;
367+ var moreLessButton = findChild(widget, "moreLessButton");
368+ mouseClick(moreLessButton);
369+
370+ // Make sure the combo is growing
371+ tryCompareFunction(function () { return widget.height > 2 * initialWidgetHeight; }, true);
372+
373+ // Wait for the combo to stop growing
374+ tryCompareFunction(function () { var currentWidgetHeight = widget.height; wait(200); return currentWidgetHeight === widget.height;}, true);
375+
376+ // Make sure the combo bottom is on the viewport
377+ var bottomLeft = preview.mapFromItem(widget, 0, widget.height);
378+ verify(bottomLeft.y <= preview.height);
379+ }
380 }
381 }
382
383=== modified file 'tests/qmltests/Dash/tst_Dash.qml'
384--- tests/qmltests/Dash/tst_Dash.qml 2015-01-09 10:42:42 +0000
385+++ tests/qmltests/Dash/tst_Dash.qml 2015-02-12 10:33:33 +0000
386@@ -428,5 +428,70 @@
387 tryCompare(bottomEdgeController, "progress", 0);
388 tryCompare(dashContentList, "currentIndex", 1)
389 }
390+
391+ function test_close_temp_scope_preview_opening_scope() {
392+ // Show the manage dash
393+ touchFlick(dash, dash.width / 2, dash.height - 1, dash.width / 2, units.gu(2));
394+ var bottomEdgeController = findInvisibleChild(dash, "bottomEdgeController");
395+ tryCompare(bottomEdgeController, "progress", 1);
396+
397+ // Make sure stuff is loaded
398+ var nonfavScopesListCategory = findChild(dash, "scopesListCategoryother");
399+ var nonfavScopesListCategoryList = findChild(nonfavScopesListCategory, "scopesListCategoryInnerList");
400+ tryCompare(nonfavScopesListCategoryList, "currentIndex", 0);
401+
402+ // Click on a non favorite scope
403+ mouseClick(nonfavScopesListCategoryList.currentItem);
404+
405+ // Check the bottom edge (manage dash) is disabled from temp scope
406+ var overviewDragHandle = findChild(dash, "overviewDragHandle");
407+ compare(overviewDragHandle.enabled, false);
408+
409+ // Check temp scope is there
410+ var dashTempScopeItem = findChild(dash, "dashTempScopeItem");
411+ tryCompare(dashTempScopeItem, "x", 0);
412+ tryCompare(dashTempScopeItem, "visible", true);
413+
414+ // Check the manage dash is gone
415+ tryCompare(bottomEdgeController, "progress", 0);
416+
417+ // Open preview
418+ var categoryListView = findChild(dashTempScopeItem, "categoryListView");
419+ categoryListView.positionAtBeginning();
420+ tryCompareFunction(function() {
421+ var cardGrid = findChild(dashTempScopeItem, "dashCategory0");
422+ if (cardGrid != null) {
423+ var tile = findChild(cardGrid, "delegate0");
424+ return tile != null;
425+ }
426+ return false;
427+ },
428+ true);
429+ var tile = findChild(findChild(dashTempScopeItem, "dashCategory0"), "delegate0");
430+ waitForRendering(tile);
431+ mouseClick(tile);
432+ var subPageLoader = findChild(dashTempScopeItem, "subPageLoader");
433+ tryCompare(subPageLoader, "open", true);
434+ tryCompare(subPageLoader, "x", 0);
435+ tryCompare(findChild(dashTempScopeItem, "categoryListView"), "visible", false);
436+ var previewListRow0 = findChild(subPageLoader, "previewListRow0");
437+ touchFlick(previewListRow0, previewListRow0.width / 2, units.gu(20), previewListRow0.width / 2, units.gu(1));
438+ tryCompare(previewListRow0, "atYEnd", true);
439+ tryCompare(previewListRow0, "moving", false);
440+ var widget = findChild(subPageLoader, "widget-21");
441+ var initialWidgetHeight = widget.height;
442+ var openButton = findChild(widget, "buttonopen_click");
443+ mouseClick(openButton);
444+
445+ tryCompare(subPageLoader, "open", false);
446+ compare(dashTempScopeItem.scope.id, "MockScope9");
447+
448+ // Go back
449+ dashTempScopeItem.backClicked();
450+
451+ // Check temp scope is gone
452+ tryCompare(dashTempScopeItem, "x", dash.width);
453+ tryCompare(dashTempScopeItem, "visible", false);
454+ }
455 }
456 }
457
458=== modified file 'tests/qmltests/Dash/tst_GenericScopeView.qml'
459--- tests/qmltests/Dash/tst_GenericScopeView.qml 2015-01-09 09:15:45 +0000
460+++ tests/qmltests/Dash/tst_GenericScopeView.qml 2015-02-12 10:33:33 +0000
461@@ -380,8 +380,8 @@
462
463 tryCompare(testCase.subPageLoader, "open", false);
464
465+ tryCompareFunction(function() { return findChild(category, "delegate1") != null; }, true);
466 var tile = findChild(category, "delegate1");
467- verify(tile, "Could not find delegate");
468
469 mouseClick(tile);
470 tryCompare(testCase.subPageLoader, "open", true);

Subscribers

People subscribed via source and target branches