@@ -1,5 +1,5 @@
11/*
2− * Copyright 2014,2015 Canonical Ltd.
2+ * Copyright 2014-2016 Canonical Ltd.
33 *
44 * This program is free software; you can redistribute it and/or modify
55 * it under the terms of the GNU General Public License as published by
@@ -42,6 +42,8 @@ Flickable {
4242 parentFlickable: root
4343 }
4444
45+ property int createdDelegates: 0
46+
4547 Component.onCompleted: {
4648 for (var i = 0; i < 500; ++i) {
4749 widgetData500.reviews.push({ author: "Some dude", review: "Very cool app" + i });
@@ -49,37 +51,68 @@ Flickable {
4951 factory.widgetData = widgetData500;
5052 }
5153
54+ Component {
55+ id: countingPreviewRatingSingleDisplayComponent
56+ PreviewRatingSingleDisplay {
57+ objectName: "reviewItem" + index
58+
59+ anchors { left: parent.left; right: parent.right; }
60+
61+ rating: modelData["rating"] || -1
62+ author: modelData["author"] || ""
63+ review: modelData["review"] || ""
64+ Component.onCompleted: root.createdDelegates++;
65+ }
66+ }
67+
5268 UT.UnityTestCase {
53− name: "PreviewRatingDisplayTest"
69+ name: "PreviewRatingDisplayCreationRangesTest"
5470 when: windowShown
5571
56− function test_creation_speed() {
57− factory.parentFlickable = null;
72+ function initTestCase() {
73+ var lists = findChildsByType(factory, "QQuickListView");
74+ compare(lists.length, 1)
75+ lists[0].delegate = countingPreviewRatingSingleDisplayComponent;
76+ }
77+
78+ function test_check_delegate_creation_range() {
79+ // Clear the reviews
5880 factory.widgetData = reviewsEmpty;
5981 waitForRendering(root);
6082
61− var start = new Date().getTime();
83+ // Unset parentFlickable this disables the creation range code
84+ factory.parentFlickable = null;
85+ root.createdDelegates = 0;
86+
87+ // Set the 500 reviews data
6288 factory.widgetData = widgetData500;
6389 waitForRendering(root);
64− var end = new Date().getTime();
65− var time500 = end - start;
6690
91+ // Check we have created 500 delegates
92+ compare(root.createdDelegates, 500);
93+
94+ // Check review 499 has been created
95+ var reviewItem499 = findChild(factory, "reviewItem499");
96+ verify(reviewItem499 !== null);
97+
98+ // Clear the reviews
6799 factory.widgetData = reviewsEmpty;
68100 waitForRendering(root);
69101
102+ // set parentFlickable to enable the creation ranges code
70103 factory.parentFlickable = root;
71− start = new Date().getTime();
104+ root.createdDelegates = 0;
105+
106+ // Set the 500 reviews data
72107 factory.widgetData = widgetData500;
73108 waitForRendering(root);
74− end = new Date().getTime();
75− var timeRanges500 = end - start;
76109
77− // Measurements show it's usually like 20 times faster
78− // but we set the range at 8 times fast to make sure it's not an unstable test
79− verify(timeRanges500 * 8 < time500);
80− }
110+ // Check we have only created a few delegates
111+ // For some reason xenial and yaketti we get 16 and on vivid 15 so
112+ // settle for <= 20
113+ expectFailContinue("", "Should not create more than 20 delegates when using ranges");
114+ tryCompareFunction(function() { return root.createdDelegates > 20 }, true);
81115
82− function test_check_indexes() {
83116 // Check that item 499 isn't there on startup but if we scroll down
84117 // it will be there
85118 var reviewItem499 = findChild(factory, "reviewItem499");
@@ -89,6 +122,9 @@ Flickable {
89122
90123 var reviewItem499 = findChild(factory, "reviewItem499");
91124 verify(reviewItem499 !== null);
125+
126+ // Check we have created 500 delegates
127+ compare(root.createdDelegates, 500);
92128 }
93129 }
94130}