tests: Added Tests for most DirectGuiBase features

Closes #731
This commit is contained in:
fireclawthefox 2019-09-03 22:10:54 +02:00 committed by rdb
parent 2c42cfcc1a
commit 4d9bfe76f4

View File

@ -1,10 +1,211 @@
from direct.gui.DirectGuiBase import DirectGuiWidget
from direct.gui.DirectGuiBase import DirectGuiBase, DirectGuiWidget, toggleGuiGridSnap, setGuiGridSpacing
from direct.gui.OnscreenText import OnscreenText
from direct.gui import DirectGuiGlobals as DGG
from direct.showbase.ShowBase import ShowBase
from direct.showbase import ShowBaseGlobal
from direct.showbase.MessengerGlobal import messenger
from panda3d import core
import pytest
def test_create_DirectGuiBase():
baseitem = DirectGuiBase()
def test_defineoptions():
baseitem = DirectGuiBase()
testoptiondefs = (('test',0,None),)
baseitem.defineoptions({}, testoptiondefs)
assert baseitem['test'] == 0
def test_addoptions():
baseitem = DirectGuiBase()
testoptiondefs = (('test',0,None),)
# Those two will usually be set in the defineoptions function
baseitem._optionInfo = {}
baseitem._constructorKeywords = {}
baseitem.addoptions(testoptiondefs, {})
assert baseitem['test'] == 0
def test_initialiseoptions():
baseitem = DirectGuiBase()
class testWidget(DirectGuiBase):
def __init__(self):
pass
tw = testWidget()
baseitem.initialiseoptions(tw)
testoptiondefs = (('test',0,None),)
tw.defineoptions({}, testoptiondefs)
baseitem.initialiseoptions(tw)
assert tw['test'] == 0
def test_postInitialiseFunc():
baseitem = DirectGuiBase()
def func_a():
global test_value_a
test_value_a = 1
def func_b():
global test_value_b
test_value_b = 1
baseitem.postInitialiseFuncList.append(func_a)
baseitem.postInitialiseFuncList.append(func_b)
baseitem.postInitialiseFunc()
global test_value_a
assert test_value_a == 1
global test_value_b
assert test_value_b == 1
def test_isinitoption():
baseitem = DirectGuiBase()
testoptiondefs = (('test-true',0,DGG.INITOPT),('test-false',0,None))
baseitem.defineoptions({}, testoptiondefs)
assert baseitem.isinitoption('test-true') == True
assert baseitem.isinitoption('test-false') == False
def test_options():
baseitem = DirectGuiBase()
testoptiondefs = (('test-1',0,DGG.INITOPT),('test-2',0,None),)
baseitem.defineoptions({}, testoptiondefs)
assert len(baseitem.options()) == 2
def test_get_options():
baseitem = DirectGuiBase()
testoptiondefs = (('test-1',0,None),)
baseitem.defineoptions({}, testoptiondefs)
# Using the configure function
# check if configuration have been set correctly
assert baseitem.configure() == {'test-1': ('test-1', 0, 0),}
# check for specific configurations
assert baseitem.configure('test-1') == ('test-1', 0, 0)
# using index style references __getItem__ and cget
assert baseitem['test-1'] == 0
assert baseitem.cget('test-1') == 0
def test_set_options():
baseitem = DirectGuiBase()
testoptiondefs = (('test-1',0,DGG.INITOPT),('test-2',0,None))
baseitem.defineoptions({}, testoptiondefs)
# try to set a value of an initopt option (shouldn't be possible)
baseitem.configure('test-1', **{'test-1': 1})
# check it's value. It shouldn't have changed
assert baseitem['test-1'] == 0
baseitem['test-1'] = 1
# check it's value. It shouldn't have changed
assert baseitem['test-1'] == 0
# try changing using the configure function. As test-2 isn't an
# initopt option, this should work fine
baseitem.configure('test-2', **{'test-2': 2})
# check it's value. It should be 2 now
assert baseitem['test-2'] == 2
# try changing using index style referencing
baseitem['test-2'] = 1
assert baseitem['test-2'] == 1
def test_component_handling():
baseitem = DirectGuiBase()
testoptiondefs = (('test-1',0,None),)
baseitem.defineoptions({}, testoptiondefs)
assert len(baseitem.components()) == 0
baseitem.createcomponent(
'componentName', # componentName
(), # componentAliases
'componentGroup', # componentGroup
OnscreenText, # widgetClass
(), # *widgetArgs
text = 'Test', # **kw
parent = core.NodePath()
)
# check if we have exactly one component now
assert len(baseitem.components()) == 1
# check if we have a component named like the one we just created
assert baseitem.hascomponent('componentName')
# get our new component
component = baseitem.component('componentName')
# check some of its values
assert component.text == 'Test'
# destroy our recently created component
baseitem.destroycomponent('componentName')
# check if it really is gone
assert baseitem.hascomponent('componentName') == False
def test_destroy():
baseitem = DirectGuiBase()
testoptiondefs = (('test-1',0,None),)
baseitem.defineoptions({}, testoptiondefs)
baseitem.destroy()
# check if things got correctly removed
assert not hasattr(baseitem, '_optionInfo')
assert not hasattr(baseitem, '__componentInfo')
assert not hasattr(baseitem, 'postInitialiseFuncList')
def test_bindings():
baseitem = DirectGuiBase()
# Our test function and variable to check
global commandCalled
commandCalled = False
def command(**kw):
global commandCalled
commandCalled = True
assert True
# Bind an event to our item
baseitem.bind(DGG.B1CLICK, command)
# The function should be called now. Note that the guiId will be
# automatically appended by the bind command!
messenger.send(DGG.B1CLICK + baseitem.guiId)
assert commandCalled
# Try to unbind the event again
baseitem.unbind(DGG.B1CLICK)
# Now it shouldn't be called anymore
commandCalled = False
messenger.send(DGG.B1CLICK + baseitem.guiId)
assert not commandCalled
def test_toggle_snap():
try:
DirectGuiWidget.snapToGrid = 0
item = DirectGuiWidget()
assert item.snapToGrid == 0
toggleGuiGridSnap()
assert item.snapToGrid == 1
finally:
DirectGuiWidget.snapToGrid = 0
def test_toggle_spacing():
try:
DirectGuiWidget.gridSpacing = 0
item = DirectGuiWidget()
setGuiGridSpacing(5)
assert item.gridSpacing == 5
finally:
DirectGuiWidget.gridSpacing = 0.05
@pytest.mark.skipif(not ShowBaseGlobal.__dev__, reason="requires want-dev")
def test_track_gui_items():
page = core.load_prc_file_data("", "track-gui-items true")