Logo Search packages:      
Sourcecode: matplotlib version File versions

range_test_case.py

import unittest

from enthought.traits.api import HasTraits, Int, Range, Str

class WithFloatRange(HasTraits):
    r = Range(0.0, 100.0)
    r_copied_on_change = Str
    
    _changed_handler_calls = Int
    
    def _r_changed(self, old, new):
        self._changed_handler_calls += 1
        self.r_copied_on_change = str(self.r)

        if (self.r % 10) > 0:
            self.r += 10-(self.r % 10)
        
    
class WithLargeIntRange(HasTraits):
    r = Range(0, 1000)
    r_copied_on_change = Str
    
    _changed_handler_calls = Int
    
    def _r_changed(self, old, new):
        self._changed_handler_calls += 1
        self.r_copied_on_change = str(self.r)

        if self.r > 100:
            self.r = 0
        


class RangeTestCase(unittest.TestCase):

    def test_non_ui_events(self):
        
        obj = WithFloatRange()
        obj._changed_handler_calls = 0

        obj.r = 10
        self.failUnlessEqual(1, obj._changed_handler_calls)

        obj._changed_handler_calls = 0
        obj.r = 34.56
        self.failUnlessEqual(2, obj._changed_handler_calls)
        self.failUnlessEqual(40, obj.r)

        return
    
    def test_non_ui_int_events(self):
        
        # Even thou the range is configured for 0..1000, the handler resets
        # the value to 0 when it exceeds 100.
        obj = WithLargeIntRange()
        obj._changed_handler_calls = 0

        obj.r = 10
        self.failUnlessEqual(1, obj._changed_handler_calls)
        self.failUnlessEqual(10, obj.r)

        obj.r = 100
        self.failUnlessEqual(2, obj._changed_handler_calls)
        self.failUnlessEqual(100, obj.r)

        obj.r = 101
        self.failUnlessEqual(4, obj._changed_handler_calls)
        self.failUnlessEqual(0, obj.r)

        return
    
    def ui_test_events(self):
        print
        print 'enter the value 34.56 in the range text box and tab out or enter.'
        print 'Notice that the changed handler call count is 2.'
        print 'Notice the slider is at 34.56 and the text box still shows 34.56'
        print 'Notice that r_copied_on_change shows 40.0'
        print 'Click OK to close the window.'
        print 'The test will not fail, because the range value was rounded by the event handler.'
        print 'However, the range widget did not show that change.'
        
        obj = WithFloatRange()
        obj._changed_handler_calls = 0

        obj.edit_traits(kind='livemodal', )
        
        self.failUnlessEqual( obj.r % 10, 0 )
        
        return
    
    def ui_test_int_events(self):
        print
        print 'enter the value 95 in the range text box.'
        print 'Notice that the changed handler call count is 2.'
        print 'Notice that r_copied_on_change shows 95'
        print 'Click the up arrow 5 times. Each time the handler call count will increment by one.'
        print 'The R value is now 100 and the change handler call count is 7.'
        print 'Click the up array 1 time. The call count is 11, R is 101 (wrong), and R copied on change is 0 (correct)'
        print 'Click OK to close the window.'
        print 'The test will not fail, because the range value kept below 101 by the event handler.'
        print 'However, the range widget did not show that change.'
        
        obj = WithLargeIntRange()
        obj._changed_handler_calls = 0

        obj.edit_traits(kind='livemodal', )
        
        self.failUnless( obj.r <= 100 )
        
        return

### EOF

Generated by  Doxygen 1.6.0   Back to index