diff options
Diffstat (limited to 'tests/auto/quick/qquickcanvasitem/data/tst_canvas.qml')
-rw-r--r-- | tests/auto/quick/qquickcanvasitem/data/tst_canvas.qml | 278 |
1 files changed, 278 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickcanvasitem/data/tst_canvas.qml b/tests/auto/quick/qquickcanvasitem/data/tst_canvas.qml new file mode 100644 index 0000000000..a00ccc3c3f --- /dev/null +++ b/tests/auto/quick/qquickcanvasitem/data/tst_canvas.qml @@ -0,0 +1,278 @@ +import QtQuick 2.0 +import QtTest 1.0 + +Rectangle { + id:container + width:100 + height:100 + Component { + id:canvas + Canvas { + id:c + width:100;height:100 + onPaint: { + var context = getContext("2d"); + context.fillStyle = "red"; + context.fillRect(0, 0, 100, 100); + } + property int paintCount:spyPaint.count + property int paintedCount:spyPainted.count + property int canvasSizeChangedCount:spyCanvasSizeChanged.count + property int tileSizeChangedCount:spyTileSizeChanged.count + property int renderStrategyChangedCount:spyRenderStrategyChanged.count + property int canvasWindowChangedCount:spyCanvasWindowChanged.count + property int renderTargetChangedCount:spyRenderTargetChanged.count + property int imageLoadedCount:spyImageLoaded.count + property int availableChangedCount:spyAvailableChanged.count + + SignalSpy {id: spyPaint;target:c;signalName: "paint"} + SignalSpy {id: spyPainted;target:c;signalName: "painted"} + SignalSpy {id: spyCanvasSizeChanged;target:c;signalName: "canvasSizeChanged"} + SignalSpy {id: spyTileSizeChanged;target:c;signalName: "tileSizeChanged"} + SignalSpy {id: spyRenderStrategyChanged;target:c;signalName: "renderStrategyChanged"} + SignalSpy {id: spyCanvasWindowChanged;target:c;signalName: "canvasWindowChanged"} + SignalSpy {id: spyRenderTargetChanged;target:c;signalName: "renderTargetChanged"} + SignalSpy {id: spyImageLoaded;target:c;signalName: "imageLoaded"} + SignalSpy {id: spyAvailableChanged;target:c;signalName: "availableChanged"} + } + } + + TestCase { + name: "Canvas"; when: windowShown + function test_canvasSize() { + var c = canvas.createObject(container); + verify(c); + wait(100); + verify(c.availableChangedCount, 1); + + //by default canvasSize is same with canvas' actual size + // when canvas size changes, canvasSize should be changed as well. + compare(c.canvasSize.width, c.width); + compare(c.canvasSize.height, c.height); + c.width = 20; + compare(c.canvasSize.width, 20); + compare(c.canvasSizeChangedCount, 1); + c.height = 5; + compare(c.canvasSizeChangedCount, 2); + compare(c.canvasSize.height, 5); + + //change canvasSize manually, then canvasSize detaches from canvas + //actual size. + c.canvasSize.width = 100; + compare(c.canvasSizeChangedCount, 3); + compare(c.canvasSize.width, 100); + compare(c.width, 20); + c.canvasSize.height = 50; + compare(c.canvasSizeChangedCount, 4); + compare(c.canvasSize.height, 50); + compare(c.height, 5); + + c.width = 10; + compare(c.canvasSizeChangedCount, 4); + compare(c.canvasSize.width, 100); + compare(c.canvasSize.height, 50); + + c.height = 10; + compare(c.canvasSizeChangedCount, 4); + compare(c.canvasSize.width, 100); + compare(c.canvasSize.height, 50); + c.destroy(); + } + function test_tileSize() { + var c = canvas.createObject(container); + verify(c); + wait(100); + verify(c.availableChangedCount, 1); + + compare(c.tileSize.width, c.width); + compare(c.tileSize.height, c.height); + c.width = 20; + compare(c.tileSize.width, 20); + compare(c.tileSizeChangedCount, 1); + c.height = 5; + compare(c.tileSizeChangedCount, 2); + compare(c.tileSize.height, 5); + + c.tileSize.width = 100; + compare(c.tileSizeChangedCount, 3); + compare(c.tileSize.width, 100); + compare(c.width, 20); + c.tileSize.height = 50; + compare(c.tileSizeChangedCount, 4); + compare(c.tileSize.height, 50); + compare(c.height, 5); + + c.width = 10; + compare(c.tileSizeChangedCount, 4); + compare(c.tileSize.width, 100); + compare(c.tileSize.height, 50); + + c.height = 10; + compare(c.tileSizeChangedCount, 4); + compare(c.tileSize.width, 100); + compare(c.tileSize.height, 50); + c.destroy(); + + } + + function test_canvasWindow() { + var c = canvas.createObject(container); + verify(c); + wait(100); + verify(c.availableChangedCount, 1); + compare(c.canvasWindow.x, 0); + compare(c.canvasWindow.y, 0); + compare(c.canvasWindow.width, c.width); + compare(c.canvasWindow.height, c.height); + + c.width = 20; + compare(c.canvasWindow.width, 20); + compare(c.canvasWindowChangedCount, 1); + c.height = 5; + compare(c.canvasWindowChangedCount, 2); + compare(c.canvasWindow.height, 5); + + c.canvasWindow.x = 5; + c.canvasWindow.y = 6; + c.canvasWindow.width = 10; + c.canvasWindow.height =20; + compare(c.canvasWindowChangedCount, 6); + compare(c.canvasWindow.width, 10); + compare(c.canvasWindow.height, 20); + compare(c.canvasWindow.x, 5); + compare(c.canvasWindow.y, 6); + c.destroy(); + + } + function test_renderTargetAndStrategy() { + var c = canvas.createObject(container); + verify(c); + wait(100); + verify(c.availableChangedCount, 1); + + compare(c.renderTarget, Canvas.Image); + compare(c.renderStrategy, Canvas.Threaded); + c.destroy(); + + } + function test_save() { + var c = canvas.createObject(container); + verify(c); + wait(100); + verify(c.availableChangedCount, 1); + + c.renderTarget = Canvas.Image; + c.requestPaint(); + wait(100); + verify(c.save("c.png")); + c.loadImage("c.png"); + wait(200); + compare(c.imageLoadedCount, 1); + verify(c.isImageLoaded("c.png")); + verify(!c.isImageLoading("c.png")); + verify(!c.isImageError("c.png")); + c.destroy(); + + } + function test_toDataURL_data() { + return [{mimeType:"image/png"}, + {mimeType:"image/bmp"}, + {mimeType:"image/jpeg"}, + {mimeType:"image/x-portable-pixmap"}, + //{mimeType:"image/tiff"}, QTBUG-23980 + {mimeType:"image/xpm"}, + ]; + } + + function test_toDataURL(data) { + var c = canvas.createObject(container); + verify(c); + wait(100); + verify(c.availableChangedCount, 1); + + var ctx = c.getContext("2d"); + ctx.fillStyle = "red"; + ctx.fillRect(0, 0, c.width, c.height); + wait(100); + + var dataUrl = c.toDataURL(); + verify(dataUrl != "data:,"); + dataUrl = c.toDataURL("image/invalid"); + verify(dataUrl == "data:,"); + + dataUrl = c.toDataURL(data.mimeType); + verify(dataUrl != "data:,"); + + ctx.save(); + ctx.fillStyle = "blue"; + ctx.fillRect(0, 0, c.width, c.height); + ctx.restore(); + wait(100); + + var dataUrl2 = c.toDataURL(data.mimeType); + verify (dataUrl2 != "data:,"); + verify (dataUrl2 != dataUrl); + c.destroy(); + + } + function test_paint() { + var c = canvas.createObject(container); + verify(c); + wait(100); + verify(c.availableChangedCount, 1); + + c.renderTarget = Canvas.Image; + c.renderStrategy = Canvas.Immediate; + var ctx = c.getContext("2d"); + ctx.fillRect(0, 0, c.width, c.height); + c.toDataURL(); + wait(100); + + compare(c.paintedCount, 1); + compare(c.paintCount, 1); + c.destroy(); + + } + function test_loadImage() { + var c = canvas.createObject(container); + verify(c); + wait(100); + verify(c.availableChangedCount, 1); + + c.loadImage("red.png"); + wait(200); + compare(c.imageLoadedCount, 1); + verify(c.isImageLoaded("red.png")); + verify(!c.isImageLoading("red.png")); + verify(!c.isImageError("red.png")); + + c.unloadImage("red.png"); + verify(!c.isImageLoaded("red.png")); + verify(!c.isImageLoading("red.png")); + verify(!c.isImageError("red.png")); + c.destroy(); + + } + + function test_getContext() { + var c = canvas.createObject(container); + verify(c); + wait(100); + verify(c.availableChangedCount, 1); + + var ctx = c.getContext("2d"); + verify(ctx); + compare(ctx.canvas, c); + ctx = c.getContext('2d'); + verify(ctx); + compare(ctx.canvas, c); + ctx = c.getContext('2D'); + verify(ctx); + compare(ctx.canvas, c); + ctx = c.getContext('invalid'); + verify(!ctx); + c.destroy(); + + } + } +} |