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