def test_save_tasks_and_pomo(self): storage = Storage(TimeDouble()) pomo = Pomo() storage.pomo = pomo task = Task("Task1", "Task1Description word\nMultiline", 1000) task.id = 1 task.state = "Blocked" task.blocked_reason = "BlockedReason" storage.tasks.append(task) task = Task("Task2", "Task2Description", 1001) task.id = 2 task.close(1002) storage.tasks.append(task) openDouble.reset() fileDouble = FileDouble() openDouble.add_file(fileDouble) storage.save('test_file') self.assertEqual('test_file', openDouble.filename[0]) self.assertEqual('w+', openDouble.mode[0]) self.assertEqual("""#### Task ## State: Blocked ## Blocked Reason BlockedReason ## Closed Reason ## Id: 1 ## Date Created: 1000 ## Date Closed: ## Date Due: ## Time Estimate: 0 ## Time Spent: 0 ## Summary Task1 ## Description Task1Description word Multiline #### Task ## State: Closed ## Blocked Reason ## Closed Reason ## Id: 2 ## Date Created: 1001 ## Date Closed: 1002 ## Date Due: ## Time Estimate: 0 ## Time Spent: 0 ## Summary Task2 ## Description Task2Description #### Pomodoro ## Time Remaining: 1500.000000 ## Running: false """, fileDouble.written_data)
def test_save_tasks(self): storage = Storage(TimeDouble()) task = Task("Task1", "Task1Description word\nMultiline", 10001) task.id = 1 task.state = "Blocked" task.blocked_reason = "BlockedReason" storage.tasks.append(task) task = Task("Task2", "Task2Description", 10002) task.id = 2 task.close(10003, "Test Reason") task.set_due_date(10004.1) task.time_spent = 100 storage.tasks.append(task) openDouble.reset() fileDouble = FileDouble() openDouble.add_file(fileDouble) storage.save('test_file') self.assertEqual('test_file', openDouble.filename[0]) self.assertEqual('w+', openDouble.mode[0]) self.assertEqual("""#### Task ## State: Blocked ## Blocked Reason BlockedReason ## Closed Reason ## Id: 1 ## Date Created: 10001 ## Date Closed: ## Date Due: ## Time Estimate: 0 ## Time Spent: 0 ## Summary Task1 ## Description Task1Description word Multiline #### Task ## State: Closed ## Blocked Reason ## Closed Reason Test Reason ## Id: 2 ## Date Created: 10002 ## Date Closed: 10003 ## Date Due: 10004 ## Time Estimate: 0 ## Time Spent: 100 ## Summary Task2 ## Description Task2Description """, fileDouble.written_data)
def load(self, filename): f = open(filename, 'r') f = FileWrapper(f) state = "Start" newtask = None newpomo = None skip_read = False while True: if not skip_read: line = f.readline() skip_read = False if line == "": break if state == "Start": if re.match("#### Task", line): newtask = Task("", "") state = "Task_State" skip_read = True if re.match("#### Pomodoro", line): newpomo = Pomo() state = "Pomo_Remaining" elif state == "Task_State": found, val = self._loadField(f, 'State', hasfield=True) if not found: return False newtask.state = val found, val = self._loadField(f, 'Blocked Reason', hasfield=True, multiline=True) if not found: return False if val is not None: newtask.blocked_reason = "".join(val).strip() found, val = self._loadField(f, 'Closed Reason', hasfield=True, multiline=True) if not found: return False if val is not None: newtask.closed_reason = "".join(val).strip() found, val = self._loadField(f, 'Id', hasfield=True) if not found: return False if val is not None: newtask.id = int(val) found, val = self._loadField(f, 'Date Created', hasfield=True) if not found: return False if val is not None: newtask.date_created = int(val) found, val = self._loadField(f, 'Date Closed', hasfield=True) if not found: return False if val is not None: newtask.date_closed = int(val) found, val = self._loadField(f, 'Date Due', hasfield=True) if not found: return False if val is not None: newtask.date_due = int(val) found, val = self._loadField(f, 'Time Estimate', hasfield=True) if not found: return False if val is not None: newtask.time_estimate = int(val) found, val = self._loadField(f, 'Time Spent', hasfield=True) if not found: return False if val is not None: newtask.time_spent = int(val) found, val = self._loadField(f, 'Summary', hasfield=True, multiline=True) if not found: return False if val is not None: newtask.summary = "".join(val).strip() found, val = self._loadField(f, 'Description', hasfield=True, multiline=True) if not found: return False if val is not None: newtask.description = "".join(val).strip() self.tasks.append(newtask) state = "End" elif state == "End": if re.match("#### Task", line) or re.match("#### Pomodoro", line): if re.match("#### Task", line): state = "Task_State" skip_read = True newtask = Task("", "") else: state = "Pomo_Remaining" newpomo = Pomo() elif state == "Pomo_Remaining": mo = re.match("## Time Remaining: (.*)", line) if mo: remainingTime = float(mo.group(1)) newpomo.set_remaining_time(remainingTime) self.pomo = newpomo state = "Pomo_Running" elif state == "Pomo_Running": mo = re.match("## Running: (.*)", line) if mo: if mo.group(1) == "true": state = "Pomo_SaveDate" else: state = "Start" elif state == "Pomo_SaveDate": mo = re.match("## Save Date: (.*)", line) if mo: saveDateUtc = float(mo.group(1)) elapsedSinceSave = self.time.time() - saveDateUtc remainingTime = newpomo.get_remaining_time(self.time.time()) - elapsedSinceSave newpomo.set_remaining_time( remainingTime if remainingTime > 0 else 0) newpomo.start(self.time.time()) state = "Start" if state == "End": state = "Start" f.close() return state == "Start"