Files
MementoMori/kivy/tests/test_graphics.py
thatscringebro abd15f28b6 Ajout du GUI
2022-08-08 16:31:52 -04:00

213 lines
5.4 KiB
Python

'''
Graphics tests
==============
Testing the simple vertex instructions
'''
import sys
import pytest
from threading import Thread
from kivy.tests.common import GraphicUnitTest, requires_graphics
class VertexInstructionTest(GraphicUnitTest):
def test_circle(self):
from kivy.uix.widget import Widget
from kivy.graphics import Ellipse, Color
r = self.render
# basic circle
wid = Widget()
with wid.canvas:
Color(1, 1, 1)
Ellipse(pos=(100, 100), size=(100, 100))
r(wid)
# reduced circle
wid = Widget()
with wid.canvas:
Color(1, 1, 1)
Ellipse(pos=(100, 100), size=(100, 100), segments=10)
r(wid)
# moving circle
wid = Widget()
with wid.canvas:
Color(1, 1, 1)
self.e = Ellipse(pos=(100, 100), size=(100, 100))
self.e.pos = (10, 10)
r(wid)
def test_ellipse(self):
from kivy.uix.widget import Widget
from kivy.graphics import Ellipse, Color
r = self.render
# ellipse
wid = Widget()
with wid.canvas:
Color(1, 1, 1)
self.e = Ellipse(pos=(100, 100), size=(200, 100))
r(wid)
def test_point(self):
from kivy.uix.widget import Widget
from kivy.graphics import Point, Color
r = self.render
# 1 point
wid = Widget()
with wid.canvas:
Color(1, 1, 1)
Point(points=(10, 10))
r(wid)
# 25 points
wid = Widget()
with wid.canvas:
Color(1, 1, 1)
Point(points=[x * 5 for x in range(50)])
r(wid)
def test_point_add(self):
from kivy.uix.widget import Widget
from kivy.graphics import Point, Color
r = self.render
wid = Widget()
with wid.canvas:
Color(1, 1, 1)
p = Point(pointsize=10)
p.add_point(10, 10)
p.add_point(90, 10)
p.add_point(10, 90)
p.add_point(50, 50)
p.add_point(10, 50)
p.add_point(50, 10)
r(wid)
class FBOInstructionTestCase(GraphicUnitTest):
def test_fbo_pixels(self):
from kivy.graphics import Fbo, ClearColor, ClearBuffers, Ellipse
fbo = Fbo(size=(512, 512))
with fbo:
ClearColor(0, 0, 0, 1)
ClearBuffers()
Ellipse(pos=(100, 100), size=(100, 100))
fbo.draw()
data = fbo.pixels
fbo.texture.save('results.png')
class TransformationsTestCase(GraphicUnitTest):
def test_identity_creation(self):
from kivy.graphics import LoadIdentity
mat = LoadIdentity()
self.assertTrue(mat.stack)
class CallbackInstructionTest(GraphicUnitTest):
def test_from_kv(self):
from textwrap import dedent
from kivy.lang import Builder
root = Builder.load_string(dedent("""\
Widget:
canvas:
Callback:
callback: lambda __: setattr(self, 'callback_test', 'TEST')
"""))
r = self.render
r(root)
self.assertTrue(root.callback_test == 'TEST')
@pytest.fixture
def widget_verify_thread(request):
from kivy.uix.widget import Widget
from kivy.config import Config
original = Config.get('graphics', 'verify_gl_main_thread')
Config.set('graphics', 'verify_gl_main_thread', request.param)
widget = Widget()
yield widget, request.param
Config.set('graphics', 'verify_gl_main_thread', original)
@requires_graphics
@pytest.mark.parametrize('widget_verify_thread', ['0', '1'], indirect=True)
def test_graphics_main_thread(widget_verify_thread):
from kivy.graphics import Color
widget, verify_thread = widget_verify_thread
with widget.canvas:
color = Color()
color.rgb = .1, .2, .3
@requires_graphics
@pytest.mark.parametrize('widget_verify_thread', ['0', '1'], indirect=True)
def test_create_graphics_second_thread(widget_verify_thread):
from kivy.graphics import Color
widget, verify_thread = widget_verify_thread
exception = None
def callback():
nonlocal exception
try:
with widget.canvas:
if verify_thread == '1':
with pytest.raises(TypeError):
Color()
else:
Color()
except BaseException as e:
exception = e, sys.exc_info()[2]
raise
thread = Thread(target=callback)
thread.start()
thread.join()
if exception is not None:
raise exception[0].with_traceback(exception[1])
@requires_graphics
@pytest.mark.parametrize('widget_verify_thread', ['0', '1'], indirect=True)
def test_change_graphics_second_thread(widget_verify_thread):
from kivy.graphics import Color
widget, verify_thread = widget_verify_thread
with widget.canvas:
color = Color()
exception = None
def callback():
nonlocal exception
try:
if verify_thread == '1':
with pytest.raises(TypeError):
color.rgb = .1, .2, .3
else:
color.rgb = .1, .2, .3
except BaseException as e:
exception = e, sys.exc_info()[2]
raise
thread = Thread(target=callback)
thread.start()
thread.join()
if exception is not None:
raise exception[0].with_traceback(exception[1])