1
+ from __future__ import absolute_import
2
+
3
+ from nose .tools import *
4
+ from unittest import TestCase
5
+ try :
6
+ from traitlets import TraitError , HasTraits
7
+ except ImportError :
8
+ from IPython .utils .traitlets import TraitError , HasTraits
9
+
10
+ from matplotlib .traitlets import (Color , exdict , OnGetMixin , PrivateMethodMixin ,
11
+ Int , Configurable )
12
+
13
+ def test_exdict ():
14
+ e = exdict ()
15
+ assert_equal (e .ex , {})
16
+ e ['attr' ] = 1
17
+ assert_equal (e .ex , {})
18
+ e ['attr' ] = 2
19
+ assert_equal (e .ex , {'attr' :1 })
20
+
21
+ def test_getter ():
22
+
23
+ class gInt (OnGetMixin , Int ): pass
24
+
25
+ class A (PrivateMethodMixin , Configurable ):
26
+
27
+ attr = gInt (0 )
28
+ def _attr_getter (self , value , trait ):
29
+ return value + 1
30
+
31
+ assert_equal (A ().attr , 1 )
32
+
33
+ class PrivateMethodTestCase (TestCase ):
34
+ """Tests private attribute access, assignment, and callback forcing"""
35
+
36
+ def test_private_assignment (self ):
37
+
38
+ class A (PrivateMethodMixin , Configurable ):
39
+
40
+ attr = Int (0 )
41
+ # callbacks shouldn't be envoked
42
+ def _attr_validate (self , value , trait ):
43
+ self .assertTrue (False )
44
+ def _attr_changed (self ):
45
+ self .assertTrue (False )
46
+
47
+ a = A ()
48
+ a .private ('attr' , 1 )
49
+ self .assertEqual (a .attr , 1 )
50
+
51
+ def test_private_access (self ):
52
+
53
+ class gInt (OnGetMixin , Int ): pass
54
+
55
+ class A (PrivateMethodMixin , Configurable ):
56
+
57
+ attr = gInt (0 )
58
+ def _attr_getter (self , value , trait ):
59
+ return value + 1
60
+
61
+ self .assertEqual (A ().private ('attr' ), 0 )
62
+
63
+ def test_callback_forcing (self ):
64
+
65
+ class A (PrivateMethodMixin , Configurable ):
66
+
67
+ attr = Int (1 )
68
+ def _attr_validate (self , value , trait ):
69
+ return value + 1
70
+ def _attr_changed (self , name , old , new ):
71
+ # `private` avoids infinite recursion
72
+ self .private (name , old + new )
73
+
74
+ a = A ()
75
+ a .private ('attr' , 2 )
76
+ self .assertEqual (a .attr , 2 )
77
+ a .force_callbacks ('attr' )
78
+ self .assertEqual (a .attr , 4 )
79
+
80
+
81
+ class ColorTestCase (TestCase ):
82
+ """Tests for the Color traits"""
83
+
84
+ def setUp (self ):
85
+ self .transparent_values = [None , False , '' , 'none' ]
86
+ self .black_values = ['#000000' , '#000' ,(0 ,0 ,0 ,255 ), 0 , 0.0 , (.0 ,.0 ,.0 ), (.0 ,.0 ,.0 ,1.0 )]
87
+ self .colored_values = ['#BE3537' , (190 ,53 ,55 ), (0.7451 , 0.20784 , 0.21569 )]
88
+ self .invalid_values = ['wfaef' , '#0SX#$S' , (0.45 ,0.3 ), 3.4 , 344 , (()), {}, True ]
89
+
90
+ def _evaluate_invalids (self , a ):
91
+ for values in self .invalid_values :
92
+ try :
93
+ a .color = values
94
+ assert_true (False )
95
+ except TraitError :
96
+ assert_raises (TraitError )
97
+
98
+ def test_noargs (self ):
99
+ class A (HasTraits ):
100
+ color = Color ()
101
+ a = A ()
102
+ for values in self .black_values :
103
+ a .color = values
104
+ assert_equal (a .color , (0.0 ,0.0 ,0.0 ,1.0 ))
105
+
106
+ for values in self .colored_values :
107
+ a .color = values
108
+ assert_equal (a .color , (0.7451 , 0.20784 , 0.21569 , 1.0 ))
109
+ self ._evaluate_invalids (a )
110
+
111
+
112
+ def test_hexcolor (self ):
113
+ class A (HasTraits ):
114
+ color = Color (as_hex = True )
115
+
116
+ a = A ()
117
+
118
+ for values in self .black_values :
119
+ a .color = values
120
+ assert_equal (a .color , '#000000' )
121
+
122
+ for values in self .colored_values :
123
+ a .color = values
124
+ assert_equal (a .color , '#be3537' )
125
+
126
+ self ._evaluate_invalids (a )
127
+
128
+ def test_rgb (self ):
129
+ class A (HasTraits ):
130
+ color = Color (force_rgb = True )
131
+
132
+ a = A ()
133
+
134
+ for values in self .black_values :
135
+ a .color = values
136
+ assert_equal (a .color , (0.0 ,0.0 ,0.0 ))
137
+
138
+ for values in self .colored_values :
139
+ a .color = values
140
+ assert_equal (a .color , (0.7451 , 0.20784 , 0.21569 ))
141
+
142
+ self ._evaluate_invalids (a )
143
+
144
+ def test_named (self ):
145
+ ncolors = {'hexblue' : '#0000FF' ,
146
+ 'floatbllue' : (0.0 ,0.0 ,1.0 ),
147
+ 'intblue' : (0 ,0 ,255 )}
148
+
149
+ class A (HasTraits ):
150
+ color = Color ()
151
+ color .named_colors = ncolors
152
+
153
+ a = A ()
154
+
155
+ for colorname in ncolors :
156
+ a .color = colorname
157
+ assert_equal (a .color , (0.0 ,0.0 ,1.0 ,1.0 ))
158
+
159
+ def test_alpha (self ):
160
+ class A (HasTraits ):
161
+ color = Color (default_alpha = 0.4 )
162
+
163
+ a = A ()
164
+
165
+ assert_equal (a .color , (0.0 , 0.0 , 0.0 , 1.0 ))
166
+
167
+ for values in self .transparent_values :
168
+ a .color = values
169
+ assert_equal (a .color , (0.0 ,0.0 ,0.0 ,0.0 ))
170
+
171
+ for values in self .black_values :
172
+ a .color = values
173
+ if isinstance (values , (tuple ,list )) and len (values ) == 4 :
174
+ assert_equal (a .color , (0.0 ,0.0 ,0.0 ,1.0 ))
175
+ else :
176
+ # User not provide alpha value so return default_alpha
177
+ assert_equal (a .color , (0.0 ,0.0 ,0.0 ,0.4 ))
178
+
179
+ for values in self .colored_values :
180
+ a .color = values
181
+ assert_equal (a .color , (0.7451 , 0.20784 , 0.21569 , 0.4 ))
182
+
183
+ if __name__ == '__main__' :
184
+ import nose
185
+ nose .runmodule (argv = ['-s' , '--with-doctest' ], exit = False )
0 commit comments