1# (C) Copyright 2005-2021 Enthought, Inc., Austin, TX 2# All rights reserved. 3# 4# This software is provided without warranty under the terms of the BSD 5# license included in LICENSE.txt and may be redistributed only under 6# the conditions described in the aforementioned license. The license 7# is also available online at http://www.enthought.com/licenses/BSD.txt 8# 9# Thanks for using Enthought open source! 10 11import unittest 12 13from traits.api import AbstractViewElement, HasTraits, Int, TraitError 14from traits.testing.optional_dependencies import requires_traitsui 15 16 17@requires_traitsui 18class TestViewElements(unittest.TestCase): 19 def setUp(self): 20 import traitsui.api 21 22 self.toolkit = traitsui.api.toolkit() 23 24 def tearDown(self): 25 del self.toolkit 26 27 def test_view_definition(self): 28 from traitsui.api import View 29 30 view = View('count') 31 32 class Model(HasTraits): 33 count = Int 34 my_view = view 35 36 view_elements = Model.class_trait_view_elements() 37 38 self.assertEqual(view_elements.content, {'my_view': view}) 39 40 def test_view_definition_twice(self): 41 from traitsui.api import View 42 43 view = View('count') 44 45 class Model(HasTraits): 46 count = Int 47 my_view = view 48 49 view_elements = Model.class_trait_view_elements() 50 view_elements2 = Model.class_trait_view_elements() 51 52 self.assertEqual(view_elements.content, {'my_view': view}) 53 self.assertIs(view_elements, view_elements2) 54 55 def test_view_elements_parents(self): 56 from traitsui.api import View 57 58 class Model(HasTraits): 59 count = Int 60 my_view = View('count') 61 62 class ModelSubclass(Model): 63 total = Int 64 my_view = View('count', 'total') 65 66 view_elements = ModelSubclass.class_trait_view_elements() 67 parent_view_elements = Model.class_trait_view_elements() 68 69 self.assertEqual(view_elements.parents[0], parent_view_elements) 70 71 def test_instance_view_definition(self): 72 from traitsui.api import View 73 74 view = View('count') 75 76 class Model(HasTraits): 77 count = Int 78 my_view = view 79 80 m = Model() 81 view_elements = m.trait_view_elements() 82 83 self.assertEqual(view_elements.content, {'my_view': view}) 84 85 def test_trait_views(self): 86 from traitsui.api import View 87 88 view = View('count') 89 90 class Model(HasTraits): 91 count = Int 92 my_view = view 93 94 m = Model() 95 views = m.trait_views() 96 97 self.assertEqual(views, ['my_view']) 98 99 def test_included_names(self): 100 from traitsui.api import Group, Item, View 101 102 item = Item('count', id='item_with_id') 103 group = Group(item) 104 view = View(Item('count')) 105 106 class Model(HasTraits): 107 count = Int 108 my_group = group 109 my_view = view 110 111 view_elements = Model.class_trait_view_elements() 112 113 self.assertEqual( 114 view_elements.content, 115 {'my_view': view, 'my_group': group, 'item_with_id': item} 116 ) 117 118 def test_duplicate_names(self): 119 from traitsui.api import Group, Item, View 120 121 class Model(HasTraits): 122 count = Int 123 includable = Group(Item('count', id='name_conflict')) 124 name_conflict = View(Item('count')) 125 126 with self.assertRaises(TraitError): 127 Model.class_trait_view_elements() 128 129 def test_view_element_superclass(self): 130 from traitsui.api import ViewElement 131 132 self.assertIsInstance(ViewElement(), AbstractViewElement) 133