def test_is_active_fails(self): """ This method tests that 'screensaver mode' activity does change. The expected result of the test is that the is_active method returns inactivity. """ input = "---\n---\n---" previous = "---\n---\n---" sm = ScreensaverMode(input, previous) for _ in range(0, 3): # For each frame of the pause # Assert the mode is still active. assert sm.is_active() sm.get_display_pattern() for i, _ in enumerate(previous.split("\n")): # For each cell in the previous pattern. # Assert the mode is still active. assert sm.is_active() # Calculate the next pattern to be displayed. sm.get_display_pattern() # Assert that the mode is no longer active. assert not sm.is_active()
def test_is_active(self): """ This method tests that 'screensaver mode' is still active, especially in its clearing state. The expected result of this tests is for the check to show the mode is still active. """ input = "-*-\n-*-\n-*-" previous = "---\n---\n---" sm = ScreensaverMode(input, previous) for _ in range(0, 3): # For each frame of the pause # Assert the mode is still active. assert sm.is_active() sm.get_display_pattern() for i, _ in enumerate(previous.split("\n")): # For each cell in the previous pattern # Assert the mode is still active. assert sm.is_active() # Calculate the next pattern to be displayed. sm.get_display_pattern() # Assert the mode is still active. assert sm.is_active() # Calculate the next pattern to be displayed. sm.get_display_pattern() # Assert the mode is still active. assert sm.is_active()
def start(self): """ Starts the application: begins checking the current time and working out what information needs to be sent to the display at that time. """ mode = ScreensaverMode(self._db_helper.get_random_screensaver()) last_pattern = None last_check_time = datetime.datetime.now() - datetime.timedelta(minutes=10) while True: # Check the current time and make it accurate to the second current_time = datetime.datetime.now() min_current_time = minutify(current_time) if (current_time.minute % 5) == 0 and (min_current_time > last_check_time): # If the current time is on one of the five min. intervals, attempt to pull a pattern from the # internal database. last_check_time = min_current_time t_format = "%Y-%m-%d %H:%M:00.000000" pattern = self._db_helper.get_run_for_time(current_time.strftime(t_format)) if pattern: # If a pattern is successfully pulled, run the display's 'run mode' on it. mode = RunMode(pattern) else: # Otherwise pull a random screensaver from the internal database and run that in 'screensaver # mode' mode = ScreensaverMode(self._db_helper.get_random_screensaver(), last_pattern) if not mode.is_active(): # If the current pattern finishes before the five minute timer has stopped, switch to # screensaver mode mode = ScreensaverMode(self._db_helper.get_random_screensaver(), last_pattern) # Retrieve the latest pattern to be sent to the display last_pattern = mode.get_display_pattern() # Send the pattern to the display controller for printing. self._display_controller.output_pattern(last_pattern) # While not working, sleep sleep_until_time = current_time + datetime.timedelta(seconds=sleep_time) time.sleep((sleep_until_time - datetime.datetime.now()).microseconds / 1000000) self.logger.warn("Outputted pattern at: %s" % current_time)