test_wizard.py 3.67 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
import unittest
from unittests import wtc
import wx
import wx.adv
import os

pngFile = os.path.join(os.path.dirname(__file__), 'wizard.png')

#---------------------------------------------------------------------------

class MySimpleWizPage(wx.adv.WizardPageSimple):
    def __init__(self, parent, title):
        wx.adv.WizardPageSimple.__init__(self, parent)
        st = wx.StaticText(self, label='Wizard Page: %s' % title)
        st.SetFont(wx.FFont(24, wx.FONTFAMILY_SWISS))
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(st, 0, wx.ALIGN_CENTER)
        sizer.Add(wx.StaticLine(self), 0, wx.EXPAND)
        self.SetSizer(sizer)



class wizard_Tests(wtc.WidgetTestCase):

    def test_wizard1(self):
        wx.adv.WIZARD_EX_HELPBUTTON
        wx.adv.WIZARD_VALIGN_TOP
        wx.adv.WIZARD_VALIGN_CENTRE
        wx.adv.WIZARD_VALIGN_BOTTOM
        wx.adv.WIZARD_HALIGN_LEFT
        wx.adv.WIZARD_HALIGN_CENTRE
        wx.adv.WIZARD_HALIGN_RIGHT
        wx.adv.WIZARD_TILE

    def test_wizard2(self):
        # Create the wizard
        bmp = wx.Bitmap(pngFile)
        wiz = wx.adv.Wizard(self.frame, title="Test Wizard 2", bitmap=bmp)

        # create the pages
        pages = []
        for i in range(5):
            pages.append(MySimpleWizPage(wiz, str(i+1)))

        # set the next/prev pages
        for idx, p in enumerate(pages):
            p.SetNext(pages[idx+1] if idx < len(pages)-1 else None)
            p.SetPrev(pages[idx-1] if idx > 0 else None)

        wiz.FitToPage(pages[0])
        wx.CallLater(100, self._autoPilot, wiz)
        wiz.RunWizard(pages[0])
        wiz.Destroy()

    def test_wizard3(self):
        # Same as above but use the Chain function to connect the pages
        bmp = wx.Bitmap(pngFile)
        wiz = wx.adv.Wizard(self.frame, title="Test Wizard 2", bitmap=bmp)

        pages = []
        for i in range(5):
            pages.append(MySimpleWizPage(wiz, str(i+1)))

        wx.adv.WizardPageSimple.Chain(pages[0], pages[1])
        wx.adv.WizardPageSimple.Chain(pages[1], pages[2])
        wx.adv.WizardPageSimple.Chain(pages[2], pages[3])
        wx.adv.WizardPageSimple.Chain(pages[3], pages[4])

        wiz.FitToPage(pages[0])
        wx.CallLater(100, self._autoPilot, wiz)
        wiz.RunWizard(pages[0])
        wiz.Destroy()


    def test_wizard4(self):
        # Create the wizard
        bmp = wx.Bitmap(pngFile)
        wiz = wx.adv.Wizard(self.frame, title="Test Wizard 2", bitmap=bmp)

        # create the pages
        pages = []
        for i in range(5):
            pages.append(MySimpleWizPage(wiz, str(i+1)))

        # set the next/prev pages
        for idx, p in enumerate(pages):
            p.SetNext(pages[idx+1] if idx < len(pages)-1 else None)
            p.SetPrev(pages[idx-1] if idx > 0 else None)

        wiz.FitToPage(pages[0])
        wx.CallLater(100, self._autoPilot, wiz)

        # Simply test if these new methods exist
        wiz.ShowPage(pages[2])
        wiz.IsRunning()

        wiz.RunWizard(pages[0])
        wiz.Destroy()


    def _autoPilot(self, wiz):
        # simulate clicking the next button until the wizard closes
        if not wiz or not wiz.GetCurrentPage():
            return

        # There seems to be a problem with stacking CallLaters while running
        # the unittests, so for now just cancel and return.
        wiz.EndModal(wx.ID_CANCEL)
        return

        #btn = wiz.FindWindowById(wx.ID_FORWARD)
        #evt = wx.CommandEvent(wx.EVT_BUTTON.typeId, wx.ID_FORWARD)
        #evt.SetEventObject(btn)
        #wx.PostEvent(btn, evt)
        #wx.CallLater(100, self._autoPilot, wiz)

#---------------------------------------------------------------------------

if __name__ == '__main__':
    unittest.main()