more graphics + some physics tests

- added obj tests for graphics.SpriteBatch, and graphics.Video
- added obj tests for physics.World
- added test for setStencilMode and removed deprecated stencil+setStencilTest
- added graphics.drawInstanced
- fixed deprecated physic shape calls (body now added as first param)
This commit is contained in:
ell
2023-11-16 19:22:40 +00:00
parent 1323bb1452
commit 8124804d49
14 changed files with 632 additions and 383 deletions
File diff suppressed because one or more lines are too long
+17 -17
View File
@@ -1,28 +1,28 @@
<!-- PASSED 282 || FAILED 1 || SKIPPED 20 || TIME 9.881 --> <!-- PASSED 285 || FAILED 1 || SKIPPED 15 || TIME 14.670 -->
### Info ### Info
**303** tests were completed in **9.881s** with **282** passed, **1** failed, and **20** skipped **301** tests were completed in **14.670s** with **285** passed, **1** failed, and **15** skipped
Renderer: OpenGL | 4.1 Metal - 76.3 | Apple | Apple M1 Max Renderer: OpenGL | 4.1 Metal - 76.3 | Apple | Apple M1 Max
### Report ### Report
| Module | Pass | Fail | Skip | Time | | Module | Pass | Fail | Skip | Time |
| --------------------- | ------ | ------ | ------- | ------ | | --------------------- | ------ | ------ | ------- | ------ |
| 🟢 audio | 28 | 0 | 0 | 0.857s | | 🟢 audio | 28 | 0 | 0 | 0.890s |
| 🟢 data | 12 | 0 | 0 | 0.139s | | 🟢 data | 12 | 0 | 0 | 0.205s |
| 🟢 event | 4 | 0 | 2 | 0.010s | | 🟢 event | 4 | 0 | 2 | 0.102s |
| 🟢 filesystem | 29 | 0 | 2 | 0.068s | | 🟢 filesystem | 29 | 0 | 2 | 0.530s |
| 🔴 font | 6 | 1 | 0 | 0.015s | | 🔴 font | 6 | 1 | 0 | 0.121s |
| 🟢 graphics | 99 | 0 | 6 | 0.294s | | 🟢 graphics | 102 | 0 | 3 | 3.232s |
| 🟢 image | 5 | 0 | 0 | 0.011s | | 🟢 image | 5 | 0 | 0 | 0.086s |
| 🟢 math | 20 | 0 | 0 | 0.070s | | 🟢 math | 20 | 0 | 0 | 0.339s |
| 🟢 physics | 22 | 0 | 6 | 0.071s | | 🟢 physics | 22 | 0 | 4 | 0.434s |
| 🟢 sound | 4 | 0 | 0 | 0.015s | | 🟢 sound | 4 | 0 | 0 | 0.071s |
| 🟢 system | 6 | 0 | 2 | 0.026s | | 🟢 system | 6 | 0 | 2 | 0.139s |
| 🟢 thread | 5 | 0 | 0 | 0.317s | | 🟢 thread | 5 | 0 | 0 | 0.376s |
| 🟢 timer | 6 | 0 | 0 | 2.021s | | 🟢 timer | 6 | 0 | 0 | 2.091s |
| 🟢 video | 2 | 0 | 0 | 0.012s | | 🟢 video | 2 | 0 | 0 | 0.039s |
| 🟢 window | 34 | 0 | 2 | 5.955s | | 🟢 window | 34 | 0 | 2 | 6.015s |
### Failures ### Failures
> 🔴 GlyphData > 🔴 GlyphData
+300 -309
View File
@@ -1,659 +1,650 @@
<testsuites name="love.test" tests="282" failures="1" skipped="20" time="9.881"> <testsuites name="love.test" tests="285" failures="1" skipped="15" time="14.670">
<testsuite name="love.audio" tests="28" failures="0" skipped="0" time="0.857"> <testsuite name="love.audio" tests="28" failures="0" skipped="0" time="0.890">
<testcase classname="RecordingDevice" name="RecordingDevice" assertions="20" time="0.394"> <testcase classname="RecordingDevice" name="RecordingDevice" assertions="20" time="0.401">
</testcase> </testcase>
<testcase classname="Source" name="Source" assertions="54" time="0.019"> <testcase classname="Source" name="Source" assertions="54" time="0.022">
</testcase> </testcase>
<testcase classname="getActiveEffects" name="getActiveEffects" assertions="3" time="0.017"> <testcase classname="getActiveEffects" name="getActiveEffects" assertions="3" time="0.017">
</testcase> </testcase>
<testcase classname="getActiveSourceCount" name="getActiveSourceCount" assertions="3" time="0.018"> <testcase classname="getActiveSourceCount" name="getActiveSourceCount" assertions="3" time="0.019">
</testcase> </testcase>
<testcase classname="getDistanceModel" name="getDistanceModel" assertions="3" time="0.017"> <testcase classname="getDistanceModel" name="getDistanceModel" assertions="3" time="0.017">
</testcase> </testcase>
<testcase classname="getDopplerScale" name="getDopplerScale" assertions="2" time="0.017"> <testcase classname="getDopplerScale" name="getDopplerScale" assertions="2" time="0.018">
</testcase> </testcase>
<testcase classname="getEffect" name="getEffect" assertions="4" time="0.017"> <testcase classname="getEffect" name="getEffect" assertions="4" time="0.018">
</testcase> </testcase>
<testcase classname="getMaxSceneEffects" name="getMaxSceneEffects" assertions="1" time="0.017"> <testcase classname="getMaxSceneEffects" name="getMaxSceneEffects" assertions="1" time="0.019">
</testcase> </testcase>
<testcase classname="getMaxSourceEffects" name="getMaxSourceEffects" assertions="1" time="0.016"> <testcase classname="getMaxSourceEffects" name="getMaxSourceEffects" assertions="1" time="0.018">
</testcase> </testcase>
<testcase classname="getOrientation" name="getOrientation" assertions="6" time="0.016"> <testcase classname="getOrientation" name="getOrientation" assertions="6" time="0.018">
</testcase> </testcase>
<testcase classname="getPosition" name="getPosition" assertions="3" time="0.017"> <testcase classname="getPosition" name="getPosition" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="getRecordingDevices" name="getRecordingDevices" assertions="1" time="0.017"> <testcase classname="getRecordingDevices" name="getRecordingDevices" assertions="1" time="0.020">
</testcase> </testcase>
<testcase classname="getVelocity" name="getVelocity" assertions="3" time="0.017"> <testcase classname="getVelocity" name="getVelocity" assertions="3" time="0.017">
</testcase> </testcase>
<testcase classname="getVolume" name="getVolume" assertions="1" time="0.018"> <testcase classname="getVolume" name="getVolume" assertions="1" time="0.018">
</testcase> </testcase>
<testcase classname="isEffectsSupported" name="isEffectsSupported" assertions="1" time="0.016"> <testcase classname="isEffectsSupported" name="isEffectsSupported" assertions="1" time="0.018">
</testcase> </testcase>
<testcase classname="newQueueableSource" name="newQueueableSource" assertions="3" time="0.017"> <testcase classname="newQueueableSource" name="newQueueableSource" assertions="3" time="0.019">
</testcase> </testcase>
<testcase classname="newSource" name="newSource" assertions="6" time="0.018"> <testcase classname="newSource" name="newSource" assertions="6" time="0.019">
</testcase> </testcase>
<testcase classname="pause" name="pause" assertions="2" time="0.018"> <testcase classname="pause" name="pause" assertions="2" time="0.020">
</testcase> </testcase>
<testcase classname="play" name="play" assertions="1" time="0.019"> <testcase classname="play" name="play" assertions="1" time="0.018">
</testcase> </testcase>
<testcase classname="setDistanceModel" name="setDistanceModel" assertions="7" time="0.017"> <testcase classname="setDistanceModel" name="setDistanceModel" assertions="7" time="0.016">
</testcase> </testcase>
<testcase classname="setDopplerScale" name="setDopplerScale" assertions="2" time="0.016"> <testcase classname="setDopplerScale" name="setDopplerScale" assertions="2" time="0.017">
</testcase> </testcase>
<testcase classname="setEffect" name="setEffect" assertions="3" time="0.017"> <testcase classname="setEffect" name="setEffect" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="setMixWithSystem" name="setMixWithSystem" assertions="1" time="0.016"> <testcase classname="setMixWithSystem" name="setMixWithSystem" assertions="1" time="0.018">
</testcase> </testcase>
<testcase classname="setOrientation" name="setOrientation" assertions="6" time="0.017"> <testcase classname="setOrientation" name="setOrientation" assertions="6" time="0.017">
</testcase> </testcase>
<testcase classname="setPosition" name="setPosition" assertions="3" time="0.017"> <testcase classname="setPosition" name="setPosition" assertions="3" time="0.017">
</testcase> </testcase>
<testcase classname="setVelocity" name="setVelocity" assertions="3" time="0.017"> <testcase classname="setVelocity" name="setVelocity" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="setVolume" name="setVolume" assertions="1" time="0.017"> <testcase classname="setVolume" name="setVolume" assertions="1" time="0.018">
</testcase> </testcase>
<testcase classname="stop" name="stop" assertions="2" time="0.018"> <testcase classname="stop" name="stop" assertions="2" time="0.017">
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="love.data" tests="12" failures="0" skipped="0" time="0.139"> <testsuite name="love.data" tests="12" failures="0" skipped="0" time="0.205">
<testcase classname="ByteData" name="ByteData" assertions="10" time="0.017"> <testcase classname="ByteData" name="ByteData" assertions="10" time="0.019">
</testcase> </testcase>
<testcase classname="CompressedData" name="CompressedData" assertions="12" time="0.017"> <testcase classname="CompressedData" name="CompressedData" assertions="12" time="0.017">
</testcase> </testcase>
<testcase classname="compress" name="compress" assertions="45" time="0.017"> <testcase classname="compress" name="compress" assertions="45" time="0.018">
</testcase> </testcase>
<testcase classname="decode" name="decode" assertions="4" time="0.017"> <testcase classname="decode" name="decode" assertions="4" time="0.016">
</testcase> </testcase>
<testcase classname="decompress" name="decompress" assertions="18" time="0.018"> <testcase classname="decompress" name="decompress" assertions="18" time="0.015">
</testcase> </testcase>
<testcase classname="encode" name="encode" assertions="15" time="0.019"> <testcase classname="encode" name="encode" assertions="15" time="0.016">
</testcase> </testcase>
<testcase classname="getPackedSize" name="getPackedSize" assertions="3" time="0.011"> <testcase classname="getPackedSize" name="getPackedSize" assertions="3" time="0.017">
</testcase> </testcase>
<testcase classname="hash" name="hash" assertions="6" time="0.016"> <testcase classname="hash" name="hash" assertions="6" time="0.016">
</testcase> </testcase>
<testcase classname="newByteData" name="newByteData" assertions="3" time="0.001"> <testcase classname="newByteData" name="newByteData" assertions="3" time="0.017">
</testcase> </testcase>
<testcase classname="newDataView" name="newDataView" assertions="3" time="0.002"> <testcase classname="newDataView" name="newDataView" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="pack" name="pack" assertions="4" time="0.001"> <testcase classname="pack" name="pack" assertions="4" time="0.018">
</testcase> </testcase>
<testcase classname="unpack" name="unpack" assertions="3" time="0.002"> <testcase classname="unpack" name="unpack" assertions="3" time="0.018">
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="love.event" tests="4" failures="0" skipped="2" time="0.010"> <testsuite name="love.event" tests="4" failures="0" skipped="2" time="0.102">
<testcase classname="clear" name="clear" assertions="1" time="0.002"> <testcase classname="clear" name="clear" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="poll" name="poll" assertions="1" time="0.001"> <testcase classname="poll" name="poll" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="pump" name="pump" assertions="0" time="0.002"> <testcase classname="pump" name="pump" assertions="0" time="0.016">
<skipped message="used internally" /> <skipped message="used internally" />
</testcase> </testcase>
<testcase classname="push" name="push" assertions="1" time="0.002"> <testcase classname="push" name="push" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="quit" name="quit" assertions="1" time="0.003"> <testcase classname="quit" name="quit" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="wait" name="wait" assertions="0" time="0.001"> <testcase classname="wait" name="wait" assertions="0" time="0.017">
<skipped message="used internally" /> <skipped message="used internally" />
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="love.filesystem" tests="29" failures="0" skipped="2" time="0.068"> <testsuite name="love.filesystem" tests="29" failures="0" skipped="2" time="0.530">
<testcase classname="File" name="File" assertions="36" time="0.002"> <testcase classname="File" name="File" assertions="36" time="0.020">
</testcase> </testcase>
<testcase classname="FileData" name="FileData" assertions="12" time="0.003"> <testcase classname="FileData" name="FileData" assertions="12" time="0.016">
</testcase> </testcase>
<testcase classname="append" name="append" assertions="6" time="0.002"> <testcase classname="append" name="append" assertions="6" time="0.018">
</testcase> </testcase>
<testcase classname="areSymlinksEnabled" name="areSymlinksEnabled" assertions="1" time="0.001"> <testcase classname="areSymlinksEnabled" name="areSymlinksEnabled" assertions="1" time="0.016">
</testcase> </testcase>
<testcase classname="createDirectory" name="createDirectory" assertions="3" time="0.002"> <testcase classname="createDirectory" name="createDirectory" assertions="3" time="0.017">
</testcase> </testcase>
<testcase classname="getAppdataDirectory" name="getAppdataDirectory" assertions="1" time="0.001"> <testcase classname="getAppdataDirectory" name="getAppdataDirectory" assertions="1" time="0.016">
</testcase> </testcase>
<testcase classname="getCRequirePath" name="getCRequirePath" assertions="1" time="0.001"> <testcase classname="getCRequirePath" name="getCRequirePath" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="getDirectoryItems" name="getDirectoryItems" assertions="2" time="0.002"> <testcase classname="getDirectoryItems" name="getDirectoryItems" assertions="2" time="0.017">
</testcase> </testcase>
<testcase classname="getIdentity" name="getIdentity" assertions="1" time="0.002"> <testcase classname="getIdentity" name="getIdentity" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="getInfo" name="getInfo" assertions="3" time="0.007"> <testcase classname="getInfo" name="getInfo" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="getRealDirectory" name="getRealDirectory" assertions="1" time="0.002"> <testcase classname="getRealDirectory" name="getRealDirectory" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="getRequirePath" name="getRequirePath" assertions="1" time="0.001"> <testcase classname="getRequirePath" name="getRequirePath" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="getSaveDirectory" name="getSaveDirectory" assertions="1" time="0.001"> <testcase classname="getSaveDirectory" name="getSaveDirectory" assertions="1" time="0.016">
</testcase> </testcase>
<testcase classname="getSource" name="getSource" assertions="0" time="0.002"> <testcase classname="getSource" name="getSource" assertions="0" time="0.018">
<skipped message="used internally" /> <skipped message="used internally" />
</testcase> </testcase>
<testcase classname="getSourceBaseDirectory" name="getSourceBaseDirectory" assertions="1" time="0.002"> <testcase classname="getSourceBaseDirectory" name="getSourceBaseDirectory" assertions="1" time="0.016">
</testcase> </testcase>
<testcase classname="getUserDirectory" name="getUserDirectory" assertions="1" time="0.002"> <testcase classname="getUserDirectory" name="getUserDirectory" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="getWorkingDirectory" name="getWorkingDirectory" assertions="1" time="0.007"> <testcase classname="getWorkingDirectory" name="getWorkingDirectory" assertions="1" time="0.016">
</testcase> </testcase>
<testcase classname="isFused" name="isFused" assertions="1" time="0.002"> <testcase classname="isFused" name="isFused" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="lines" name="lines" assertions="6" time="0.002"> <testcase classname="lines" name="lines" assertions="6" time="0.018">
</testcase> </testcase>
<testcase classname="load" name="load" assertions="4" time="0.002"> <testcase classname="load" name="load" assertions="4" time="0.017">
</testcase> </testcase>
<testcase classname="mount" name="mount" assertions="5" time="0.002"> <testcase classname="mount" name="mount" assertions="5" time="0.018">
</testcase> </testcase>
<testcase classname="newFileData" name="newFileData" assertions="1" time="0.002"> <testcase classname="newFileData" name="newFileData" assertions="1" time="0.018">
</testcase> </testcase>
<testcase classname="openFile" name="openFile" assertions="4" time="0.002"> <testcase classname="openFile" name="openFile" assertions="4" time="0.016">
</testcase> </testcase>
<testcase classname="read" name="read" assertions="6" time="0.002"> <testcase classname="read" name="read" assertions="6" time="0.016">
</testcase> </testcase>
<testcase classname="remove" name="remove" assertions="5" time="0.002"> <testcase classname="remove" name="remove" assertions="5" time="0.019">
</testcase> </testcase>
<testcase classname="setCRequirePath" name="setCRequirePath" assertions="1" time="0.001"> <testcase classname="setCRequirePath" name="setCRequirePath" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="setIdentity" name="setIdentity" assertions="1" time="0.001"> <testcase classname="setIdentity" name="setIdentity" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="setRequirePath" name="setRequirePath" assertions="1" time="0.006"> <testcase classname="setRequirePath" name="setRequirePath" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="setSource" name="setSource" assertions="0" time="0.001"> <testcase classname="setSource" name="setSource" assertions="0" time="0.016">
<skipped message="used internally" /> <skipped message="used internally" />
</testcase> </testcase>
<testcase classname="unmount" name="unmount" assertions="2" time="0.002"> <testcase classname="unmount" name="unmount" assertions="2" time="0.018">
</testcase> </testcase>
<testcase classname="write" name="write" assertions="3" time="0.002"> <testcase classname="write" name="write" assertions="3" time="0.017">
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="love.font" tests="6" failures="1" skipped="0" time="0.015"> <testsuite name="love.font" tests="6" failures="1" skipped="0" time="0.121">
<testcase classname="GlyphData" name="GlyphData" assertions="19" time="0.002"> <testcase classname="GlyphData" name="GlyphData" assertions="19" time="0.018">
<failure message="assert 8 [check glyph number] expected '97' got '0'">assert 8 [check glyph number] expected '97' got '0'</failure> <failure message="assert 8 [check glyph number] expected '97' got '0'">assert 8 [check glyph number] expected '97' got '0'</failure>
</testcase> </testcase>
<testcase classname="Rasterizer" name="Rasterizer" assertions="13" time="0.002"> <testcase classname="Rasterizer" name="Rasterizer" assertions="13" time="0.018">
</testcase> </testcase>
<testcase classname="newBMFontRasterizer" name="newBMFontRasterizer" assertions="3" time="0.002"> <testcase classname="newBMFontRasterizer" name="newBMFontRasterizer" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="newGlyphData" name="newGlyphData" assertions="3" time="0.006"> <testcase classname="newGlyphData" name="newGlyphData" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="newImageRasterizer" name="newImageRasterizer" assertions="3" time="0.002"> <testcase classname="newImageRasterizer" name="newImageRasterizer" assertions="3" time="0.017">
</testcase> </testcase>
<testcase classname="newRasterizer" name="newRasterizer" assertions="3" time="0.002"> <testcase classname="newRasterizer" name="newRasterizer" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="newTrueTypeRasterizer" name="newTrueTypeRasterizer" assertions="6" time="0.002"> <testcase classname="newTrueTypeRasterizer" name="newTrueTypeRasterizer" assertions="6" time="0.016">
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="love.graphics" tests="99" failures="0" skipped="6" time="0.294"> <testsuite name="love.graphics" tests="102" failures="0" skipped="3" time="3.232">
<testcase classname="Canvas" name="Canvas" assertions="44" time="0.003"> <testcase classname="Canvas" name="Canvas" assertions="44" time="0.020">
</testcase> </testcase>
<testcase classname="Font" name="Font" assertions="90" time="0.004"> <testcase classname="Font" name="Font" assertions="90" time="0.024">
</testcase> </testcase>
<testcase classname="Image" name="Image" assertions="40" time="0.006"> <testcase classname="Image" name="Image" assertions="40" time="0.018">
</testcase> </testcase>
<testcase classname="Mesh" name="Mesh" assertions="0" time="0.001"> <testcase classname="Mesh" name="Mesh" assertions="0" time="0.016">
<skipped message="test class needs writing" /> <skipped message="test class needs writing" />
</testcase> </testcase>
<testcase classname="ParticleSystem" name="ParticleSystem" assertions="0" time="0.001"> <testcase classname="ParticleSystem" name="ParticleSystem" assertions="0" time="0.017">
<skipped message="test class needs writing" /> <skipped message="test class needs writing" />
</testcase> </testcase>
<testcase classname="Quad" name="Quad" assertions="47" time="0.003"> <testcase classname="Quad" name="Quad" assertions="47" time="0.019">
</testcase> </testcase>
<testcase classname="Shader" name="Shader" assertions="39" time="0.013"> <testcase classname="Shader" name="Shader" assertions="39" time="0.031">
</testcase> </testcase>
<testcase classname="SpriteBatch" name="SpriteBatch" assertions="0" time="0.001"> <testcase classname="SpriteBatch" name="SpriteBatch" assertions="203" time="0.030">
<skipped message="test class needs writing" />
</testcase> </testcase>
<testcase classname="Text" name="Text" assertions="90" time="0.003"> <testcase classname="Text" name="Text" assertions="90" time="0.024">
</testcase> </testcase>
<testcase classname="Video" name="Video" assertions="0" time="0.001"> <testcase classname="Video" name="Video" assertions="48" time="1.040">
<skipped message="test class needs writing" />
</testcase> </testcase>
<testcase classname="applyTransform" name="applyTransform" assertions="4" time="0.004"> <testcase classname="applyTransform" name="applyTransform" assertions="4" time="0.011">
</testcase> </testcase>
<testcase classname="arc" name="arc" assertions="264" time="0.003"> <testcase classname="arc" name="arc" assertions="264" time="0.019">
</testcase> </testcase>
<testcase classname="captureScreenshot" name="captureScreenshot" assertions="1" time="0.020"> <testcase classname="captureScreenshot" name="captureScreenshot" assertions="1" time="0.184">
</testcase> </testcase>
<testcase classname="circle" name="circle" assertions="192" time="0.005"> <testcase classname="circle" name="circle" assertions="192" time="0.020">
</testcase> </testcase>
<testcase classname="clear" name="clear" assertions="20" time="0.002"> <testcase classname="clear" name="clear" assertions="20" time="0.022">
</testcase> </testcase>
<testcase classname="discard" name="discard" assertions="0" time="0.001"> <testcase classname="discard" name="discard" assertions="0" time="0.017">
<skipped message="cant test this worked" /> <skipped message="cant test this worked" />
</testcase> </testcase>
<testcase classname="draw" name="draw" assertions="112" time="0.002"> <testcase classname="draw" name="draw" assertions="112" time="0.018">
</testcase> </testcase>
<testcase classname="drawInstanced" name="drawInstanced" assertions="0" time="0.002"> <testcase classname="drawInstanced" name="drawInstanced" assertions="16" time="0.030">
<skipped message="test class needs writing" />
</testcase> </testcase>
<testcase classname="drawLayer" name="drawLayer" assertions="144" time="0.003"> <testcase classname="drawLayer" name="drawLayer" assertions="144" time="0.021">
</testcase> </testcase>
<testcase classname="ellipse" name="ellipse" assertions="80" time="0.002"> <testcase classname="ellipse" name="ellipse" assertions="80" time="0.019">
</testcase> </testcase>
<testcase classname="flushBatch" name="flushBatch" assertions="1" time="0.004"> <testcase classname="flushBatch" name="flushBatch" assertions="1" time="0.018">
</testcase> </testcase>
<testcase classname="getBackgroundColor" name="getBackgroundColor" assertions="8" time="0.001"> <testcase classname="getBackgroundColor" name="getBackgroundColor" assertions="8" time="0.018">
</testcase> </testcase>
<testcase classname="getBlendMode" name="getBlendMode" assertions="4" time="0.001"> <testcase classname="getBlendMode" name="getBlendMode" assertions="4" time="0.017">
</testcase> </testcase>
<testcase classname="getCanvas" name="getCanvas" assertions="4" time="0.001"> <testcase classname="getCanvas" name="getCanvas" assertions="4" time="0.018">
</testcase> </testcase>
<testcase classname="getColor" name="getColor" assertions="8" time="0.001"> <testcase classname="getColor" name="getColor" assertions="8" time="0.018">
</testcase> </testcase>
<testcase classname="getColorMask" name="getColorMask" assertions="8" time="0.001"> <testcase classname="getColorMask" name="getColorMask" assertions="8" time="0.017">
</testcase> </testcase>
<testcase classname="getDPIScale" name="getDPIScale" assertions="1" time="0.002"> <testcase classname="getDPIScale" name="getDPIScale" assertions="1" time="0.018">
</testcase> </testcase>
<testcase classname="getDefaultFilter" name="getDefaultFilter" assertions="3" time="0.001"> <testcase classname="getDefaultFilter" name="getDefaultFilter" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="getDepthMode" name="getDepthMode" assertions="2" time="0.004"> <testcase classname="getDepthMode" name="getDepthMode" assertions="2" time="0.016">
</testcase> </testcase>
<testcase classname="getDimensions" name="getDimensions" assertions="2" time="0.002"> <testcase classname="getDimensions" name="getDimensions" assertions="2" time="0.016">
</testcase> </testcase>
<testcase classname="getFont" name="getFont" assertions="3" time="0.001"> <testcase classname="getFont" name="getFont" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="getFrontFaceWinding" name="getFrontFaceWinding" assertions="2" time="0.002"> <testcase classname="getFrontFaceWinding" name="getFrontFaceWinding" assertions="2" time="0.017">
</testcase> </testcase>
<testcase classname="getHeight" name="getHeight" assertions="1" time="0.001"> <testcase classname="getHeight" name="getHeight" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="getLineJoin" name="getLineJoin" assertions="2" time="0.002"> <testcase classname="getLineJoin" name="getLineJoin" assertions="2" time="0.018">
</testcase> </testcase>
<testcase classname="getLineStyle" name="getLineStyle" assertions="2" time="0.002"> <testcase classname="getLineStyle" name="getLineStyle" assertions="2" time="0.017">
</testcase> </testcase>
<testcase classname="getLineWidth" name="getLineWidth" assertions="2" time="0.001"> <testcase classname="getLineWidth" name="getLineWidth" assertions="2" time="0.016">
</testcase> </testcase>
<testcase classname="getMeshCullMode" name="getMeshCullMode" assertions="2" time="0.001"> <testcase classname="getMeshCullMode" name="getMeshCullMode" assertions="2" time="0.017">
</testcase> </testcase>
<testcase classname="getPixelDimensions" name="getPixelDimensions" assertions="2" time="0.005"> <testcase classname="getPixelDimensions" name="getPixelDimensions" assertions="2" time="0.016">
</testcase> </testcase>
<testcase classname="getPixelHeight" name="getPixelHeight" assertions="1" time="0.001"> <testcase classname="getPixelHeight" name="getPixelHeight" assertions="1" time="0.018">
</testcase> </testcase>
<testcase classname="getPixelWidth" name="getPixelWidth" assertions="1" time="0.001"> <testcase classname="getPixelWidth" name="getPixelWidth" assertions="1" time="0.013">
</testcase> </testcase>
<testcase classname="getPointSize" name="getPointSize" assertions="2" time="0.001"> <testcase classname="getPointSize" name="getPointSize" assertions="2" time="0.018">
</testcase> </testcase>
<testcase classname="getRendererInfo" name="getRendererInfo" assertions="4" time="0.002"> <testcase classname="getRendererInfo" name="getRendererInfo" assertions="4" time="0.017">
</testcase> </testcase>
<testcase classname="getScissor" name="getScissor" assertions="8" time="0.002"> <testcase classname="getScissor" name="getScissor" assertions="8" time="0.016">
</testcase> </testcase>
<testcase classname="getShader" name="getShader" assertions="1" time="0.002"> <testcase classname="getShader" name="getShader" assertions="1" time="0.016">
</testcase> </testcase>
<testcase classname="getStackDepth" name="getStackDepth" assertions="4" time="0.002"> <testcase classname="getStackDepth" name="getStackDepth" assertions="4" time="0.017">
</testcase> </testcase>
<testcase classname="getStats" name="getStats" assertions="7" time="0.002"> <testcase classname="getStats" name="getStats" assertions="7" time="0.018">
</testcase> </testcase>
<testcase classname="getStencilMode" name="getStencilMode" assertions="6" time="0.001"> <testcase classname="getStencilMode" name="getStencilMode" assertions="6" time="0.016">
</testcase> </testcase>
<testcase classname="getSupported" name="getSupported" assertions="17" time="0.002"> <testcase classname="getSupported" name="getSupported" assertions="17" time="0.018">
</testcase> </testcase>
<testcase classname="getSystemLimits" name="getSystemLimits" assertions="13" time="0.005"> <testcase classname="getSystemLimits" name="getSystemLimits" assertions="13" time="0.017">
</testcase> </testcase>
<testcase classname="getTextureFormats" name="getTextureFormats" assertions="79" time="0.002"> <testcase classname="getTextureFormats" name="getTextureFormats" assertions="79" time="0.017">
</testcase> </testcase>
<testcase classname="getTextureTypes" name="getTextureTypes" assertions="4" time="0.001"> <testcase classname="getTextureTypes" name="getTextureTypes" assertions="4" time="0.017">
</testcase> </testcase>
<testcase classname="getWidth" name="getWidth" assertions="1" time="0.001"> <testcase classname="getWidth" name="getWidth" assertions="1" time="0.016">
</testcase> </testcase>
<testcase classname="intersectScissor" name="intersectScissor" assertions="20" time="0.002"> <testcase classname="intersectScissor" name="intersectScissor" assertions="20" time="0.018">
</testcase> </testcase>
<testcase classname="inverseTransformPoint" name="inverseTransformPoint" assertions="4" time="0.002"> <testcase classname="inverseTransformPoint" name="inverseTransformPoint" assertions="4" time="0.016">
</testcase> </testcase>
<testcase classname="isActive" name="isActive" assertions="1" time="0.001"> <testcase classname="isActive" name="isActive" assertions="1" time="0.018">
</testcase> </testcase>
<testcase classname="isGammaCorrect" name="isGammaCorrect" assertions="1" time="0.006"> <testcase classname="isGammaCorrect" name="isGammaCorrect" assertions="1" time="0.016">
</testcase> </testcase>
<testcase classname="isWireframe" name="isWireframe" assertions="2" time="0.001"> <testcase classname="isWireframe" name="isWireframe" assertions="2" time="0.017">
</testcase> </testcase>
<testcase classname="line" name="line" assertions="64" time="0.003"> <testcase classname="line" name="line" assertions="64" time="0.019">
</testcase> </testcase>
<testcase classname="newArrayImage" name="newArrayImage" assertions="3" time="0.007"> <testcase classname="newArrayImage" name="newArrayImage" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="newCanvas" name="newCanvas" assertions="6" time="0.002"> <testcase classname="newCanvas" name="newCanvas" assertions="6" time="0.016">
</testcase> </testcase>
<testcase classname="newCubeImage" name="newCubeImage" assertions="3" time="0.003"> <testcase classname="newCubeImage" name="newCubeImage" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="newFont" name="newFont" assertions="6" time="0.002"> <testcase classname="newFont" name="newFont" assertions="6" time="0.016">
</testcase> </testcase>
<testcase classname="newImage" name="newImage" assertions="3" time="0.002"> <testcase classname="newImage" name="newImage" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="newImageFont" name="newImageFont" assertions="3" time="0.002"> <testcase classname="newImageFont" name="newImageFont" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="newMesh" name="newMesh" assertions="3" time="0.002"> <testcase classname="newMesh" name="newMesh" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="newParticleSystem" name="newParticleSystem" assertions="3" time="0.002"> <testcase classname="newParticleSystem" name="newParticleSystem" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="newQuad" name="newQuad" assertions="3" time="0.002"> <testcase classname="newQuad" name="newQuad" assertions="3" time="0.020">
</testcase> </testcase>
<testcase classname="newShader" name="newShader" assertions="3" time="0.009"> <testcase classname="newShader" name="newShader" assertions="3" time="0.024">
</testcase> </testcase>
<testcase classname="newSpriteBatch" name="newSpriteBatch" assertions="3" time="0.002"> <testcase classname="newSpriteBatch" name="newSpriteBatch" assertions="3" time="0.017">
</testcase> </testcase>
<testcase classname="newTextBatch" name="newTextBatch" assertions="3" time="0.002"> <testcase classname="newTextBatch" name="newTextBatch" assertions="3" time="0.019">
</testcase> </testcase>
<testcase classname="newVideo" name="newVideo" assertions="3" time="0.004"> <testcase classname="newVideo" name="newVideo" assertions="3" time="0.021">
</testcase> </testcase>
<testcase classname="newVolumeImage" name="newVolumeImage" assertions="3" time="0.002"> <testcase classname="newVolumeImage" name="newVolumeImage" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="origin" name="origin" assertions="4" time="0.002"> <testcase classname="origin" name="origin" assertions="4" time="0.019">
</testcase> </testcase>
<testcase classname="points" name="points" assertions="48" time="0.003"> <testcase classname="points" name="points" assertions="48" time="0.022">
</testcase> </testcase>
<testcase classname="polygon" name="polygon" assertions="56" time="0.002"> <testcase classname="polygon" name="polygon" assertions="56" time="0.018">
</testcase> </testcase>
<testcase classname="pop" name="pop" assertions="4" time="0.002"> <testcase classname="pop" name="pop" assertions="4" time="0.032">
</testcase> </testcase>
<testcase classname="print" name="print" assertions="148" time="0.002"> <testcase classname="print" name="print" assertions="148" time="0.019">
</testcase> </testcase>
<testcase classname="printf" name="printf" assertions="180" time="0.002"> <testcase classname="printf" name="printf" assertions="180" time="0.018">
</testcase> </testcase>
<testcase classname="push" name="push" assertions="4" time="0.007"> <testcase classname="push" name="push" assertions="4" time="0.018">
</testcase> </testcase>
<testcase classname="rectangle" name="rectangle" assertions="116" time="0.002"> <testcase classname="rectangle" name="rectangle" assertions="116" time="0.032">
</testcase> </testcase>
<testcase classname="replaceTransform" name="replaceTransform" assertions="4" time="0.002"> <testcase classname="replaceTransform" name="replaceTransform" assertions="4" time="0.024">
</testcase> </testcase>
<testcase classname="reset" name="reset" assertions="3" time="0.002"> <testcase classname="reset" name="reset" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="rotate" name="rotate" assertions="16" time="0.002"> <testcase classname="rotate" name="rotate" assertions="16" time="0.036">
</testcase> </testcase>
<testcase classname="scale" name="scale" assertions="16" time="0.002"> <testcase classname="scale" name="scale" assertions="16" time="0.014">
</testcase> </testcase>
<testcase classname="setBackgroundColor" name="setBackgroundColor" assertions="4" time="0.002"> <testcase classname="setBackgroundColor" name="setBackgroundColor" assertions="4" time="0.018">
</testcase> </testcase>
<testcase classname="setBlendMode" name="setBlendMode" assertions="16" time="0.003"> <testcase classname="setBlendMode" name="setBlendMode" assertions="16" time="0.027">
</testcase> </testcase>
<testcase classname="setCanvas" name="setCanvas" assertions="19" time="0.002"> <testcase classname="setCanvas" name="setCanvas" assertions="19" time="0.018">
</testcase> </testcase>
<testcase classname="setColor" name="setColor" assertions="68" time="0.002"> <testcase classname="setColor" name="setColor" assertions="68" time="0.018">
</testcase> </testcase>
<testcase classname="setColorMask" name="setColorMask" assertions="20" time="0.002"> <testcase classname="setColorMask" name="setColorMask" assertions="20" time="0.023">
</testcase> </testcase>
<testcase classname="setDefaultFilter" name="setDefaultFilter" assertions="3" time="0.001"> <testcase classname="setDefaultFilter" name="setDefaultFilter" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="setDepthMode" name="setDepthMode" assertions="8" time="0.002"> <testcase classname="setDepthMode" name="setDepthMode" assertions="8" time="0.016">
</testcase> </testcase>
<testcase classname="setFont" name="setFont" assertions="40" time="0.003"> <testcase classname="setFont" name="setFont" assertions="40" time="0.030">
</testcase> </testcase>
<testcase classname="setFrontFaceWinding" name="setFrontFaceWinding" assertions="2" time="0.002"> <testcase classname="setFrontFaceWinding" name="setFrontFaceWinding" assertions="2" time="0.018">
</testcase> </testcase>
<testcase classname="setLineJoin" name="setLineJoin" assertions="16" time="0.003"> <testcase classname="setLineJoin" name="setLineJoin" assertions="16" time="0.019">
</testcase> </testcase>
<testcase classname="setLineStyle" name="setLineStyle" assertions="24" time="0.002"> <testcase classname="setLineStyle" name="setLineStyle" assertions="24" time="0.029">
</testcase> </testcase>
<testcase classname="setLineWidth" name="setLineWidth" assertions="72" time="0.002"> <testcase classname="setLineWidth" name="setLineWidth" assertions="72" time="0.021">
</testcase> </testcase>
<testcase classname="setMeshCullMode" name="setMeshCullMode" assertions="3" time="0.002"> <testcase classname="setMeshCullMode" name="setMeshCullMode" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="setScissor" name="setScissor" assertions="32" time="0.002"> <testcase classname="setScissor" name="setScissor" assertions="32" time="0.034">
</testcase> </testcase>
<testcase classname="setShader" name="setShader" assertions="16" time="0.010"> <testcase classname="setShader" name="setShader" assertions="16" time="0.023">
</testcase> </testcase>
<testcase classname="setStencilTest" name="setStencilTest" assertions="32" time="0.003"> <testcase classname="setStencilMode" name="setStencilMode" assertions="32" time="0.019">
</testcase> </testcase>
<testcase classname="setWireframe" name="setWireframe" assertions="28" time="0.002"> <testcase classname="setWireframe" name="setWireframe" assertions="28" time="0.030">
</testcase> </testcase>
<testcase classname="shear" name="shear" assertions="32" time="0.003"> <testcase classname="shear" name="shear" assertions="32" time="0.022">
</testcase> </testcase>
<testcase classname="transformPoint" name="transformPoint" assertions="4" time="0.002"> <testcase classname="transformPoint" name="transformPoint" assertions="4" time="0.016">
</testcase> </testcase>
<testcase classname="translate" name="translate" assertions="16" time="0.007"> <testcase classname="translate" name="translate" assertions="16" time="0.031">
</testcase> </testcase>
<testcase classname="validateShader" name="validateShader" assertions="2" time="0.005"> <testcase classname="validateShader" name="validateShader" assertions="2" time="0.019">
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="love.image" tests="5" failures="0" skipped="0" time="0.011"> <testsuite name="love.image" tests="5" failures="0" skipped="0" time="0.086">
<testcase classname="CompressedImageData" name="CompressedImageData" assertions="11" time="0.002"> <testcase classname="CompressedImageData" name="CompressedImageData" assertions="11" time="0.017">
</testcase> </testcase>
<testcase classname="ImageData" name="ImageData" assertions="14" time="0.003"> <testcase classname="ImageData" name="ImageData" assertions="14" time="0.018">
</testcase> </testcase>
<testcase classname="isCompressed" name="isCompressed" assertions="1" time="0.002"> <testcase classname="isCompressed" name="isCompressed" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="newCompressedData" name="newCompressedData" assertions="3" time="0.002"> <testcase classname="newCompressedData" name="newCompressedData" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="newImageData" name="newImageData" assertions="6" time="0.002"> <testcase classname="newImageData" name="newImageData" assertions="6" time="0.018">
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="love.math" tests="20" failures="0" skipped="0" time="0.070"> <testsuite name="love.math" tests="20" failures="0" skipped="0" time="0.339">
<testcase classname="BezierCurve" name="BezierCurve" assertions="31" time="0.007"> <testcase classname="BezierCurve" name="BezierCurve" assertions="31" time="0.017">
</testcase> </testcase>
<testcase classname="RandomGenerator" name="RandomGenerator" assertions="10" time="0.002"> <testcase classname="RandomGenerator" name="RandomGenerator" assertions="10" time="0.017">
</testcase> </testcase>
<testcase classname="Transform" name="Transform" assertions="14" time="0.002"> <testcase classname="Transform" name="Transform" assertions="14" time="0.018">
</testcase> </testcase>
<testcase classname="colorFromBytes" name="colorFromBytes" assertions="12" time="0.007"> <testcase classname="colorFromBytes" name="colorFromBytes" assertions="12" time="0.018">
</testcase> </testcase>
<testcase classname="colorToBytes" name="colorToBytes" assertions="12" time="0.002"> <testcase classname="colorToBytes" name="colorToBytes" assertions="12" time="0.018">
</testcase> </testcase>
<testcase classname="gammaToLinear" name="gammaToLinear" assertions="3" time="0.002"> <testcase classname="gammaToLinear" name="gammaToLinear" assertions="3" time="0.017">
</testcase> </testcase>
<testcase classname="getRandomSeed" name="getRandomSeed" assertions="2" time="0.006"> <testcase classname="getRandomSeed" name="getRandomSeed" assertions="2" time="0.016">
</testcase> </testcase>
<testcase classname="getRandomState" name="getRandomState" assertions="1" time="0.002"> <testcase classname="getRandomState" name="getRandomState" assertions="1" time="0.016">
</testcase> </testcase>
<testcase classname="isConvex" name="isConvex" assertions="2" time="0.002"> <testcase classname="isConvex" name="isConvex" assertions="2" time="0.017">
</testcase> </testcase>
<testcase classname="linearToGamma" name="linearToGamma" assertions="3" time="0.007"> <testcase classname="linearToGamma" name="linearToGamma" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="newBezierCurve" name="newBezierCurve" assertions="3" time="0.002"> <testcase classname="newBezierCurve" name="newBezierCurve" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="newRandomGenerator" name="newRandomGenerator" assertions="3" time="0.002"> <testcase classname="newRandomGenerator" name="newRandomGenerator" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="newTransform" name="newTransform" assertions="3" time="0.006"> <testcase classname="newTransform" name="newTransform" assertions="3" time="0.017">
</testcase> </testcase>
<testcase classname="perlinNoise" name="perlinNoise" assertions="4" time="0.002"> <testcase classname="perlinNoise" name="perlinNoise" assertions="4" time="0.017">
</testcase> </testcase>
<testcase classname="random" name="random" assertions="10" time="0.002"> <testcase classname="random" name="random" assertions="10" time="0.017">
</testcase> </testcase>
<testcase classname="randomNormal" name="randomNormal" assertions="1" time="0.006"> <testcase classname="randomNormal" name="randomNormal" assertions="1" time="0.018">
</testcase> </testcase>
<testcase classname="setRandomSeed" name="setRandomSeed" assertions="2" time="0.002"> <testcase classname="setRandomSeed" name="setRandomSeed" assertions="2" time="0.016">
</testcase> </testcase>
<testcase classname="setRandomState" name="setRandomState" assertions="1" time="0.002"> <testcase classname="setRandomState" name="setRandomState" assertions="1" time="0.016">
</testcase> </testcase>
<testcase classname="simplexNoise" name="simplexNoise" assertions="4" time="0.007"> <testcase classname="simplexNoise" name="simplexNoise" assertions="4" time="0.016">
</testcase> </testcase>
<testcase classname="triangulate" name="triangulate" assertions="2" time="0.002"> <testcase classname="triangulate" name="triangulate" assertions="2" time="0.017">
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="love.physics" tests="22" failures="0" skipped="6" time="0.071"> <testsuite name="love.physics" tests="22" failures="0" skipped="4" time="0.434">
<testcase classname="Body" name="Body" assertions="0" time="0.002"> <testcase classname="Body" name="Body" assertions="0" time="0.017">
<skipped message="test class needs writing" /> <skipped message="test class needs writing" />
</testcase> </testcase>
<testcase classname="Contact" name="Contact" assertions="0" time="0.002"> <testcase classname="Contact" name="Contact" assertions="0" time="0.017">
<skipped message="test class needs writing" /> <skipped message="test class needs writing" />
</testcase> </testcase>
<testcase classname="Fixture" name="Fixture" assertions="0" time="0.002"> <testcase classname="Joint" name="Joint" assertions="0" time="0.017">
<skipped message="test class needs writing" /> <skipped message="test class needs writing" />
</testcase> </testcase>
<testcase classname="Joint" name="Joint" assertions="0" time="0.002"> <testcase classname="Shape" name="Shape" assertions="0" time="0.016">
<skipped message="test class needs writing" /> <skipped message="test class needs writing" />
</testcase> </testcase>
<testcase classname="Shape" name="Shape" assertions="0" time="0.002"> <testcase classname="World" name="World" assertions="33" time="0.016">
<skipped message="test class needs writing" />
</testcase> </testcase>
<testcase classname="World" name="World" assertions="0" time="0.002"> <testcase classname="getDistance" name="getDistance" assertions="1" time="0.016">
<skipped message="test class needs writing" />
</testcase> </testcase>
<testcase classname="getDistance" name="getDistance" assertions="1" time="0.002"> <testcase classname="getMeter" name="getMeter" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="getMeter" name="getMeter" assertions="1" time="0.002"> <testcase classname="newBody" name="newBody" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="newBody" name="newBody" assertions="3" time="0.002"> <testcase classname="newChainShape" name="newChainShape" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="newChainShape" name="newChainShape" assertions="3" time="0.008"> <testcase classname="newCircleShape" name="newCircleShape" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="newCircleShape" name="newCircleShape" assertions="3" time="0.002"> <testcase classname="newDistanceJoint" name="newDistanceJoint" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="newDistanceJoint" name="newDistanceJoint" assertions="3" time="0.002"> <testcase classname="newEdgeShape" name="newEdgeShape" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="newEdgeShape" name="newEdgeShape" assertions="3" time="0.002"> <testcase classname="newFrictionJoint" name="newFrictionJoint" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="newFixture" name="newFixture" assertions="3" time="0.002"> <testcase classname="newGearJoint" name="newGearJoint" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="newFrictionJoint" name="newFrictionJoint" assertions="3" time="0.008"> <testcase classname="newMotorJoint" name="newMotorJoint" assertions="3" time="0.015">
</testcase> </testcase>
<testcase classname="newGearJoint" name="newGearJoint" assertions="3" time="0.002"> <testcase classname="newMouseJoint" name="newMouseJoint" assertions="3" time="0.017">
</testcase> </testcase>
<testcase classname="newMotorJoint" name="newMotorJoint" assertions="3" time="0.002"> <testcase classname="newPolygonShape" name="newPolygonShape" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="newMouseJoint" name="newMouseJoint" assertions="3" time="0.002"> <testcase classname="newPrismaticJoint" name="newPrismaticJoint" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="newPolygonShape" name="newPolygonShape" assertions="3" time="0.002"> <testcase classname="newPulleyJoint" name="newPulleyJoint" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="newPrismaticJoint" name="newPrismaticJoint" assertions="3" time="0.005"> <testcase classname="newRectangleShape" name="newRectangleShape" assertions="6" time="0.017">
</testcase> </testcase>
<testcase classname="newPulleyJoint" name="newPulleyJoint" assertions="3" time="0.002"> <testcase classname="newRevoluteJoint" name="newRevoluteJoint" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="newRectangleShape" name="newRectangleShape" assertions="6" time="0.002"> <testcase classname="newRopeJoint" name="newRopeJoint" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="newRevoluteJoint" name="newRevoluteJoint" assertions="3" time="0.002"> <testcase classname="newWeldJoint" name="newWeldJoint" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="newRopeJoint" name="newRopeJoint" assertions="3" time="0.002"> <testcase classname="newWheelJoint" name="newWheelJoint" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="newWeldJoint" name="newWeldJoint" assertions="3" time="0.002"> <testcase classname="newWorld" name="newWorld" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="newWheelJoint" name="newWheelJoint" assertions="3" time="0.002"> <testcase classname="setMeter" name="setMeter" assertions="2" time="0.016">
</testcase>
<testcase classname="newWorld" name="newWorld" assertions="3" time="0.002">
</testcase>
<testcase classname="setMeter" name="setMeter" assertions="2" time="0.002">
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="love.sound" tests="4" failures="0" skipped="0" time="0.015"> <testsuite name="love.sound" tests="4" failures="0" skipped="0" time="0.071">
<testcase classname="Decoder" name="Decoder" assertions="14" time="0.006"> <testcase classname="Decoder" name="Decoder" assertions="14" time="0.018">
</testcase> </testcase>
<testcase classname="SoundData" name="SoundData" assertions="20" time="0.003"> <testcase classname="SoundData" name="SoundData" assertions="20" time="0.018">
</testcase> </testcase>
<testcase classname="newDecoder" name="newDecoder" assertions="3" time="0.002"> <testcase classname="newDecoder" name="newDecoder" assertions="3" time="0.017">
</testcase> </testcase>
<testcase classname="newSoundData" name="newSoundData" assertions="6" time="0.004"> <testcase classname="newSoundData" name="newSoundData" assertions="6" time="0.018">
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="love.system" tests="6" failures="0" skipped="2" time="0.026"> <testsuite name="love.system" tests="6" failures="0" skipped="2" time="0.139">
<testcase classname="getClipboardText" name="getClipboardText" assertions="1" time="0.003"> <testcase classname="getClipboardText" name="getClipboardText" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="getOS" name="getOS" assertions="1" time="0.002"> <testcase classname="getOS" name="getOS" assertions="1" time="0.018">
</testcase> </testcase>
<testcase classname="getPowerInfo" name="getPowerInfo" assertions="1" time="0.002"> <testcase classname="getPowerInfo" name="getPowerInfo" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="getProcessorCount" name="getProcessorCount" assertions="1" time="0.002"> <testcase classname="getProcessorCount" name="getProcessorCount" assertions="1" time="0.018">
</testcase> </testcase>
<testcase classname="hasBackgroundMusic" name="hasBackgroundMusic" assertions="1" time="0.005"> <testcase classname="hasBackgroundMusic" name="hasBackgroundMusic" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="openURL" name="openURL" assertions="0" time="0.002"> <testcase classname="openURL" name="openURL" assertions="0" time="0.016">
<skipped message="cant test this worked" /> <skipped message="cant test this worked" />
</testcase> </testcase>
<testcase classname="setClipboardText" name="setClipboardText" assertions="1" time="0.002"> <testcase classname="setClipboardText" name="setClipboardText" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="vibrate" name="vibrate" assertions="0" time="0.007"> <testcase classname="vibrate" name="vibrate" assertions="0" time="0.017">
<skipped message="cant test this worked" /> <skipped message="cant test this worked" />
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="love.thread" tests="5" failures="0" skipped="0" time="0.317"> <testsuite name="love.thread" tests="5" failures="0" skipped="0" time="0.376">
<testcase classname="Channel" name="Channel" assertions="10" time="0.215"> <testcase classname="Channel" name="Channel" assertions="10" time="0.235">
</testcase> </testcase>
<testcase classname="Thread" name="Thread" assertions="7" time="0.092"> <testcase classname="Thread" name="Thread" assertions="7" time="0.091">
</testcase> </testcase>
<testcase classname="getChannel" name="getChannel" assertions="3" time="0.002"> <testcase classname="getChannel" name="getChannel" assertions="3" time="0.018">
</testcase> </testcase>
<testcase classname="newChannel" name="newChannel" assertions="3" time="0.006"> <testcase classname="newChannel" name="newChannel" assertions="3" time="0.015">
</testcase> </testcase>
<testcase classname="newThread" name="newThread" assertions="3" time="0.002"> <testcase classname="newThread" name="newThread" assertions="3" time="0.016">
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="love.timer" tests="6" failures="0" skipped="0" time="2.021"> <testsuite name="love.timer" tests="6" failures="0" skipped="0" time="2.091">
<testcase classname="getAverageDelta" name="getAverageDelta" assertions="1" time="0.002"> <testcase classname="getAverageDelta" name="getAverageDelta" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="getDelta" name="getDelta" assertions="1" time="0.006"> <testcase classname="getDelta" name="getDelta" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="getFPS" name="getFPS" assertions="1" time="0.002"> <testcase classname="getFPS" name="getFPS" assertions="1" time="0.016">
</testcase> </testcase>
<testcase classname="getTime" name="getTime" assertions="1" time="1.003"> <testcase classname="getTime" name="getTime" assertions="1" time="1.017">
</testcase> </testcase>
<testcase classname="sleep" name="sleep" assertions="1" time="1.003"> <testcase classname="sleep" name="sleep" assertions="1" time="1.012">
</testcase> </testcase>
<testcase classname="step" name="step" assertions="1" time="0.005"> <testcase classname="step" name="step" assertions="1" time="0.012">
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="love.video" tests="2" failures="0" skipped="0" time="0.012"> <testsuite name="love.video" tests="2" failures="0" skipped="0" time="0.039">
<testcase classname="VideoStream" name="VideoStream" assertions="9" time="0.007"> <testcase classname="VideoStream" name="VideoStream" assertions="9" time="0.019">
</testcase> </testcase>
<testcase classname="newVideoStream" name="newVideoStream" assertions="3" time="0.005"> <testcase classname="newVideoStream" name="newVideoStream" assertions="3" time="0.020">
</testcase> </testcase>
</testsuite> </testsuite>
<testsuite name="love.window" tests="34" failures="0" skipped="2" time="5.955"> <testsuite name="love.window" tests="34" failures="0" skipped="2" time="6.015">
<testcase classname="close" name="close" assertions="2" time="0.034"> <testcase classname="close" name="close" assertions="2" time="0.048">
</testcase> </testcase>
<testcase classname="fromPixels" name="fromPixels" assertions="1" time="0.002"> <testcase classname="fromPixels" name="fromPixels" assertions="1" time="0.002">
</testcase> </testcase>
<testcase classname="getDPIScale" name="getDPIScale" assertions="1" time="0.003"> <testcase classname="getDPIScale" name="getDPIScale" assertions="1" time="0.002">
</testcase> </testcase>
<testcase classname="getDesktopDimensions" name="getDesktopDimensions" assertions="2" time="0.002"> <testcase classname="getDesktopDimensions" name="getDesktopDimensions" assertions="2" time="0.017">
</testcase> </testcase>
<testcase classname="getDisplayCount" name="getDisplayCount" assertions="1" time="0.002"> <testcase classname="getDisplayCount" name="getDisplayCount" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="getDisplayName" name="getDisplayName" assertions="1" time="0.002"> <testcase classname="getDisplayName" name="getDisplayName" assertions="1" time="0.016">
</testcase> </testcase>
<testcase classname="getDisplayOrientation" name="getDisplayOrientation" assertions="1" time="0.004"> <testcase classname="getDisplayOrientation" name="getDisplayOrientation" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="getFullscreen" name="getFullscreen" assertions="2" time="1.365"> <testcase classname="getFullscreen" name="getFullscreen" assertions="2" time="1.345">
</testcase> </testcase>
<testcase classname="getFullscreenModes" name="getFullscreenModes" assertions="1" time="0.014"> <testcase classname="getFullscreenModes" name="getFullscreenModes" assertions="1" time="0.012">
</testcase> </testcase>
<testcase classname="getIcon" name="getIcon" assertions="2" time="0.019"> <testcase classname="getIcon" name="getIcon" assertions="2" time="0.019">
</testcase> </testcase>
<testcase classname="getMode" name="getMode" assertions="3" time="0.017"> <testcase classname="getMode" name="getMode" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="getPosition" name="getPosition" assertions="2" time="0.017"> <testcase classname="getPosition" name="getPosition" assertions="2" time="0.017">
</testcase> </testcase>
<testcase classname="getSafeArea" name="getSafeArea" assertions="4" time="0.018"> <testcase classname="getSafeArea" name="getSafeArea" assertions="4" time="0.016">
</testcase> </testcase>
<testcase classname="getTitle" name="getTitle" assertions="1" time="0.018"> <testcase classname="getTitle" name="getTitle" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="getVSync" name="getVSync" assertions="1" time="0.014"> <testcase classname="getVSync" name="getVSync" assertions="1" time="0.015">
</testcase> </testcase>
<testcase classname="hasFocus" name="hasFocus" assertions="1" time="0.017"> <testcase classname="hasFocus" name="hasFocus" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="hasMouseFocus" name="hasMouseFocus" assertions="1" time="0.017"> <testcase classname="hasMouseFocus" name="hasMouseFocus" assertions="1" time="0.017">
</testcase> </testcase>
<testcase classname="isDisplaySleepEnabled" name="isDisplaySleepEnabled" assertions="3" time="0.017"> <testcase classname="isDisplaySleepEnabled" name="isDisplaySleepEnabled" assertions="3" time="0.016">
</testcase> </testcase>
<testcase classname="isMaximized" name="isMaximized" assertions="2" time="0.187"> <testcase classname="isMaximized" name="isMaximized" assertions="2" time="0.185">
</testcase> </testcase>
<testcase classname="isMinimized" name="isMinimized" assertions="2" time="0.735"> <testcase classname="isMinimized" name="isMinimized" assertions="2" time="0.730">
</testcase> </testcase>
<testcase classname="isOpen" name="isOpen" assertions="2" time="0.040"> <testcase classname="isOpen" name="isOpen" assertions="2" time="0.041">
</testcase> </testcase>
<testcase classname="isVisible" name="isVisible" assertions="2" time="0.034"> <testcase classname="isVisible" name="isVisible" assertions="2" time="0.029">
</testcase> </testcase>
<testcase classname="maximize" name="maximize" assertions="2" time="0.158"> <testcase classname="maximize" name="maximize" assertions="2" time="0.156">
</testcase> </testcase>
<testcase classname="minimize" name="minimize" assertions="2" time="0.737"> <testcase classname="minimize" name="minimize" assertions="2" time="0.731">
</testcase> </testcase>
<testcase classname="requestAttention" name="requestAttention" assertions="0" time="0.003"> <testcase classname="requestAttention" name="requestAttention" assertions="0" time="0.011">
<skipped message="cant test this worked" /> <skipped message="cant test this worked" />
</testcase> </testcase>
<testcase classname="restore" name="restore" assertions="1" time="0.882"> <testcase classname="restore" name="restore" assertions="1" time="0.883">
</testcase> </testcase>
<testcase classname="setDisplaySleepEnabled" name="setDisplaySleepEnabled" assertions="2" time="0.018"> <testcase classname="setDisplaySleepEnabled" name="setDisplaySleepEnabled" assertions="2" time="0.018">
</testcase> </testcase>
<testcase classname="setFullscreen" name="setFullscreen" assertions="2" time="1.313"> <testcase classname="setFullscreen" name="setFullscreen" assertions="2" time="1.339">
</testcase> </testcase>
<testcase classname="setIcon" name="setIcon" assertions="1" time="0.017"> <testcase classname="setIcon" name="setIcon" assertions="1" time="0.016">
</testcase> </testcase>
<testcase classname="setMode" name="setMode" assertions="4" time="0.022"> <testcase classname="setMode" name="setMode" assertions="4" time="0.022">
</testcase> </testcase>
<testcase classname="setPosition" name="setPosition" assertions="2" time="0.179"> <testcase classname="setPosition" name="setPosition" assertions="2" time="0.179">
</testcase> </testcase>
<testcase classname="setTitle" name="setTitle" assertions="1" time="0.021"> <testcase classname="setTitle" name="setTitle" assertions="1" time="0.018">
</testcase> </testcase>
<testcase classname="setVSync" name="setVSync" assertions="1" time="0.017"> <testcase classname="setVSync" name="setVSync" assertions="1" time="0.016">
</testcase> </testcase>
<testcase classname="showMessageBox" name="showMessageBox" assertions="0" time="0.003"> <testcase classname="showMessageBox" name="showMessageBox" assertions="0" time="0.002">
<skipped message="cant test this worked" /> <skipped message="cant test this worked" />
</testcase> </testcase>
<testcase classname="toPixels" name="toPixels" assertions="1" time="0.002"> <testcase classname="toPixels" name="toPixels" assertions="1" time="0.002">
</testcase> </testcase>
<testcase classname="updateMode" name="updateMode" assertions="4" time="0.007"> <testcase classname="updateMode" name="updateMode" assertions="4" time="0.011">
</testcase> </testcase>
</testsuite> </testsuite>
</testsuites> </testsuites>
Binary file not shown.

