Forráskód Böngészése

tests: Added Tests for most DirectGuiBase features

Closes #731
fireclawthefox 6 éve
szülő
commit
4d9bfe76f4
1 módosított fájl, 202 hozzáadás és 1 törlés
  1. 202 1
      tests/gui/test_DirectGuiBase.py

+ 202 - 1
tests/gui/test_DirectGuiBase.py

@@ -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")