Files
Phoenix/unittests/test_dataview.py
Robin Dunn ad25565baa Merge pull request #1080 from swt2c/fix_dataview_test
Fix dataview test on Python 2
(cherry picked from commit d565a3500f)
2018-11-30 14:44:39 -08:00

486 lines
15 KiB
Python

import unittest
from unittests import wtc
import wx
import wx.dataview as dv
import os
import sys
pngFile = os.path.join(os.path.dirname(__file__), 'smile.png')
#---------------------------------------------------------------------------
class dataview_Tests(wtc.WidgetTestCase):
def test_dataviewItem1(self):
dvi = dv.DataViewItem()
self.assertFalse(dvi)
def test_dataviewItem2(self):
dvi = dv.DataViewItem(12345)
self.assertTrue(dvi)
def test_dataviewItem3(self):
dvi1 = dv.DataViewItem(111)
dvi2 = dv.DataViewItem(222)
self.assertTrue(dvi1 != dvi2)
self.assertFalse(dvi1 == dvi2)
def test_dataviewItem4(self):
dvi1 = dv.DataViewItem(111)
dvi2 = dv.DataViewItem(111)
self.assertTrue(dvi1 == dvi2)
self.assertFalse(dvi1 != dvi2)
def test_dataviewItem5(self):
self.assertFalse(dv.NullDataViewItem)
def test_dataviewItem6(self):
dvi1 = dv.DataViewItem(111)
dvi2 = dv.DataViewItem(222)
self.assertTrue(int(dvi1.GetID()) == 111)
self.assertTrue(int(dvi2.ID) == 222)
def test_dataviewItem7(self):
n = sys.maxsize
dvi = dv.DataViewItem(n)
self.assertTrue(dvi)
self.assertTrue(int(dvi.GetID()) == n)
def test_dataviewItem8(self):
dvi = dv.DataViewItem(111)
assert (None == dvi) == False
assert (None != dvi) == True
#-------------------------------------------------------
def test_dataviewItemAttr1(self):
a = dv.DataViewItemAttr()
self.assertTrue(a.IsDefault())
self.assertFalse(a.HasColour())
self.assertFalse(a.HasFont())
self.assertFalse(a.HasBackgroundColour())
def test_dataviewItemAttr2(self):
a = dv.DataViewItemAttr()
a.Colour = wx.BLACK
a.BackgroundColour = wx.WHITE
a.Bold = True
a.Italic = True
self.assertFalse(a.IsDefault())
self.assertTrue(a.HasColour())
self.assertTrue(a.HasBackgroundColour())
self.assertTrue(a.GetBold())
self.assertTrue(a.GetItalic())
#-------------------------------------------------------
def test_dataviewIconText1(self):
dit = dv.DataViewIconText()
icon = wx.Icon(pngFile)
dit.SetIcon(icon)
dit.SetText('Smile!')
def test_dataviewIconText2(self):
icon = wx.Icon(pngFile)
dit = dv.DataViewIconText('Smile!', icon)
dit.Icon
dit.Text
#-------------------------------------------------------
def test_dataviewModelNotifier1(self):
with self.assertRaises(TypeError):
n = dv.DataViewModelNotifier()
def test_dataviewModelNotifier2(self):
class MyNotifier(dv.DataViewModelNotifier):
def Cleared(self): return True
def ItemAdded(self, parent, item): return True
def ItemChanged(self, item): return True
def ItemDeleted(self, parent, item): return True
def ItemsAdded(self, parent, items): return True
def ItemsChanged(self, items): return True
def ItemsDeleted(self, parent, items): return True
def Resort(self): pass
def ValueChanged(self, item, col): return True
n = MyNotifier()
#-------------------------------------------------------
def test_dataviewRenderer01(self):
with self.assertRaises(TypeError):
r = dv.DataViewRenderer()
def test_dataviewRenderer02(self):
# This one can't be subclassed (that's what dv.DataViewCustomRenderer
# is for) so make sure it raises an exception too.
with self.assertRaises(TypeError):
class MyRenderer(dv.DataViewRenderer):
def GetValue(self): return "value"
def SetValue(self, value): return True
r = MyRenderer()
def test_dataviewRenderer03(self):
r = dv.DataViewTextRenderer()
def test_dataviewRenderer04(self):
r = dv.DataViewIconTextRenderer()
def test_dataviewRenderer05(self):
r = dv.DataViewProgressRenderer()
def test_dataviewRenderer06(self):
r = dv.DataViewSpinRenderer(0, 100)
def test_dataviewRenderer07(self):
r = dv.DataViewToggleRenderer()
def test_dataviewRenderer08(self):
r = dv.DataViewDateRenderer()
def test_dataviewRenderer09(self):
r = dv.DataViewBitmapRenderer()
def test_dataviewRenderer10(self):
with self.assertRaises(TypeError):
r = dv.DataViewCustomRenderer()
def test_dataviewRenderer11(self):
class MyCustomRenderer(dv.DataViewCustomRenderer):
def GetValue(self): return "value"
def SetValue(self, value): return True
def GetSize(self): return wx.Size(100, 25)
def Render(self, cell, dc, state): return True
r = MyCustomRenderer()
def test_dataviewRenderer12(self):
r = dv.DataViewChoiceRenderer("one two three".split())
#-------------------------------------------------------
def test_dataviewColumn(self):
r = dv.DataViewIconTextRenderer()
# create
c = dv.DataViewColumn('title', r, 0)
# test that properties exist
c.Title
c.Bitmap
c.Width
c.MinWidth
c.Alignment
c.Flags
c.SortOrder
self.myYield()
#-------------------------------------------------------
def test_dataviewModel1(self):
with self.assertRaises(TypeError):
m = dv.DataViewModel()
def test_dataviewModel2(self):
class MyModel(dv.DataViewModel):
def GetChildren(self, item, children): return 0
def GetColumnCount(self): return 0
def GetColumnType(self, col): return 'string'
def GetParent(self, item): return dv.NullDataViewItem
def GetValue(self, item, col): return 'value'
def IsContainer(self, item) : return False
def SetValue(self, value, item, col): return True
m = MyModel()
#-------------------------------------------------------
def test_dataviewIndexListModel1(self):
with self.assertRaises(TypeError):
m = dv.DataViewIndexListModel()
def test_dataviewIndexListModel2(self):
class MyModel(dv.DataViewIndexListModel):
def GetCount(self): return 0
def GetRow(self, item): return 0
def GetValueByRow(self, row, col): return 'value'
def SetValueByRow(self, value, row, col): return True
m = MyModel()
def test_dataviewVirtualListModel1(self):
with self.assertRaises(TypeError):
m = dv.DataViewVirtualListModel()
def test_dataviewVirtualModel2(self):
class MyModel(dv.DataViewVirtualListModel):
def GetCount(self): return 0
def GetRow(self, item): return 0
def GetValueByRow(self, row, col): return 'value'
def SetValueByRow(self, value, row, col): return True
m = MyModel()
#-------------------------------------------------------
def test_dataviewCtrl1(self):
class MyModel(dv.DataViewIndexListModel):
def GetCount(self):
return 50
def GetColumnCount(self):
return 10
def GetValueByRow(self, row, col):
return 'value(%d, %d)' (row, col)
def SetValueByRow(self, value, row, col):
return True
def GetColumnType(self, col):
return 'string'
dvc = dv.DataViewCtrl(self.frame, style=dv.DV_ROW_LINES|dv.DV_VERT_RULES|dv.DV_MULTIPLE)
model = MyModel()
count1 = model.GetRefCount()
dvc.AssociateModel(model)
count2 = model.GetRefCount()
# The reference count should still be 1 because the model was
# DecRef'ed when it's ownership transfered to C++ in the
# AssociateModel call
self.assertEqual(count2, 1)
self.assertTrue(count2 == count1)
# Now try associating it with another view and check counts again
dvc2 = dv.DataViewCtrl(self.frame, style=dv.DV_ROW_LINES|dv.DV_VERT_RULES|dv.DV_MULTIPLE)
dvc2.AssociateModel(model)
self.assertEqual(model.GetRefCount(), 2)
# Destroying the 2nd view should drop the refcount again
dvc2.Destroy()
self.assertEqual(model.GetRefCount(), 1)
# And since ownership has been transferred, deleting this reference
# to the model should not cause any problems.
del model
dvc.AppendTextColumn("one", 1, width=80, mode=dv.DATAVIEW_CELL_EDITABLE)
dvc.AppendTextColumn("two", 2, width=80, mode=dv.DATAVIEW_CELL_EDITABLE)
dvc.AppendTextColumn("three", 3, width=80, mode=dv.DATAVIEW_CELL_EDITABLE)
dvc.AppendTextColumn("four", 4, width=80, mode=dv.DATAVIEW_CELL_EDITABLE)
dvc.AppendTextColumn("five", 5, width=80, mode=dv.DATAVIEW_CELL_EDITABLE)
self.frame.SendSizeEvent()
dvc.Refresh()
self.myYield()
#-------------------------------------------------------
def test_dataviewListCtrl1(self):
dlc = dv.DataViewListCtrl()
dlc.Create(self.frame)
self.doListCtrlTest(dlc)
def test_dataviewListCtrl2(self):
dlc = dv.DataViewListCtrl(self.frame)
self.doListCtrlTest(dlc)
def doListCtrlTest(self, dlc):
assert isinstance(dlc, dv.DataViewListCtrl)
for label in "one two three four".split():
dlc.AppendTextColumn(label)
col = dv.DataViewColumn('five', dv.DataViewBitmapRenderer(), 4)
dlc.AppendColumn(col)
bmp = wx.Bitmap(pngFile)
for n in range(50):
rowdata = ['%s-%02d' % (s, n) for s in "one two three four".split()]
rowdata.append(bmp)
dlc.AppendItem(rowdata)
self.frame.SendSizeEvent()
dlc.Refresh()
self.myYield()
def test_dataviewHitTest(self):
dlc = dv.DataViewListCtrl(self.frame)
self.doListCtrlTest(dlc)
item, col = dlc.HitTest((10,50))
self.assertTrue(isinstance(item, dv.DataViewItem))
self.assertTrue(isinstance(col, dv.DataViewColumn) or col is None)
#-------------------------------------------------------
# DataViewTreeCtrl
def test_dataviewTreeCtrl1(self):
dtc = dv.DataViewTreeCtrl()
dtc.Create(self.frame)
self.doTreeCtrlTest(dtc)
def test_dataviewTreeCtrl2(self):
dtc = dv.DataViewTreeCtrl(self.frame)
self.doTreeCtrlTest(dtc)
def doTreeCtrlTest(self, dvtc):
isz = (16,16)
il = wx.ImageList(*isz)
fldridx = il.Add(wx.ArtProvider.GetIcon(wx.ART_FOLDER, wx.ART_OTHER, isz))
fldropenidx = il.Add(wx.ArtProvider.GetIcon(wx.ART_FOLDER_OPEN, wx.ART_OTHER, isz))
fileidx = il.Add(wx.ArtProvider.GetIcon(wx.ART_NORMAL_FILE, wx.ART_OTHER, isz))
dvtc.SetImageList(il)
self.root = dvtc.AppendContainer(dv.NullDataViewItem,
"The Root Item",
fldridx, fldropenidx)
for x in range(15):
child = dvtc.AppendContainer(self.root, "Item %d" % x,
fldridx, fldropenidx)
for y in range(5):
last = dvtc.AppendContainer(
child, "item %d-%s" % (x, chr(ord("a")+y)),
fldridx, fldropenidx)
for z in range(5):
item = dvtc.AppendItem(
last, "item %d-%s-%d" % (x, chr(ord("a")+y), z),
fileidx)
dvtc.ExpandAncestors(item)
self.frame.SendSizeEvent()
dvtc.Refresh()
self.myYield()
#-------------------------------------------------------
def test_dataviewConst(self):
dv.DVC_DEFAULT_RENDERER_SIZE
dv.DVC_DEFAULT_WIDTH
dv.DVC_TOGGLE_DEFAULT_WIDTH
dv.DVC_DEFAULT_MINWIDTH
dv.DVR_DEFAULT_ALIGNMENT
dv.DATAVIEW_CELL_INERT
dv.DATAVIEW_CELL_ACTIVATABLE
dv.DATAVIEW_CELL_EDITABLE
dv.DATAVIEW_CELL_SELECTED
dv.DATAVIEW_CELL_PRELIT
dv.DATAVIEW_CELL_INSENSITIVE
dv.DATAVIEW_CELL_FOCUSED
dv.DATAVIEW_COL_RESIZABLE
dv.DATAVIEW_COL_SORTABLE
dv.DATAVIEW_COL_REORDERABLE
dv.DATAVIEW_COL_HIDDEN
dv.DV_SINGLE
dv.DV_MULTIPLE
dv.DV_NO_HEADER
dv.DV_HORIZ_RULES
dv.DV_VERT_RULES
dv.DV_ROW_LINES
dv.DV_VARIABLE_LINE_HEIGHT
def test_dataviewEvt1(self):
evt = dv.DataViewEvent()
evt.GetItem
evt.SetItem
evt.GetColumn
evt.SetColumn
evt.GetModel
evt.SetModel
evt.GetValue
evt.SetValue
evt.IsEditCancelled
evt.SetDataViewColumn
evt.GetDataViewColumn
evt.GetPosition
evt.SetPosition
evt.GetCacheFrom
evt.GetCacheTo
evt.SetCache
evt.SetDataObject
evt.GetDataObject
evt.SetDataFormat
evt.GetDataFormat
evt.SetDataSize
evt.GetDataSize
evt.SetDataBuffer
evt.GetDataBuffer
evt.SetDragFlags
evt.GetDragFlags
evt.SetDropEffect
evt.GetDropEffect
def test_dataviewEvt2(self):
dv.wxEVT_COMMAND_DATAVIEW_SELECTION_CHANGED;
dv.wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED;
dv.wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSED;
dv.wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDED;
dv.wxEVT_COMMAND_DATAVIEW_ITEM_COLLAPSING;
dv.wxEVT_COMMAND_DATAVIEW_ITEM_EXPANDING;
dv.wxEVT_COMMAND_DATAVIEW_ITEM_START_EDITING;
dv.wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED;
dv.wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE;
dv.wxEVT_COMMAND_DATAVIEW_ITEM_VALUE_CHANGED;
dv.wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU;
dv.wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK;
dv.wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK;
dv.wxEVT_COMMAND_DATAVIEW_COLUMN_SORTED;
dv.wxEVT_COMMAND_DATAVIEW_COLUMN_REORDERED;
dv.wxEVT_COMMAND_DATAVIEW_ITEM_BEGIN_DRAG;
dv.wxEVT_COMMAND_DATAVIEW_ITEM_DROP_POSSIBLE;
dv.wxEVT_COMMAND_DATAVIEW_ITEM_DROP;
dv.wxEVT_COMMAND_DATAVIEW_CACHE_HINT;
dv.EVT_DATAVIEW_SELECTION_CHANGED
dv.EVT_DATAVIEW_ITEM_ACTIVATED
dv.EVT_DATAVIEW_ITEM_COLLAPSED
dv.EVT_DATAVIEW_ITEM_EXPANDED
dv.EVT_DATAVIEW_ITEM_COLLAPSING
dv.EVT_DATAVIEW_ITEM_EXPANDING
dv.EVT_DATAVIEW_ITEM_START_EDITING
dv.EVT_DATAVIEW_ITEM_EDITING_STARTED
dv.EVT_DATAVIEW_ITEM_EDITING_DONE
dv.EVT_DATAVIEW_ITEM_VALUE_CHANGED
dv.EVT_DATAVIEW_ITEM_CONTEXT_MENU
dv.EVT_DATAVIEW_COLUMN_HEADER_CLICK
dv.EVT_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK
dv.EVT_DATAVIEW_COLUMN_SORTED
dv.EVT_DATAVIEW_COLUMN_REORDERED
dv.EVT_DATAVIEW_ITEM_BEGIN_DRAG
dv.EVT_DATAVIEW_ITEM_DROP_POSSIBLE
dv.EVT_DATAVIEW_ITEM_DROP
dv.EVT_DATAVIEW_CACHE_HINT
#---------------------------------------------------------------------------
if __name__ == '__main__':
unittest.main()