#  _________________________________________________________________________
#
#  PyUtilib: A Python utility library.
#  Copyright (c) 2008 Sandia Corporation.
#  This software is distributed under the BSD License.
#  Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
#  the U.S. Government retains certain rights in this software.
#  _________________________________________________________________________
#
# Class to encapsulate a progress indicator

__all__ = ['progress']

import sys
import time
import unittest

class progressException(Exception): 'Error to raise for any recursive problem.'

class progress:

    def __init__ (self, period=1):
        self._twissler = ["|","/","-","\\","|"]
        self._state = 0
        self._period = period
        self._ctr = period

    def getStart(self):
        sys.stdout.write('\t[  ') # include 2 spaces for the twissler
        sys.stdout.flush()

    def getStart(self, text):
        sys.stdout.write('\t %s [  ' % (text)) # include 2 spaces for the twissler
        sys.stdout.flush()

    def moveOn(self):
        try:
            self._ctr += 1
            if self._ctr <= self._period:
                return
            self._ctr = 1
            self._state += 1
            if self._state >= 5:
                self._state = 1
            sys.stdout.write( chr(8)+chr(8)+self._twissler[self._state]+']' )
            sys.stdout.flush()
        except:
            raise progressException('failed to progress')



class TestCase(unittest.TestCase):
    def setUp(self):
        pass
    def tearDown(self):
        pass
    def testProgress(self):
        p = progress()
        p.getStart("HERE")
        for a in range(0,10,1):
            p.moveOn()
            time.sleep(0.2)

if __name__ == '__main__':
    widgetTestSuite = unittest.TestSuite()
    widgetTestSuite.addTest(TestCase("testProgress"))
    runner = unittest.TextTestRunner()
    runner.run(widgetTestSuite)
