Files
Phoenix/unittests/test_dcDrawLists.py
Ben Greiner 3b042c863f integer division for randint
Python 3.12 does not accept floats for random.randint() anymore
2024-01-06 21:58:29 +01:00

279 lines
6.9 KiB
Python

import unittest
from unittests import wtc
import wx
import random
try:
import numpy as np
haveNumpy = True
except ImportError:
haveNumpy = False
#---------------------------------------------------------------------------
w = 600
h = 400
num = 500
colornames = ["BLACK",
"BLUE",
"BLUE VIOLET",
"BROWN",
"CYAN",
"DARK GREY",
"DARK GREEN",
"GOLD",
"GREY",
"GREEN",
"MAGENTA",
"NAVY",
"PINK",
"RED",
"SKY BLUE",
"VIOLET",
"YELLOW",
]
pencache = {}
brushcache = {}
def makeRandomPoints():
pnts = []
for i in range(num):
x = random.randint(0, w)
y = random.randint(0, h)
pnts.append( (x,y) )
return pnts
def makeRandomLines():
lines = []
for i in range(num):
x1 = random.randint(0, w)
y1 = random.randint(0, h)
x2 = random.randint(0, w)
y2 = random.randint(0, h)
lines.append( (x1,y1, x2,y2) )
return lines
def makeRandomRectangles():
rects = []
for i in range(num):
W = random.randint(10, w//2)
H = random.randint(10, h//2)
x = random.randint(0, w - W)
y = random.randint(0, h - H)
rects.append( (x, y, W, H) )
return rects
def makeRandomPolygons():
Np = 8 # number of points per polygon
polys = []
for i in range(num):
poly = []
for i in range(Np):
x = random.randint(0, w)
y = random.randint(0, h)
poly.append( (x,y) )
polys.append( poly )
return polys
def makeRandomText():
Np = 8 # number of characters in text
text = []
for i in range(num):
word = []
for i in range(Np):
c = chr( random.randint(48, 122) )
word.append( c )
text.append( "".join(word) )
return text
def makeRandomColors():
colors = []
for i in range(num):
c = random.choice(colornames)
colors.append(wx.Colour(c))
return colors
def makeRandomPens():
pens = []
for i in range(num):
c = random.choice(colornames)
t = random.randint(1, 4)
if (c,t) not in pencache:
pencache[(c, t)] = wx.Pen(c, t)
pens.append( pencache[(c, t)] )
return pens
def makeRandomBrushes():
brushes = []
for i in range(num):
c = random.choice(colornames)
if c not in brushcache:
brushcache[c] = wx.Brush(c)
brushes.append( brushcache[c] )
return brushes
#---------------------------------------------------------------------------
class dcDrawLists_Tests(wtc.WidgetTestCase):
def test_dcDrawPointLists(self):
pnl = wx.Panel(self.frame)
self.frame.SetSize((w,h))
dc = wx.ClientDC(pnl)
dc.SetPen(wx.Pen("BLACK", 1))
pens = makeRandomPens()
dc.DrawPointList(makeRandomPoints())
dc.DrawPointList(makeRandomPoints(), wx.Pen("RED", 1))
dc.DrawPointList(makeRandomPoints(), pens)
del dc
@unittest.skipIf(not haveNumpy, "Numpy required for this test")
def test_dcDrawPointArray(self):
pnl = wx.Panel(self.frame)
self.frame.SetSize((w,h))
dc = wx.ClientDC(pnl)
dc.SetPen(wx.Pen("BLACK", 1))
pens = makeRandomPens()
dc.DrawPointList(np.array(makeRandomPoints()))
dc.DrawPointList(np.array(makeRandomPoints()), wx.Pen("RED", 1))
dc.DrawPointList(np.array(makeRandomPoints()), pens)
del dc
def test_dcDrawLineLists(self):
pnl = wx.Panel(self.frame)
self.frame.SetSize((w,h))
dc = wx.ClientDC(pnl)
dc.SetPen(wx.Pen("BLACK", 1))
pens = makeRandomPens()
dc.DrawLineList(makeRandomLines())
dc.DrawLineList(makeRandomLines(), wx.Pen("RED", 2))
dc.DrawLineList(makeRandomLines(), pens)
del dc
def test_dcDrawRectangleLists(self):
pnl = wx.Panel(self.frame)
self.frame.SetSize((w,h))
dc = wx.ClientDC(pnl)
dc.SetPen(wx.Pen("BLACK", 1))
dc.SetBrush( wx.Brush("RED") )
pens = makeRandomPens()
brushes = makeRandomBrushes()
dc.DrawRectangleList(makeRandomRectangles())
dc.DrawRectangleList(makeRandomRectangles(),pens)
dc.DrawRectangleList(makeRandomRectangles(),pens[0],brushes)
dc.DrawRectangleList(makeRandomRectangles(),pens,brushes[0])
dc.DrawRectangleList(makeRandomRectangles(),None,brushes)
del dc
@unittest.skipIf(not haveNumpy, "Numpy required for this test")
def test_dcDrawRectangleArray(self):
pnl = wx.Panel(self.frame)
self.frame.SetSize((w,h))
dc = wx.ClientDC(pnl)
dc.SetPen(wx.Pen("BLACK", 1))
dc.SetBrush( wx.Brush("RED") )
pens = makeRandomPens()
brushes = makeRandomBrushes()
dc.DrawRectangleList(np.array(makeRandomRectangles()))
dc.DrawRectangleList(np.array(makeRandomRectangles()),pens)
dc.DrawRectangleList(np.array(makeRandomRectangles()),pens[0],brushes)
dc.DrawRectangleList(np.array(makeRandomRectangles()),pens,brushes[0])
dc.DrawRectangleList(np.array(makeRandomRectangles()),None,brushes)
del dc
def test_dcDrawElipseLists(self):
pnl = wx.Panel(self.frame)
self.frame.SetSize((w,h))
dc = wx.ClientDC(pnl)
dc.SetPen(wx.Pen("BLACK", 1))
dc.SetBrush( wx.Brush("RED") )
pens = makeRandomPens()
brushes = makeRandomBrushes()
dc.DrawEllipseList(makeRandomRectangles())
dc.DrawEllipseList(makeRandomRectangles(),pens)
dc.DrawEllipseList(makeRandomRectangles(),pens[0],brushes)
dc.DrawEllipseList(makeRandomRectangles(),pens,brushes[0])
dc.DrawEllipseList(makeRandomRectangles(),None,brushes)
del dc
def test_dcDrawPloygonLists(self):
pnl = wx.Panel(self.frame)
self.frame.SetSize((w,h))
dc = wx.ClientDC(pnl)
dc.SetPen(wx.Pen("BLACK", 1))
dc.SetBrush( wx.Brush("RED") )
pens = makeRandomPens()
brushes = makeRandomBrushes()
polygons = makeRandomPolygons()
dc.DrawPolygonList(polygons)
dc.DrawPolygonList(polygons, pens)
dc.DrawPolygonList(polygons, pens[0],brushes)
dc.DrawPolygonList(polygons, pens,brushes[0])
dc.DrawPolygonList(polygons, None,brushes)
del dc
def test_dcDrawTextLists(self):
pnl = wx.Panel(self.frame)
self.frame.SetSize((w,h))
dc = wx.ClientDC(pnl)
dc.SetBackgroundMode(wx.SOLID)
points = makeRandomPoints()
fore = makeRandomColors()
back = makeRandomColors()
texts = makeRandomText()
dc.DrawTextList(texts, points, fore, back)
del dc
#---------------------------------------------------------------------------
if __name__ == '__main__':
unittest.main()