After

Width:  |  Height:  |  Size: 96 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 B

Before

Width:  |  Height:  |  Size: 107 B

After

Width:  |  Height:  |  Size: 107 B

+11 -13
View File
@@ -26,10 +26,10 @@ This is the status of all module tests currently.
| 🟢 event | 4 | 0 | 2 | | 🟢 event | 4 | 0 | 2 |
| 🟢 filesystem | 29 | 0 | 2 | | 🟢 filesystem | 29 | 0 | 2 |
| 🟢 font | 7 | 0 | 0 | | 🟢 font | 7 | 0 | 0 |
| 🟡 graphics | 99 | 5 | 1 | | 🟡 graphics | 102 | 2 | 1 |
| 🟢 image | 5 | 0 | 0 | | 🟢 image | 5 | 0 | 0 |
| 🟢 math | 20 | 0 | 0 | | 🟢 math | 20 | 0 | 0 |
| 🟡 physics | 22 | 6 | 0 | | 🟡 physics | 22 | 4 | 0 |
| 🟢 sound | 4 | 0 | 0 | | 🟢 sound | 4 | 0 | 0 |
| 🟢 system | 6 | 0 | 2 | | 🟢 system | 6 | 0 | 2 |
| 🟢 thread | 5 | 0 | 0 | | 🟢 thread | 5 | 0 | 0 |
@@ -60,7 +60,7 @@ All results will be printed in the console per method as PASS, FAIL, or SKIP wit
When finished, the following files will be generated in the `/output` directory with a summary of the test results: When finished, the following files will be generated in the `/output` directory with a summary of the test results:
- an `XML` file in the style of [JUnit XML](https://www.ibm.com/docs/en/developer-for-zos/14.1?topic=formats-junit-xml-format) - an `XML` file in the style of [JUnit XML](https://www.ibm.com/docs/en/developer-for-zos/14.1?topic=formats-junit-xml-format)
- a `HTML` file that shows any visual test results - a `HTML` file that shows the report + any visual test results
- a `Markdown` file you can use with [this github action](https://github.com/ellraiser/love-test-report) - a `Markdown` file you can use with [this github action](https://github.com/ellraiser/love-test-report)
> An example of all types of output can be found in the `/examples` > An example of all types of output can be found in the `/examples`
> The visual results of any graphic tests can be found in `/output/actual` > The visual results of any graphic tests can be found in `/output/actual`
@@ -110,15 +110,13 @@ For sanity-checking, if it's currently not covered or it's not possible to test
--- ---
## Todo ## Todo
Things still left to do: Test classes that still need to be written:
- [ ] physics.Body, physics.Contact, physics.Fixture, - [ ] graphics.Mesh
physics.Joint, physics.Shape, physics.World - [ ] graphics.ParticleSystem
- [ ] @deprecated physics methods (sasha changes) - [ ] physics.Body
- [ ] graphics.Mesh, graphics.ParticleSystem - [ ] physics.Contact
graphics.SpriteBatch, graphics.Video - [ ] physics.Joint
- [ ] graphics.drawInstanced - [ ] physics.Shape
- [ ] @deprecated love.graphics.stencil (replaced by love.graphics.setStencilMode)
- [ ] @deprecated love.graphics.setStencilTest (replaced by love.graphics.setStencilMode)
--- ---
@@ -129,4 +127,4 @@ Things still left to do:
use in the report output comparisons, so we just need to add a helper method use in the report output comparisons, so we just need to add a helper method
to the test class to let you just do assertMatching on the imgdata to the test class to let you just do assertMatching on the imgdata
- [ ] Ability to test loading different combinations of modules - [ ] Ability to test loading different combinations of modules
- [ ] Performance tests - [ ] Performance tests
+210 -16
View File
@@ -60,10 +60,11 @@ love.test.graphics.Canvas = function(test)
test:assertEquals('linear', mode, 'check def minmap filter mode') test:assertEquals('linear', mode, 'check def minmap filter mode')
test:assertEquals(0, sharpness, 'check def minmap filter sharpness') test:assertEquals(0, sharpness, 'check def minmap filter sharpness')
local name, version, vendor, device = love.graphics.getRendererInfo() local name, version, vendor, device = love.graphics.getRendererInfo()
canvas:setMipmapFilter('nearest', 1)
mode, sharpness = canvas:getMipmapFilter()
test:assertEquals('nearest', mode, 'check changed minmap filter mode')
-- mipmap sharpness wont work on opengl/metal
if string.match(name, 'OpenGL ES') == nil and string.match(name, 'Metal') == nil then if string.match(name, 'OpenGL ES') == nil and string.match(name, 'Metal') == nil then
canvas:setMipmapFilter('nearest', 1)
mode, sharpness = canvas:getMipmapFilter()
test:assertEquals('nearest', mode, 'check changed minmap filter mode')
test:assertEquals(1, sharpness, 'check changed minmap filter sharpness') test:assertEquals(1, sharpness, 'check changed minmap filter sharpness')
end end
test:assertGreaterEqual(2, canvas:getMipmapCount()) -- docs say no mipmaps should return 1 test:assertGreaterEqual(2, canvas:getMipmapCount()) -- docs say no mipmaps should return 1
@@ -209,10 +210,11 @@ love.test.graphics.Image = function(test)
test:assertEquals(0, sharpness, 'check def minmap filter sharpness') test:assertEquals(0, sharpness, 'check def minmap filter sharpness')
local name, version, vendor, device = love.graphics.getRendererInfo() local name, version, vendor, device = love.graphics.getRendererInfo()
-- mipmap sharpness wont work on opengl/metal
image:setMipmapFilter('nearest', 1)
mode, sharpness = image:getMipmapFilter()
test:assertEquals('nearest', mode, 'check changed minmap filter mode')
if string.match(name, 'OpenGL ES') == nil and string.match(name, 'Metal') == nil then if string.match(name, 'OpenGL ES') == nil and string.match(name, 'Metal') == nil then
image:setMipmapFilter('nearest', 1)
mode, sharpness = image:getMipmapFilter()
test:assertEquals('nearest', mode, 'check changed minmap filter mode')
test:assertEquals(1, sharpness, 'check changed minmap filter sharpness') test:assertEquals(1, sharpness, 'check changed minmap filter sharpness')
end end
test:assertGreaterEqual(2, image:getMipmapCount()) -- docs say no mipmaps should return 1 test:assertGreaterEqual(2, image:getMipmapCount()) -- docs say no mipmaps should return 1
@@ -351,7 +353,133 @@ end
-- SpriteBatch (love.graphics.newSpriteBatch) -- SpriteBatch (love.graphics.newSpriteBatch)
love.test.graphics.SpriteBatch = function(test) love.test.graphics.SpriteBatch = function(test)
test:skipTest('test class needs writing') -- create batch
local texture1 = love.graphics.newImage('resources/cubemap.png')
local texture2 = love.graphics.newImage('resources/love.png')
local quad1 = love.graphics.newQuad(32, 12, 1, 1, texture2) -- lovepink
local quad2 = love.graphics.newQuad(32, 32, 1, 1, texture2) -- white
local sbatch = love.graphics.newSpriteBatch(texture1, 5000)
test:assertObject(sbatch)
-- check basic props
test:assertEquals(0, sbatch:getCount(), 'check batch size')
test:assertEquals(5000, sbatch:getBufferSize(), 'check batch size')
test:assertEquals(texture1:getWidth(), sbatch:getTexture():getWidth(), 'check texture match w')
test:assertEquals(texture1:getHeight(), sbatch:getTexture():getHeight(), 'check texture match h')
sbatch:setTexture(texture2)
test:assertEquals(texture2:getWidth(), sbatch:getTexture():getWidth(), 'check texture change w')
test:assertEquals(texture2:getHeight(), sbatch:getTexture():getHeight(), 'check texture change h')
local r, g, b, a = sbatch:getColor()
test:assertEquals(1, r, 'check initial color r')
test:assertEquals(1, g, 'check initial color g')
test:assertEquals(1, b, 'check initial color b')
test:assertEquals(1, a, 'check initial color a')
sbatch:setColor(1, 0, 0, 1)
r, g, b, a = sbatch:getColor()
test:assertEquals(1, r, 'check set color r')
test:assertEquals(0, g, 'check set color g')
test:assertEquals(0, b, 'check set color b')
test:assertEquals(1, a, 'check set color a')
-- check adding sprites
local offset_x = 0
local offset_y = 0
local color = 'white'
sbatch:setColor(1, 1, 1, 1)
local sprites = {}
for s=1,4096 do
local spr = sbatch:add(quad1, offset_x, offset_y, 0, 1, 1)
table.insert(sprites, {spr, offset_x, offset_y})
offset_x = offset_x + 1
if s % 64 == 0 then
-- alternate row colors
if color == 'white' then
color = 'red'
sbatch:setColor(1, 0, 0, 1)
else
color = 'white'
sbatch:setColor(1, 1, 1, 1)
end
offset_y = offset_y + 1
offset_x = 0
end
end
test:assertEquals(4096, sbatch:getCount())
-- test drawing and setting
local canvas = love.graphics.newCanvas(64, 64)
love.graphics.setCanvas(canvas)
love.graphics.clear(0, 0, 0, 1)
love.graphics.draw(sbatch, 0, 0)
love.graphics.setCanvas()
local imgdata1 = love.graphics.readbackTexture(canvas, {64, 0, 0, 0, 64, 64})
test:assertPixels(imgdata1, {
lovepink = {{0,0},{63,2},{0,32},{63,32},{63,0},{63,2}}
}, 'sbatch draw normal')
test:exportImg(imgdata1)
-- use set to change some sprites
for s=1,2048 do
sbatch:set(sprites[s][1], quad2, sprites[s][2], sprites[s][3]+1, 0, 1, 1)
end
love.graphics.setCanvas(canvas)
love.graphics.clear(0, 0, 0, 1)
love.graphics.draw(sbatch, 0, 0)
love.graphics.setCanvas()
local imgdata2 = love.graphics.readbackTexture(canvas, {64, 0, 0, 0, 64, 64})
test:assertPixels(imgdata2, {
lovepink = {{0,32},{63,32}},
black = {{0,0},{63,0}},
white = {{0,1},{63,1},{0,31},{63,31}}
}, 'sbatch draw set')
test:exportImg(imgdata2)
-- set drawRange and redraw
sbatch:setDrawRange(1025, 2048)
love.graphics.setCanvas(canvas)
love.graphics.clear(0, 0, 0, 1)
love.graphics.draw(sbatch, 0, 0)
love.graphics.setCanvas()
local imgdata3 = love.graphics.readbackTexture(canvas, {64, 0, 0, 0, 64, 64})
test:assertPixels(imgdata3, {
lovepink = {{0,32},{63,32}},
black = {{0,0},{63,0},{0,48},{63,48}},
white = {{0,17},{63,17},{0,31},{63,31}}
}, 'sbatch draw drawrange')
test:exportImg(imgdata3)
-- clear and redraw
sbatch:clear()
love.graphics.setCanvas(canvas)
love.graphics.clear(0, 0, 0, 1)
love.graphics.draw(sbatch, 0, 0)
love.graphics.setCanvas()
local imgdata4 = love.graphics.readbackTexture(canvas, {64, 0, 0, 0, 64, 64})
test:assertPixels(imgdata4, {
black = {{0,0},{63,0},{0,32},{63,32},{0,63},{63,63}},
}, 'sbatch draw clear')
test:exportImg(imgdata4)
-- array texture sbatch
local texture3 = love.graphics.newArrayImage({
'resources/love.png',
'resources/loveinv.png'
})
local asbatch = love.graphics.newSpriteBatch(texture3, 4096)
local quad3 = love.graphics.newQuad(32, 52, 1, 1, texture3) -- loveblue
sprites = {}
for s=1,4096 do
local spr = asbatch:addLayer(1, quad3, 0, s, math.floor(s/64), 1, 1)
table.insert(sprites, {spr, s, math.floor(s/64)})
end
test:assertEquals(4096, asbatch:getCount(), 'check max batch size applies')
for s=1,2048 do
asbatch:setLayer(sprites[s][1], 2, sprites[s][2], sprites[s][3], 0, 1, 1)
end
love.graphics.setCanvas(canvas)
love.graphics.clear(0, 0, 0, 1)
love.graphics.draw(asbatch, 0, 0)
love.graphics.setCanvas()
local imgdata5 = love.graphics.readbackTexture(canvas, {64, 0, 0, 0, 64, 64})
test:assertPixels(imgdata5, {
loveblue = {{31,2},{63,2},{3,30},{3,33},{16,47},{63,47}},
lovepink = {{17,48},{63,48},{31,61},{63,61}},
black = {{0,0},{63,0},{63,63},{63,0},{30,2},{30,61}},
}, 'sbatch draw layers')
test:exportImg(imgdata5)
end end
@@ -396,7 +524,54 @@ end
-- Video (love.graphics.newVideo) -- Video (love.graphics.newVideo)
love.test.graphics.Video = function(test) love.test.graphics.Video = function(test)
test:skipTest('test class needs writing') -- create video
local video = love.graphics.newVideo('resources/sample.ogv')
test:assertObject(video)
-- check basic props
local w, h = video:getDimensions()
test:assertEquals(496, w, 'check vid dim w')
test:assertEquals(502, h, 'check vid dim h')
test:assertEquals(w, video:getWidth(), 'check vid width match')
test:assertEquals(h, video:getHeight(), 'check vid height match')
local min, mag, ani = video:getFilter()
test:assertEquals('nearest', min, 'check def filter min')
test:assertEquals('nearest', mag, 'check def filter mag')
test:assertEquals(1, ani, 'check def filter ani')
video:setFilter('linear', 'linear', 2)
min, mag, ani = video:getFilter()
test:assertEquals('linear', min, 'check changed filter min')
test:assertEquals('linear', mag, 'check changed filter mag')
test:assertEquals(2, ani, 'check changed filter ani')
test:assertEquals(false, video:isPlaying(), 'check paused by default')
test:assertEquals(0, video:tell(), 'check 0:00 by default')
-- covered by their own obj tests in video but check returns obj
local source = video:getSource()
test:assertObject(source)
local stream = video:getStream()
test:assertObject(stream)
-- check playing / pausing / seeking
video:play()
test:waitFrames(60)
video:pause()
test:assertEquals(1, math.ceil(video:tell()), 'check video playing for 1s')
video:seek(0.2)
test:assertEquals(0.2, video:tell(), 'check video seeking')
video:rewind()
test:assertEquals(0, video:tell(), 'check video rewind')
video:setFilter('nearest', 'nearest', 1)
video:play()
-- check actuall drawing with the vid
local canvas = love.graphics.newCanvas(500, 500)
love.graphics.setCanvas(canvas)
love.graphics.clear(1, 0, 0, 1)
love.graphics.draw(video, 0, 0)
love.graphics.setCanvas()
local imgdata = love.graphics.readbackTexture(canvas, {500, 0, 0, 0, 500, 500})
test:assertPixels(imgdata, {
black = {{0,0},{495,0},{495,499},{0,499}},
red = {{499,0},{499,499}}
}, 'video draw')
test:exportImg(imgdata)
end end
@@ -560,7 +735,27 @@ end
-- love.graphics.drawInstanced -- love.graphics.drawInstanced
love.test.graphics.drawInstanced = function(test) love.test.graphics.drawInstanced = function(test)
test:skipTest('test class needs writing') local image = love.graphics.newImage('resources/love.png')
local vertices = {
{ 0, 0, 0, 0, 1, 0, 0 },
{ image:getWidth(), 0, 1, 0, 0, 1, 0 },
{ image:getWidth(), image:getHeight(), 1, 1, 0, 0, 1 },
{ 0, image:getHeight(), 0, 1, 1, 1, 0 },
}
local mesh = love.graphics.newMesh(vertices, 'fan')
local canvas = love.graphics.newCanvas(64, 64)
love.graphics.setCanvas(canvas)
love.graphics.clear(0, 0, 0, 1)
love.graphics.drawInstanced(mesh, 1000, 0, 0, 0, 1, 1)
love.graphics.setCanvas()
local imgdata = love.graphics.readbackTexture(canvas, {64, 0, 0, 0, 64, 64})
test:assertPixels(imgdata, {
red = {{0,0}},
green = {{63,0}},
blue = {{63,63}},
yellow = {{0,63}}
}, 'draw instances')
test:exportImg(imgdata)
end end
@@ -1648,19 +1843,18 @@ love.test.graphics.setShader = function(test)
end end
-- love.graphics.setStencilTest -- love.graphics.setStencilMode
love.test.graphics.setStencilTest = function(test) love.test.graphics.setStencilMode = function(test)
local canvas = love.graphics.newCanvas(16, 16) local canvas = love.graphics.newCanvas(16, 16)
love.graphics.setCanvas({canvas, stencil=true}) love.graphics.setCanvas({canvas, stencil=true})
love.graphics.clear(0, 0, 0, 1) love.graphics.clear(0, 0, 0, 1)
love.graphics.stencil(function() love.graphics.setStencilMode('replace', 'always', 1)
love.graphics.circle('fill', 8, 8, 6) love.graphics.circle('fill', 8, 8, 6)
end, 'replace', 1) love.graphics.setStencilMode('keep', 'greater', 0)
love.graphics.setStencilTest('greater', 0)
love.graphics.setColor(1, 0, 0, 1) love.graphics.setColor(1, 0, 0, 1)
love.graphics.rectangle('fill', 0, 0, 16, 16) love.graphics.rectangle('fill', 0, 0, 16, 16)
love.graphics.setColor(1, 1, 1, 1) love.graphics.setColor(1, 1, 1, 1)
love.graphics.setStencilTest() love.graphics.setStencilMode()
love.graphics.setCanvas() love.graphics.setCanvas()
local imgdata = love.graphics.readbackTexture(canvas, {16, 0, 0, 0, 16, 16}) local imgdata = love.graphics.readbackTexture(canvas, {16, 0, 0, 0, 16, 16})
test:assertPixels(imgdata, { test:assertPixels(imgdata, {
+93 -27
View File
@@ -20,12 +20,6 @@ love.test.physics.Contact = function(test)
end end
-- Fixture (love.physics.newFixture)
love.test.physics.Fixture = function(test)
test:skipTest('test class needs writing')
end
-- Joint (love.physics.newDistanceJoint) -- Joint (love.physics.newDistanceJoint)
love.test.physics.Joint = function(test) love.test.physics.Joint = function(test)
test:skipTest('test class needs writing') test:skipTest('test class needs writing')
@@ -33,6 +27,7 @@ end
-- Shape (love.physics.newCircleShape) -- Shape (love.physics.newCircleShape)
-- @NOTE includes Fixture methods too enjoy
love.test.physics.Shape = function(test) love.test.physics.Shape = function(test)
test:skipTest('test class needs writing') test:skipTest('test class needs writing')
end end
@@ -40,7 +35,81 @@ end
-- World (love.physics.newWorld) -- World (love.physics.newWorld)
love.test.physics.World = function(test) love.test.physics.World = function(test)
test:skipTest('test class needs writing') -- create new world
local world = love.physics.newWorld(0, 0, false)
local body1 = love.physics.newBody(world, 0, 0, 'dynamic')
local rectangle1 = love.physics.newRectangleShape(body1, 0, 0, 10, 10)
test:assertObject(world)
-- check defaults
test:assertEquals(1, #world:getBodies(), 'check 1 body')
test:assertEquals(0, world:getBodies()[1]:getX(), 'check body prop x')
test:assertEquals(0, world:getBodies()[1]:getY(), 'check body prop y')
world:translateOrigin(-10, -10)
test:assertEquals(10, world:getBodies()[1]:getX(), 'check body prop change x')
test:assertEquals(10, world:getBodies()[1]:getY(), 'check body prop change y')
test:assertEquals(1, world:getBodyCount(), 'check 1 body count')
test:assertEquals(false, world:isDestroyed(), 'check not destroyed')
test:assertEquals(false, world:isLocked(), 'check not updating')
test:assertEquals(0, #world:getJoints(), 'check no joints')
test:assertEquals(0, world:getJointCount(), 'check no joints count')
test:assertEquals(0, world:getGravity(), 'check def gravity')
test:assertEquals(0, #world:getContacts(), 'check no contacts')
test:assertEquals(0, world:getContactCount(), 'check no contact count')
test:assertEquals(false, world:isSleepingAllowed(), 'check no sleep (till brooklyn)')
world:setSleepingAllowed(true)
test:assertEquals(true, world:isSleepingAllowed(), 'check can sleep')
-- check callbacks are called
local beginContact, endContact, preSolve, postSolve = world:getCallbacks()
test:assertEquals(nil, beginContact, 'check no begin contact callback')
test:assertEquals(nil, endContact, 'check no end contact callback')
test:assertEquals(nil, preSolve, 'check no pre solve callback')
test:assertEquals(nil, postSolve, 'check no post solve callback')
local beginContactCheck = false
local endContactCheck = false
local preSolveCheck = false
local postSolveCheck = false
local collisions = 0
world:setCallbacks(
function() beginContactCheck = true; collisions = collisions + 1 end,
function() endContactCheck = true end,
function() preSolveCheck = true end,
function() postSolveCheck = true end
)
local body2 = love.physics.newBody(world, 10, 10, 'dynamic')
local rectangle2 = love.physics.newRectangleShape(body2, 0, 0, 10, 10)
test:assertEquals(false, beginContactCheck, 'check world didnt update after adding body')
world:update(1)
test:assertEquals(true, beginContactCheck, 'check contact start')
test:assertEquals(true, preSolveCheck, 'check pre solve')
test:assertEquals(true, postSolveCheck, 'check post solve')
body2:setPosition(100, 100)
world:update(1)
test:assertEquals(true, endContactCheck, 'check contact end')
-- check point checking
local shapes = 0
world:queryShapesInArea(0, 0, 10, 10, function(x)
shapes = shapes + 1
end)
test:assertEquals(1, shapes, 'check shapes in area')
world:rayCast(0, 0, 200, 200, function(x)
shapes = shapes + 1
return 1
end)
test:assertEquals(3, shapes, 'check shapes in raycast')
-- change collision logic
test:assertEquals(nil, world:getContactFilter(), 'check def filter')
world:update(1)
world:setContactFilter(function(s1, s2)
return false -- nothing collides
end)
body2:setPosition(10, 10)
world:update(1)
test:assertEquals(1, collisions, 'check collision logic change')
-- final bits
world:setGravity(1, 1)
test:assertEquals(1, world:getGravity(), 'check grav change')
world:destroy()
test:assertEquals(true, world:isDestroyed(), 'check world destroyed')
end end
@@ -54,14 +123,12 @@ end
-- love.physics.getDistance -- love.physics.getDistance
love.test.physics.getDistance = function(test) love.test.physics.getDistance = function(test)
-- setup two fixtues to check -- setup two fixtues to check
local shape1 = love.physics.newEdgeShape(0, 0, 5, 5)
local shape2 = love.physics.newEdgeShape(10, 10, 15, 15)
local world = love.physics.newWorld(0, 0, false) local world = love.physics.newWorld(0, 0, false)
local body = love.physics.newBody(world, 10, 10, 'static') local body = love.physics.newBody(world, 10, 10, 'static')
local fixture1 = love.physics.newFixture(body, shape1, 1) local shape1 = love.physics.newEdgeShape(body, 0, 0, 5, 5)
local fixture2 = love.physics.newFixture(body, shape2, 1) local shape2 = love.physics.newEdgeShape(body, 10, 10, 15, 15)
-- check distance between them -- check distance between them
test:assertEquals(647106, math.floor(love.physics.getDistance(fixture1, fixture2)*100000), 'check distance matches') test:assertEquals(647106, math.floor(love.physics.getDistance(shape1, shape2)*100000), 'check distance matches')
end end
@@ -85,14 +152,18 @@ end
-- love.physics.newChainShape -- love.physics.newChainShape
-- @NOTE this is just basic nil checking, objs have their own test method -- @NOTE this is just basic nil checking, objs have their own test method
love.test.physics.newChainShape = function(test) love.test.physics.newChainShape = function(test)
test:assertObject(love.physics.newChainShape(true, 0, 0, 1, 0, 1, 1, 0, 1)) local world = love.physics.newWorld(1, 1, true)
local body = love.physics.newBody(world, 10, 10, 'static')
test:assertObject(love.physics.newChainShape(body, true, 0, 0, 1, 0, 1, 1, 0, 1))
end end
-- love.physics.newCircleShape -- love.physics.newCircleShape
-- @NOTE this is just basic nil checking, objs have their own test method -- @NOTE this is just basic nil checking, objs have their own test method
love.test.physics.newCircleShape = function(test) love.test.physics.newCircleShape = function(test)
test:assertObject(love.physics.newCircleShape(10)) local world = love.physics.newWorld(1, 1, true)
local body = love.physics.newBody(world, 10, 10, 'static')
test:assertObject(love.physics.newCircleShape(body, 10))
end end
@@ -110,18 +181,9 @@ end
-- love.physics.newEdgeShape -- love.physics.newEdgeShape
-- @NOTE this is just basic nil checking, objs have their own test method -- @NOTE this is just basic nil checking, objs have their own test method
love.test.physics.newEdgeShape = function(test) love.test.physics.newEdgeShape = function(test)
local obj = love.physics.newEdgeShape(0, 0, 10, 10)
test:assertObject(obj)
end
-- love.physics.newFixture
-- @NOTE this is just basic nil checking, objs have their own test method
love.test.physics.newFixture = function(test)
local world = love.physics.newWorld(1, 1, true) local world = love.physics.newWorld(1, 1, true)
local body = love.physics.newBody(world, 10, 10, 'static') local body = love.physics.newBody(world, 10, 10, 'static')
local shape = love.physics.newCircleShape(10) local obj = love.physics.newEdgeShape(body, 0, 0, 10, 10)
local obj = love.physics.newFixture(body, shape, 1)
test:assertObject(obj) test:assertObject(obj)
end end
@@ -176,7 +238,9 @@ end
-- love.physics.newPolygonShape -- love.physics.newPolygonShape
-- @NOTE this is just basic nil checking, objs have their own test method -- @NOTE this is just basic nil checking, objs have their own test method
love.test.physics.newPolygonShape = function(test) love.test.physics.newPolygonShape = function(test)
local obj = love.physics.newPolygonShape({0, 0, 2, 3, 2, 1, 3, 1, 5, 1}) local world = love.physics.newWorld(1, 1, true)
local body = love.physics.newBody(world, 10, 10, 'static')
local obj = love.physics.newPolygonShape(body, {0, 0, 2, 3, 2, 1, 3, 1, 5, 1})
test:assertObject(obj) test:assertObject(obj)
end end
@@ -206,8 +270,10 @@ end
-- love.physics.newRectangleShape -- love.physics.newRectangleShape
-- @NOTE this is just basic nil checking, objs have their own test method -- @NOTE this is just basic nil checking, objs have their own test method
love.test.physics.newRectangleShape = function(test) love.test.physics.newRectangleShape = function(test)
local shape1 = love.physics.newRectangleShape(10, 20) local world = love.physics.newWorld(1, 1, true)
local shape2 = love.physics.newRectangleShape(10, 10, 40, 30, 10) local body = love.physics.newBody(world, 10, 10, 'static')
local shape1 = love.physics.newRectangleShape(body, 10, 20)
local shape2 = love.physics.newRectangleShape(body, 10, 10, 40, 30, 10)
test:assertObject(shape1) test:assertObject(shape1)
test:assertObject(shape2) test:assertObject(shape2)
end end