def test_is_current(self):
        """Test the is_current method. Depends on correct status file
        operation.
        """
        filename = incremental.Incremental.get_stat_file_name()
        try:
            os.unlink(filename)
        except OSError:
            pass
        inc = incremental.Incremental(7)
        self.assertTrue(inc.is_current(0))
        self.assertTrue(inc.is_current(6))
        self.assertTrue(inc.is_current(7))
        self.assertFalse(inc.is_current(8))
        inc = incremental.Incremental(10)
        self.assertFalse(inc.is_current(7))
        self.assertTrue(inc.is_current(8))
        self.assertTrue(inc.is_current(9))
        self.assertTrue(inc.is_current(10))
        self.assertFalse(inc.is_current(11))

        # also test a non-integer
        action = mock.Mock()
        action.__int__ = mock.Mock()         # magic method needs to be
                                             # explicitly assigned
        action.__int__.return_value = 10
        self.assertTrue(inc.is_current(action))
        action.__int__.return_value = 11
        self.assertFalse(inc.is_current(action))
        os.unlink(filename)
 def test_status_file(self):
     """Test that the last increment is kept correctly
     black box testing as far as file contents is concerned
     """
     filename = incremental.Incremental.get_stat_file_name()
     try:
         os.unlink(filename)
     except OSError:
         pass
     inc = incremental.Incremental(7)
     self.assertEqual(-1, inc.lastincr)
     inc = incremental.Incremental(8)
     self.assertEqual(7, inc.lastincr)
     inc = incremental.Incremental(8)
     # twice the same is not an increment!
     self.assertEqual(-1, inc.lastincr)
     os.unlink(filename)
 def run_from_cmd(args):
     """Parse the command line (see module __doc__)
        return 2 on syntax error
        Python will return 1 if some exception occurs. So we don't
        do anything else but basic syntax checking here, the rest of the
        code will throw an exception if the the parameters are not good.
     """
     # TODO: in order to be testable this should really be it's own
     # module so we can use a mock Mcfg
     Mcfg.set_log_level()
     usage = globals()["__doc__"]
     result = 0
     if not len(args) in (4, 5):
         result = 2
     elif "run".startswith(args[1]):
         operation = RUN
         if len(args) != 5:
             result = 2
         else:
             try:
                 run_incr = int(args[4])
             except ValueError:
                 result = 2
     elif "verify".startswith(args[1]):
         operation = VERIFY
     elif "switchuser".startswith(args[1]):
         operation = SWITCHUSER
     else:
         result = 2
     if result != 2:
         if operation == RUN:
             master = Mcfg(args[2], args[3])
             incr = incremental.Incremental(run_incr)
             master.run_editors(incr)
         elif operation == SWITCHUSER:
             incremental.Incremental.copy_stat_file(args[2], args[3])
         else:
             raise NotImplementedError, "verify"
     else:
         print >> sys.stderr, usage
     return result
 def test_construct_and_convert(self):
     """Just construct it and convert to int"""
     inc = incremental.Incremental(7)
     self.assertEqual(7, int(inc))
     os.unlink(incremental.Incremental.get_stat_file_name())