Rename QDeclarative symbols to QQuick and QQml
[profile/ivi/qtdeclarative.git] / tests / auto / quick / qquickcanvasitem / data / tst_canvas.qml
1 import QtQuick 2.0
2 import QtTest 1.0
3
4 Rectangle {
5     id:container
6     width:100
7     height:100
8     Component {
9         id:canvas
10         Canvas {
11             id:c
12              width:100;height:100
13              onPaint: {
14                  var context = getContext("2d");
15                  context.fillStyle = "red";
16                  context.fillRect(0, 0, 100, 100);
17              }
18              property int paintCount:spyPaint.count
19              property int paintedCount:spyPainted.count
20              property int canvasSizeChangedCount:spyCanvasSizeChanged.count
21              property int tileSizeChangedCount:spyTileSizeChanged.count
22              property int renderStrategyChangedCount:spyRenderStrategyChanged.count
23              property int canvasWindowChangedCount:spyCanvasWindowChanged.count
24              property int renderTargetChangedCount:spyRenderTargetChanged.count
25              property int imageLoadedCount:spyImageLoaded.count
26              property int availableChangedCount:spyAvailableChanged.count
27
28              SignalSpy {id: spyPaint;target:c;signalName: "paint"}
29              SignalSpy {id: spyPainted;target:c;signalName: "painted"}
30              SignalSpy {id: spyCanvasSizeChanged;target:c;signalName: "canvasSizeChanged"}
31              SignalSpy {id: spyTileSizeChanged;target:c;signalName: "tileSizeChanged"}
32              SignalSpy {id: spyRenderStrategyChanged;target:c;signalName: "renderStrategyChanged"}
33              SignalSpy {id: spyCanvasWindowChanged;target:c;signalName: "canvasWindowChanged"}
34              SignalSpy {id: spyRenderTargetChanged;target:c;signalName: "renderTargetChanged"}
35              SignalSpy {id: spyImageLoaded;target:c;signalName: "imageLoaded"}
36              SignalSpy {id: spyAvailableChanged;target:c;signalName: "availableChanged"}
37         }
38     }
39
40    TestCase {
41        name: "Canvas"; when: windowShown
42        function test_canvasSize() {
43            var c = canvas.createObject(container);
44            verify(c);
45            wait(100);
46            verify(c.availableChangedCount, 1);
47
48            //by default canvasSize is same with canvas' actual size
49            // when canvas size changes, canvasSize should be changed as well.
50            compare(c.canvasSize.width, c.width);
51            compare(c.canvasSize.height, c.height);
52            c.width = 20;
53            compare(c.canvasSize.width, 20);
54            compare(c.canvasSizeChangedCount, 1);
55            c.height = 5;
56            compare(c.canvasSizeChangedCount, 2);
57            compare(c.canvasSize.height, 5);
58
59            //change canvasSize manually, then canvasSize detaches from canvas
60            //actual size.
61            c.canvasSize.width = 100;
62            compare(c.canvasSizeChangedCount, 3);
63            compare(c.canvasSize.width, 100);
64            compare(c.width, 20);
65            c.canvasSize.height = 50;
66            compare(c.canvasSizeChangedCount, 4);
67            compare(c.canvasSize.height, 50);
68            compare(c.height, 5);
69
70            c.width = 10;
71            compare(c.canvasSizeChangedCount, 4);
72            compare(c.canvasSize.width, 100);
73            compare(c.canvasSize.height, 50);
74
75            c.height = 10;
76            compare(c.canvasSizeChangedCount, 4);
77            compare(c.canvasSize.width, 100);
78            compare(c.canvasSize.height, 50);
79            c.destroy();
80       }
81        function test_tileSize() {
82            var c = canvas.createObject(container);
83            verify(c);
84            wait(100);
85            verify(c.availableChangedCount, 1);
86
87            compare(c.tileSize.width, c.width);
88            compare(c.tileSize.height, c.height);
89            c.width = 20;
90            compare(c.tileSize.width, 20);
91            compare(c.tileSizeChangedCount, 1);
92            c.height = 5;
93            compare(c.tileSizeChangedCount, 2);
94            compare(c.tileSize.height, 5);
95
96            c.tileSize.width = 100;
97            compare(c.tileSizeChangedCount, 3);
98            compare(c.tileSize.width, 100);
99            compare(c.width, 20);
100            c.tileSize.height = 50;
101            compare(c.tileSizeChangedCount, 4);
102            compare(c.tileSize.height, 50);
103            compare(c.height, 5);
104
105            c.width = 10;
106            compare(c.tileSizeChangedCount, 4);
107            compare(c.tileSize.width, 100);
108            compare(c.tileSize.height, 50);
109
110            c.height = 10;
111            compare(c.tileSizeChangedCount, 4);
112            compare(c.tileSize.width, 100);
113            compare(c.tileSize.height, 50);
114            c.destroy();
115
116        }
117
118        function test_canvasWindow() {
119            var c = canvas.createObject(container);
120            verify(c);
121            wait(100);
122            verify(c.availableChangedCount, 1);
123            compare(c.canvasWindow.x, 0);
124            compare(c.canvasWindow.y, 0);
125            compare(c.canvasWindow.width, c.width);
126            compare(c.canvasWindow.height, c.height);
127
128            c.width = 20;
129            compare(c.canvasWindow.width, 20);
130            compare(c.canvasWindowChangedCount, 1);
131            c.height = 5;
132            compare(c.canvasWindowChangedCount, 2);
133            compare(c.canvasWindow.height, 5);
134
135            c.canvasWindow.x = 5;
136            c.canvasWindow.y = 6;
137            c.canvasWindow.width = 10;
138            c.canvasWindow.height =20;
139            compare(c.canvasWindowChangedCount, 6);
140            compare(c.canvasWindow.width, 10);
141            compare(c.canvasWindow.height, 20);
142            compare(c.canvasWindow.x, 5);
143            compare(c.canvasWindow.y, 6);
144            c.destroy();
145
146       }
147        function test_renderTargetAndStrategy() {
148            var c = canvas.createObject(container);
149            verify(c);
150            wait(100);
151            verify(c.availableChangedCount, 1);
152
153            compare(c.renderTarget, Canvas.Image);
154            compare(c.renderStrategy, Canvas.Threaded);
155            c.destroy();
156
157       }
158        function test_save() {
159            var c = canvas.createObject(container);
160            verify(c);
161            wait(100);
162            verify(c.availableChangedCount, 1);
163
164            c.renderTarget = Canvas.Image;
165            c.requestPaint();
166            wait(100);
167            verify(c.save("c.png"));
168            c.loadImage("c.png");
169            wait(200);
170            compare(c.imageLoadedCount, 1);
171            verify(c.isImageLoaded("c.png"));
172            verify(!c.isImageLoading("c.png"));
173            verify(!c.isImageError("c.png"));
174            c.destroy();
175
176       }
177        function test_toDataURL_data() {
178            return [{mimeType:"image/png"},
179                    {mimeType:"image/bmp"},
180                    {mimeType:"image/jpeg"},
181                    {mimeType:"image/x-portable-pixmap"},
182                    //{mimeType:"image/tiff"}, QTBUG-23980
183                    {mimeType:"image/xpm"},
184                    ];
185        }
186
187        function test_toDataURL(data) {
188            var c = canvas.createObject(container);
189            verify(c);
190            wait(100);
191            verify(c.availableChangedCount, 1);
192
193            var ctx = c.getContext("2d");
194            ctx.fillStyle = "red";
195            ctx.fillRect(0, 0, c.width, c.height);
196            wait(100);
197
198            var dataUrl = c.toDataURL();
199            verify(dataUrl != "data:,");
200            dataUrl = c.toDataURL("image/invalid");
201            verify(dataUrl == "data:,");
202
203            dataUrl = c.toDataURL(data.mimeType);
204            verify(dataUrl != "data:,");
205
206            ctx.save();
207            ctx.fillStyle = "blue";
208            ctx.fillRect(0, 0, c.width, c.height);
209            ctx.restore();
210            wait(100);
211
212            var dataUrl2 = c.toDataURL(data.mimeType);
213            verify (dataUrl2 != "data:,");
214            verify (dataUrl2 != dataUrl);
215            c.destroy();
216
217       }
218        function test_paint() {
219            var c = canvas.createObject(container);
220            verify(c);
221            wait(100);
222            verify(c.availableChangedCount, 1);
223
224            c.renderTarget = Canvas.Image;
225            c.renderStrategy = Canvas.Immediate;
226            var ctx = c.getContext("2d");
227            ctx.fillRect(0, 0, c.width, c.height);
228            c.toDataURL();
229            wait(100);
230
231            compare(c.paintedCount, 1);
232            compare(c.paintCount, 1);
233            c.destroy();
234
235       }
236        function test_loadImage() {
237            var c = canvas.createObject(container);
238            verify(c);
239            wait(100);
240            verify(c.availableChangedCount, 1);
241
242            c.loadImage("red.png");
243            wait(200);
244            compare(c.imageLoadedCount, 1);
245            verify(c.isImageLoaded("red.png"));
246            verify(!c.isImageLoading("red.png"));
247            verify(!c.isImageError("red.png"));
248
249            c.unloadImage("red.png");
250            verify(!c.isImageLoaded("red.png"));
251            verify(!c.isImageLoading("red.png"));
252            verify(!c.isImageError("red.png"));
253            c.destroy();
254
255       }
256
257        function test_getContext() {
258            var c = canvas.createObject(container);
259            verify(c);
260            wait(100);
261            verify(c.availableChangedCount, 1);
262
263            var ctx = c.getContext("2d");
264            verify(ctx);
265            compare(ctx.canvas, c);
266            ctx = c.getContext('2d');
267            verify(ctx);
268            compare(ctx.canvas, c);
269            ctx = c.getContext('2D');
270            verify(ctx);
271            compare(ctx.canvas, c);
272            ctx = c.getContext('invalid');
273            verify(!ctx);
274            c.destroy();
275
276       }
277    }
278 }