root/umpa/branches/protocols/tests/a_unit/test_protocols/test__fields.py @ 5801

Revision 5801, 21.6 kB (checked in by kosma, 3 years ago)

move Payload._HData to _fields.DataField?

Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4# Copyright (C) 2008-2009 Adriano Monteiro Marques.
5#
6# Author: Bartosz SKOWRON <getxsick at gmail dot com>
7#
8# This library is free software; you can redistribute it and/or modify
9# it under the terms of the GNU Lesser General Public License as published
10# by the Free Software Foundation; either version 2.1 of the License, or
11# (at your option) any later version.
12#
13# This library is distributed in the hope that it will be useful, but
14# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16# License for more details.
17#
18# You should have received a copy of the GNU Lesser General Public License
19# along with this library; if not, write to the Free Software Foundation,
20# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
22import py.test
23from umit.umpa.protocols._fields import *
24from umit.umpa.utils.exceptions import UMPAException, UMPAAttributeException
25
26class TestField(object):
27    cls_field = Field
28
29    def test_init(self):
30        f = self.cls_field('foobar')
31        assert f.auto is False
32
33    def test_set(self):
34        f = self.cls_field('foobar')
35        py.test.raises(NotImplementedError, f.set, 0)
36
37    def test_get(self):
38        f = self.cls_field('foobar', 10)
39        assert f.get() == 10
40       
41        f = self.cls_field('foobar')
42        assert f.get() is None
43
44    def test_clear(self):
45        f = self.cls_field('foobar', 10)
46        f.clear()
47        assert f.get() is None
48   
49    def test_doc(self):
50        f = self.cls_field('foobar')
51        f.set_doc('xxx')
52        assert f.__doc__ == 'xxx'
53
54    def test_fillout(self):
55        f = self.cls_field('foobar')
56        py.test.raises(UMPAException, f.fillout)
57
58        f = self.cls_field('foobar', 10)
59        py.test.raises(NotImplementedError, f.fillout)
60
61    def test_raw_value(self):
62        f = self.cls_field('foobar')
63        py.test.raises(NotImplementedError, f._raw_value)
64
65class TestIntField(TestField):
66    cls_field = IntField
67
68    def test_get(self):
69        f = self.cls_field('foobar', 10, 8)
70        assert f.get() == 10
71       
72        f = self.cls_field('foobar')
73        assert f.get() is None
74
75    def test_set(self): #_is_valid() tests included
76        f = self.cls_field('foobar', 10, 5)
77        assert f.get() == 10
78
79        f = self.cls_field('foobar', bits=5)
80        f.set(10)
81        assert f.get() == 10
82
83        f = self.cls_field('foobar', bits=4)
84        f.set(10)
85        assert f.get() == 10
86
87        f = self.cls_field('foobar', bits=3)
88        py.test.raises(UMPAAttributeException, f.set, 10)
89
90        # __________________
91        # auto
92        f = self.cls_field('foobar', bits=4, auto=True)
93        assert f.auto is True
94        f.set(10)
95        assert f.auto is False
96
97    def test_clear(self):
98        f = self.cls_field('foobar', 10, 8)
99        f.clear()
100        assert f.get() is None
101
102    def test_raw_value(self):
103        f = self.cls_field('foobar', 10, 8)
104        assert f._raw_value() == 10
105
106    def test_fillout(self):
107        f = self.cls_field('foobar')
108        py.test.raises(UMPAException, f.fillout)
109
110        f = self.cls_field('foobar', 10, 8)
111        assert f.fillout() == 10
112
113class TestSpecialIntField(TestIntField):
114    cls_field = SpecialIntField
115
116    def test_tmpvalue(self):
117        f = self.cls_field('foobar')
118       
119        assert f.get_tmpvalue() == 0
120        assert f._tmp_value == 0
121
122        f.set_tmpvalue(10)
123        assert f.get_tmpvalue() == 10
124
125        f.clear_tmpvalue()
126        assert f._tmp_value == 0
127
128        f._tmp_value = 20
129        assert f._tmp_value == 20
130
131        del f._tmp_value
132        assert f.get_tmpvalue() == 0
133
134class TestEnumField(TestIntField):
135    cls_field = EnumField
136
137    def test_get(self):
138        f = self.cls_field('foobar', 10, 16)
139        f.enumerable = {'foo' : 5, 'bar' : 10}
140
141        assert f.get() == 10
142        assert f.get(True) == 'bar'
143
144        f.set(5)
145        assert f.get(human=True) == 'foo'
146
147        f.set(0)
148        assert f.get(True) == 0
149
150    def test_set(self):
151        f = self.cls_field('foobar', bits=16)
152        f.enumerable = {'foo' : 5, 'bar' : 10}
153
154        f.set('foo')
155        assert f.get() == 5
156        assert f.get(True) == 'foo'
157
158        f.set(10)
159        assert f.get() == 10
160        assert f.get(True) == 'bar'
161
162        # __________________
163        # auto
164        f = self.cls_field('foobar', bits=4, auto=True)
165        assert f.auto is True
166        f.set(10)
167        assert f.auto is False
168
169class TestAddrField(TestField):
170    cls_field = IPAddrField
171
172    def test_get(self):
173        self.cls_field.pieces_amount = 4
174        self.cls_field.separator = "."
175        self.cls_field.piece_size = 8
176        self.cls_field.base = 10
177
178        f = self.cls_field('foobar', "127.0.0.1")
179        assert f.get() == "127.0.0.1"
180       
181        f = self.cls_field('foobar')
182        assert f.get() is None
183
184        self.cls_field.separator = ""
185        self.cls_field.base = 0
186        self.cls_field.piece_size = 0
187        self.cls_field.pieces_amount = 0
188
189    def test_set(self):
190        f = self.cls_field('foobar')
191
192        def check(val):
193            f.set(val)
194            assert f.get() == val
195
196        f.pieces_amount = 4
197        f.separator = "."
198        f.piece_size = 8
199        f.base = 10
200
201        check("255.255.255.255")
202        check((255,255,255,255))
203        check("127.0.0.1")
204        check("0.0.0.0")
205        check((127,0,0,1))
206        check((0,0,0,0))
207        f.set([127,0,0,1])
208        assert f.get() == (127,0,0,1)
209        f.set([0,0,0,0])
210        assert f.get() == (0,0,0,0)
211
212        py.test.raises(UMPAAttributeException, f.set, "256.0.0.1")
213        py.test.raises(UMPAAttributeException, f.set, "127,0,0,1")
214        py.test.raises(UMPAAttributeException, f.set, "327,0,0,1")
215        py.test.raises(UMPAAttributeException, f.set, "127.0.0.")
216        py.test.raises(UMPAAttributeException, f.set, "127")
217        py.test.raises(UMPAAttributeException, f.set, "A")
218        py.test.raises(UMPAAttributeException, f.set, "0xF.0xF.0xF.0xF")
219        py.test.raises(UMPAAttributeException, f.set, (500,))
220        py.test.raises(UMPAAttributeException, f.set, (500,0,0,0))
221        py.test.raises(UMPAAttributeException, f.set, ("10.0.0.0",))
222
223        f.separator = "*"
224        check("127*0*0*1")
225        py.test.raises(UMPAAttributeException, f.set, "127.0.0.1")
226
227        f.pieces_amount = 3
228        check("127*0*1")
229        py.test.raises(UMPAAttributeException, f.set, "127.0.0.1")
230
231        f.pieces_amount = 4
232        f.separator = "."
233        f.piece_size = 6
234        check("63.0.0.1")
235        py.test.raises(UMPAAttributeException, f.set, "127.0.0.1")
236        py.test.raises(UMPAAttributeException, f.set, "65.0.0.1")
237        py.test.raises(UMPAAttributeException, f.set, "64.0.0.1")
238
239        f.piece_size = 8
240        f.base = 16
241        check("0xFF.0xFF.0xFF.0xFF")
242        py.test.raises(UMPAAttributeException, f.set, "0xG.0xFF.0xFF.0xFF")
243
244    def test_clear(self):
245        self.cls_field.pieces_amount = 4
246        self.cls_field.separator = "."
247        self.cls_field.piece_size = 8
248        self.cls_field.base = 10
249
250        f = self.cls_field('foobar', "127.0.0.1")
251        assert f.get() == "127.0.0.1"
252        f.clear()
253        assert f.get() is None
254
255        self.cls_field.separator = ""
256        self.cls_field.base = 0
257        self.cls_field.piece_size = 0
258        self.cls_field.pieces_amount = 0
259        self.cls_field.bits = 0
260
261    def test_raw_value(self):
262        f = self.cls_field('foobar')
263        f.pieces_amount = 4
264        f.separator = "."
265        f.piece_size = 8
266        f.base = 10
267
268        f.set("127.0.0.1")
269        assert f._raw_value() == 2130706433
270        f.set("0.0.0.0")
271        assert f._raw_value() == 0
272        f.set("255.255.255.255")
273        assert f._raw_value() == 2**32-1
274
275    def test_fillout(self):
276        f = self.cls_field('foobar')
277        py.test.raises(UMPAException, f.fillout)
278
279        f.pieces_amount = 4
280        f.separator = "."
281        f.piece_size = 8
282        f.base = 10
283
284        f.set("127.0.0.1")
285        assert f.fillout() == 2130706433
286        f.set("0.0.0.0")
287        assert f.fillout() == 0
288        f.set("255.255.255.255")
289        assert f.fillout() == 2**32-1
290
291class TestIPAddrField(TestAddrField):
292    pass
293
294class TestIPv4AddrField(TestIPAddrField):
295    cls_field = IPv4AddrField
296
297    def setup_method(self, method):
298        self.cls_field.pieces_amount = 4
299        self.cls_field.separator = "."
300        self.cls_field.piece_size = 8
301        self.cls_field.base = 10
302        self.cls_field.bits = 32
303
304    def test_set(self):
305        f = self.cls_field('foobar')
306
307        def check(val):
308            f.set(val)
309            assert f.get() == val
310
311        check("127.0.0.1")
312        check("0.0.0.0")
313        check((127,0,0,1))
314        check((0,0,0,0))
315        f.set([127,0,0,1])
316        assert f.get() == (127,0,0,1)
317        f.set([0,0,0,0])
318        assert f.get() == (0,0,0,0)
319
320        py.test.raises(UMPAAttributeException, f.set, "256.0.0.1")
321        py.test.raises(UMPAAttributeException, f.set, "127,0,0,1")
322        py.test.raises(UMPAAttributeException, f.set, "327,0,0,1")
323        py.test.raises(UMPAAttributeException, f.set, "127.0.0.")
324        py.test.raises(UMPAAttributeException, f.set, "127")
325        py.test.raises(UMPAAttributeException, f.set, "A")
326        py.test.raises(UMPAAttributeException, f.set, "0xF.0xF.0xF.0xF")
327        py.test.raises(UMPAAttributeException, f.set, (500,))
328        py.test.raises(UMPAAttributeException, f.set, (500,0,0,0))
329        py.test.raises(UMPAAttributeException, f.set, ("10.0.0.0",))
330
331class TestIPv6AddrField(TestIPAddrField):
332    #cls_field = IPv6AddrField
333
334    def setup_class(cls):
335        py.test.skip('IPv6 support is disabled at the moment')
336
337    def setup_method(self, method):
338        self.cls_field.pieces_amount = 8
339        self.cls_field.separator = ":"
340        self.cls_field.piece_size = 16
341        self.cls_field.base = 16
342        self.cls_field.bits = 128
343
344    def test_set(self):
345        f = self.cls_field('foobar')
346
347        def check(val):
348            f.set(val)
349            assert f.get() == val
350
351        check("0:0:0:0:0:0:0:0")
352        check("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF")
353        check("2001:0db8:85a3:0000:0000:8a2e:0370:7334")
354        check((0,0,0,0,0,0,0,0))
355        check((0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF))
356        check((0x2001,0x0db8,0x85a3,0,0,0x8a2e,0x0370,0x7334))
357        f.set([0,0,0,0,0,0,0,0])
358        assert f.get() == (0,0,0,0,0,0,0,0)
359        f.set([0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF])
360        assert f.get() == (0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
361                                                                        0xFFFF)
362        f.set([0x2001,0x0db8,0x85a3,0,0,0x8a2e,0x0370,0x7334])
363        assert f.get() == (0x2001,0x0db8,0x85a3,0,0,0x8a2e,0x0370,0x7334)
364
365        py.test.raises(UMPAAttributeException, f.set, "127.0.0.1")
366        py.test.raises(UMPAAttributeException, f.set, "FFFF.FFFF.FFFF.FFFF")
367        py.test.raises(UMPAAttributeException, f.set,
368                                    "FFFF.FFFF.FFFF.FFFF.FFFF.FFFF.FFFF.FFFF")
369        py.test.raises(UMPAAttributeException, f.set, "G:G:G:G:G:G:G:G")
370
371class TestMACAddrField(TestAddrField):
372    cls_field = MACAddrField
373
374    def setup_method(self, method):
375        self.cls_field.pieces_amount = 6
376        self.cls_field.separator = ":"
377        self.cls_field.piece_size = 8
378        self.cls_field.base = 16
379        self.cls_field.bits = 48
380
381    def test_set(self):
382        f = self.cls_field('foobar')
383
384        def check(val):
385            f.set(val)
386            assert f.get() == val
387
388        check("aa:bb:cc:dd:ee:ff")
389        check("00:00:00:00:00:00")
390        check(("aa","bb","cc","dd","ee","ff"))
391        check((0,0,0,0,0,0))
392        f.set(["aa",0,0,1,9,2])
393        assert f.get() == ("aa",0,0,1,9,2)
394        f.set([0,0,0,0,0,0])
395        assert f.get() == (0,0,0,0,0,0)
396
397        py.test.raises(UMPAAttributeException, f.set, "256:0:0:1:1:1")
398        py.test.raises(UMPAAttributeException, f.set, "127,0,0,1,1,1")
399        py.test.raises(UMPAAttributeException, f.set, "327,0,0,1,0,0")
400        py.test.raises(UMPAAttributeException, f.set, "127:0:0:")
401        py.test.raises(UMPAAttributeException, f.set, "127:0:0:0:0")
402        py.test.raises(UMPAAttributeException, f.set, "127")
403        py.test.raises(UMPAAttributeException, f.set, "A")
404        py.test.raises(UMPAAttributeException, f.set, "0xF.0xF.0xF.0xF.0xF.0xF")
405        py.test.raises(UMPAAttributeException, f.set, (500,))
406        py.test.raises(UMPAAttributeException, f.set, (500,0,0,0))
407        py.test.raises(UMPAAttributeException, f.set, ("10:0:0:0:0:0",))
408        py.test.raises(UMPAAttributeException, f.set, "qq:aa:bb:ee:dd:ff")
409        py.test.raises(UMPAAttributeException, f.set, "ii:aa:bb:ee:dd:ff")
410
411class TestPaddingField(TestSpecialIntField):
412    cls_field = PaddingField
413
414    def test_init(self):
415        f = self.cls_field('foobar')
416        assert f.auto is True
417        assert f.get() == 0
418
419        f = self.cls_field('foobar', 8)
420        assert f.auto is True
421        assert f.get() == 0
422
423    def test_get(self):
424        f = self.cls_field('foobar')
425        assert f.get() == 0
426
427        f = self.cls_field('foobar', 8)
428        assert f.get() == 0
429
430    def test_set(self):
431        f = self.cls_field('foobar', 10)
432        assert f.get() == 0
433
434        f.set(5)
435        assert f.get() == 5
436
437        f.set(0)
438        assert f.get() == 0
439
440        f._word = 9
441        f.set(9)
442        assert f.get() == 9
443        py.test.raises(UMPAAttributeException, f.set, 10)
444        py.test.raises(UMPAAttributeException, f.set, -1)
445
446    def test_raw_value(self):
447        f = self.cls_field('foobar')
448        assert f._raw_value() == 0
449
450    def test_generate_value(self):
451        f = self.cls_field('foobar')
452
453        f._tmp_value = 0
454        assert f._generate_value() == 0
455        f._tmp_value = 1
456        assert f._generate_value() == 31
457        f._tmp_value = 10
458        assert f._generate_value() == 22
459        f._tmp_value = 31
460        assert f._generate_value() == 1
461        f._tmp_value = 32
462        assert f._generate_value() == 0
463        f._tmp_value = 33
464        assert f._generate_value() == 31
465
466        f = self.cls_field('foobar', 16) # word == 16
467
468        f._tmp_value = 0
469        assert f._generate_value() == 0
470        f._tmp_value = 1
471        assert f._generate_value() == 15
472        f._tmp_value = 10
473        assert f._generate_value() == 6
474        f._tmp_value = 15
475        assert f._generate_value() == 1
476        f._tmp_value = 32
477        assert f._generate_value() == 0
478        f._tmp_value = 33
479        assert f._generate_value() == 15
480
481    def test_fillout(self):
482        f = self.cls_field('foobar')
483        assert f.bits == 0
484        assert f.fillout() == 0
485        assert f.bits == 0
486
487        f._tmp_value = 3
488        assert f.fillout() == 0
489        assert f.bits == 29
490
491        f._word = 16
492        f._tmp_value = 3
493        f.bits = 0
494        assert f.fillout() == 0
495        assert f.bits == 13
496
497class TestFlags(TestField):
498    cls_field = Flags
499
500    def test_init(self):
501        bits = ['a', 'b', 'c']
502        f = self.cls_field('foobar', bits)
503        assert f._ordered_fields == bits
504        for b in bits:
505            f._value.has_key(b)
506        assert f.bits == len(bits)
507
508        f = self.cls_field('foobar', bits, b=False, c=True)
509        assert f.get('a') == [False]
510        assert f.get('b') == [False]
511        assert f.get('c') == [True]
512
513        py.test.raises(UMPAAttributeException, self.cls_field, 'foobar', bits,
514                                                            b=True, xxx=True)
515
516    def test_get(self):
517        bits = ['a', 'b', 'c']
518        f = self.cls_field('foobar', bits, b=False, c=True)
519        assert f.get() == 0x01
520
521        f = self.cls_field('foobar', bits, a=True, c=True)
522        assert f.get() == 0x05
523
524        f = self.cls_field('foobar', bits, b=False, c=True)
525        assert f.get(*bits) == [False, False, True]
526        assert f.get([]) == [False, False, True]
527        #assert f.get(()) == [False, False, True]
528        assert f.get('a','c') == [False, True]
529
530        py.test.raises(UMPAAttributeException, f.get, 'd')
531        py.test.raises(UMPAAttributeException, f.get, '')
532        py.test.raises(UMPAAttributeException, f.get, 'a', 'd')
533        py.test.raises(UMPAAttributeException, 'f.get(Flags(None,[]))')
534
535    def test_set(self):
536        bits = ['a', 'b', 'c']
537        f = self.cls_field('foobar', bits)
538
539        assert f.get() == 0x00
540        f.set(0x05)
541        assert f.get() == 0x05
542        f.set({'a':False})
543        assert f.get() == 0x01
544        f.set('a','b','c')
545        assert f.get() == 0x07
546        f.set(['a','b'], 'c')
547        assert f.get() == 0x07
548        f.set(['a','b'], 'c', 'a')
549        assert f.get() == 0x07
550        f.set(0x05, 'b', a=False, b=False)
551        assert f.get() == 0x01
552
553        f.set(False, 'b', 'c', a=True)
554        assert f.get() == 0x04
555        f.set(True, 'a', b=True, c=True)
556        assert f.get() == 0x07
557        f.set(True, 'a', b=False, c=True, a=False)
558        assert f.get() == 0x01
559
560        f.set('b')
561        assert f.get('b') == [True]
562        f.set('a', 'c')
563        assert f.get('a', 'b') == [True, True]
564
565        py.test.raises(UMPAAttributeException, "f.set(0x08)")
566        py.test.raises(UMPAAttributeException, "f.set(0xFF)")
567        py.test.raises(UMPAAttributeException, "f.set(0x01, 'd')")
568
569        # longer names (iterable issue)
570        bits = ['aa', 'bb', 'cc']
571        f = self.cls_field('foobar', bits)
572        assert f.get() == 0x00
573        f.set(0x05)
574        assert f.get() == 0x05
575        f.set(True, 'bb', aa=False, cc=True)
576        assert f.get() == 0x03
577
578    def test_clear(self):
579        bits = ['a', 'b', 'c']
580        f = self.cls_field('foobar', bits, a=True, b=False, c=True)
581        assert f.get([]) == [True, False, True]
582        f.clear()
583        assert f.get([]) == [False, False, False]
584
585    def test_is_valid(self):
586        bits = ['a', 'b', 'c']
587        f = self.cls_field('foobar', bits)
588       
589        assert f._is_valid('xxx') is False
590        py.test.raises(UMPAAttributeException, f.set, 'xxx')
591
592    def test_doc(self):
593        bits = ['a', 'b', 'c']
594        f = self.cls_field('foobar', bits)
595        f.set_doc('xxx')
596        assert f.__doc__ == 'xxx'
597
598    def test_fillout(self):
599        bits = ['a', 'b', 'c']
600        f = self.cls_field('foobar', bits)
601       
602        assert f.fillout() == 0
603        f.set('a')
604        assert f.fillout() == 4
605        f.set('b', 'c')
606        assert f.fillout() == 7
607
608    def test_raw_value(self):
609        bits = ['a', 'b', 'c']
610        f = self.cls_field('foobar', bits, a=True, b=True, c=True)
611        py.test.raises(NotImplementedError, f._raw_value)
612
613    def test_set_bit(self):
614        bits = ['a', 'b', 'c']
615        f = self.cls_field('foobar', bits)
616
617        f._set_bit('a', True)
618        assert f.get('a') == [True]
619        f._set_bit('a', False)
620        assert f.get('a') == [False]
621
622        py.test.raises(UMPAAttributeException, f._set_bit, 'xxx', True)
623
624class TestBitField(TestField):
625    cls_field = BitField
626   
627    def test_init(self):
628        f = self.cls_field('foobar')
629        assert f._value is None
630        assert f.auto is False
631
632        f = self.cls_field('foobar', False)
633        assert f._value is False
634
635        f = self.cls_field('foobar', True)
636        assert f._value is True
637
638    def test_set(self):
639        f = self.cls_field('foobar')
640        assert f.get() is None
641       
642        f.set(False)
643        assert f.get() is False
644
645        f.set('aaa')
646        assert f.get() is True
647       
648        f.set(None)
649        assert f.get() is None
650
651    def test_get(self):
652        f = self.cls_field('foobar', 10)
653        assert f.get() is True
654       
655        f = self.cls_field('foobar')
656        assert f.get() is None
657
658    def test_fillout(self):
659        f = self.cls_field('foobar')
660
661        py.test.raises(UMPAException, f.fillout)
662
663        f.set(True)
664        assert f.fillout() == 1
665
666        f.set(False)
667        assert f.fillout() == 0
668
669    def test_raw_value(self):
670        f = self.cls_field('foobar', 5)
671        assert f._raw_value() == 1
672
673        f.set(0)
674        assert f._raw_value() == 0
675        f.set(False)
676        assert f._raw_value() == 0
677
678    def test_is_valid(self):
679        f = self.cls_field('foobar')
680        assert f._is_valid(True) is True
681        assert f._is_valid(False) is True
682        assert f._is_valid(None) is True
683        assert f._is_valid('xxx') is True
684
685class TestDataField(TestField):
686    cls_field = DataField
687
688    def test_init(self):
689        f = self.cls_field('foobar')
690        assert f.auto is False
691
692        f = self.cls_field('foobar', 'xxx')
693        assert f.get() == 'xxx'
694
695    def test_get(self):
696        f = self.cls_field('foobar', 10)
697        assert f.get() == '10'
698       
699        f = self.cls_field('foobar')
700        assert f.get() is None
701
702    def test_set(self):
703        f = self.cls_field('foobar', 'test')
704        assert f.get() == 'test'
705
706        f.set('foobarfoobar')
707        assert f.get() == 'foobarfoobar'
708        assert f.bits == 96
709
710        f.set(123)
711        assert f.get() == '123'
712        assert f.bits == 24
713
714        f.set(True)
715        assert f.get() == 'True'
716        assert f.bits == 32
717
718        f.set(None)
719        assert f.get() == 'None'
720        assert f.bits == 32
721
722    def test_clear(self):
723        f = self.cls_field('foobar', 'test')
724        f.set('foobarfoobar')
725        assert f.get() == 'foobarfoobar'
726        assert f.bits == 96
727        f.clear()
728        assert f.get() is None
729        assert f.bits == 0
730
731    def test_raw_value(self):
732        f = self.cls_field('foobar', 'test')
733        assert f.get() == 'test'
734        assert f._raw_value() == 0x74657374
735
736    def test_fillout(self):
737        f = self.cls_field('foobar', 'test')
738        assert f.fillout() == 0x74657374
739
740        f = self.cls_field('foobar')
741        py.test.raises(UMPAException, f.fillout)
Note: See TracBrowser for help on using the browser.