def init_test(self, paths=None, key1=None, key2=None, val=None, debug=False): """Initialize a testable vimiv object saved as self.vimiv. Args: paths: Paths passed to vimiv. key1: List of keys of the sections for settings to be set. key2: List of keys for settings to be set. val: List of values for settings to be set. """ self.working_directory = os.getcwd() # Create vimiv class with settings, paths, ... self.vimiv = Vimiv(True) # True for running_tests self.vimiv.debug = debug options = GLib.VariantDict.new() bool_true = GLib.Variant("b", True) options.insert_value("temp-basedir", bool_true) self.vimiv.do_handle_local_options(options) # Set the required settings if key1: for i, section in enumerate(key1): self.vimiv.settings[section][key2[i]] = val[i] self.vimiv.register() self.vimiv.do_startup(self.vimiv) if paths: # Create a list of Gio.Files for vimiv.do_open files = [Gio.File.new_for_path(path) for path in paths] self.vimiv.do_open(files, len(paths), "") else: self.vimiv.activate_vimiv(self.vimiv)
class QuitTest(VimivTestCase): """Quit Tests.""" def setUp(self): """Recreate vimiv for every run.""" self.vimiv = Vimiv() self.init_test() def test_quit_with_running_threads(self): """Quit vimiv with external threads running.""" self.run_command("!sleep 0.2") self.vimiv.quit_wrapper() self.check_statusbar( "WARNING: Running external processes: sleep 0.2. Add ! to force.") p = self.vimiv["commandline"].running_processes[0] # Kill the subprocess self.assertFalse(p.poll()) self.vimiv.quit_wrapper(force=True) refresh_gui() self.assertEqual(p.poll(), -9) def test_clean_quit(self): """Quit vimiv and write history and log.""" self.run_command("!:", external=True) self.vimiv.quit_wrapper() histfile = os.path.join(GLib.get_user_data_dir(), "vimiv", "history") logfile = os.path.join(GLib.get_user_data_dir(), "vimiv", "vimiv.log") with open(histfile) as f: content = f.readlines() self.assertEqual(content, [":!:\n"]) with open(logfile) as f: content = f.readlines() self.assertIn("Exited", content[-1]) def test_quit_with_edited_image(self): """Quit vimiv with an edited image.""" # Fake a manipulation self.vimiv["manipulate"].manipulations = {} self.vimiv.quit_wrapper() self.check_statusbar("WARNING: Image has been edited, add ! to force") # Force quit self.vimiv.quit_wrapper(force=True) self.assertEqual(self.vimiv["manipulate"].manipulations, { "bri": 1, "con": 1, "sha": 1 }) refresh_gui()
class QuitTest(VimivTestCase): """Quit Tests.""" def setUp(self): """Recreate vimiv for every run.""" self.vimiv = Vimiv() self.init_test() def test_quit_with_running_threads(self): """Quit vimiv with external threads running.""" self.run_command("!sleep 0.2") self.vimiv.quit_wrapper() self.check_statusbar( "WARNING: Running external processes: sleep 0.2. Add ! to force.") p = self.vimiv["commandline"].running_processes[0] # Kill the subprocess self.assertFalse(p.poll()) self.vimiv.quit_wrapper(force=True) refresh_gui() self.assertEqual(p.poll(), -9) def test_clean_quit(self): """Quit vimiv without errors.""" self.vimiv.quit_wrapper()
def setUp(self): """Recreate vimiv for every run.""" self.vimiv = Vimiv() self.init_test()
def setUpClass(cls): # Get set in init_test as setUpClass will be overridden cls.working_directory = "" cls.vimiv = Vimiv() cls.init_test(cls)
class VimivTestCase(TestCase): """Wrapper Class of TestCase.""" @classmethod def setUpClass(cls): # Get set in init_test as setUpClass will be overridden cls.working_directory = "" cls.vimiv = Vimiv() cls.init_test(cls) def init_test(self, paths=None, key1=None, key2=None, val=None, debug=False): """Initialize a testable vimiv object saved as self.vimiv. Args: paths: Paths passed to vimiv. key1: List of keys of the sections for settings to be set. key2: List of keys for settings to be set. val: List of values for settings to be set. """ self.working_directory = os.getcwd() # Create vimiv class with settings, paths, ... self.vimiv = Vimiv(True) # True for running_tests self.vimiv.debug = debug options = GLib.VariantDict.new() bool_true = GLib.Variant("b", True) options.insert_value("temp-basedir", bool_true) self.vimiv.do_handle_local_options(options) # Set the required settings if key1: for i, section in enumerate(key1): self.vimiv.settings[section][key2[i]] = val[i] self.vimiv.register() self.vimiv.do_startup(self.vimiv) if paths: # Create a list of Gio.Files for vimiv.do_open files = [Gio.File.new_for_path(path) for path in paths] self.vimiv.do_open(files, len(paths), "") else: self.vimiv.activate_vimiv(self.vimiv) def run_command(self, command, external=False): """Run a command in the command line. Args: command: The command to run. external: If True, run an external command and wait for it to finish. """ self.vimiv["commandline"].focus(command) self.vimiv["commandline"].handler(self.vimiv["commandline"].entry) if external: while self.vimiv["commandline"].running_processes: self.vimiv["commandline"].running_processes[0].wait() time.sleep(0.001) def run_search(self, string): """Search for string from the command line.""" self.vimiv["commandline"].entry.set_text("/" + string) self.vimiv["commandline"].handler(self.vimiv["commandline"].entry) def check_statusbar(self, expected_text): """Check statusbar for text.""" statusbar_text = self.vimiv["statusbar"].left_label.get_text() self.assertEqual(expected_text, statusbar_text) @classmethod def tearDownClass(cls): cls.vimiv.quit() os.chdir(cls.working_directory)
#!/usr/bin/env python3 # vim: ft=python fileencoding=utf-8 sw=4 et sts=4 """Vimiv executable.""" import signal import sys from vimiv.app import Vimiv if __name__ == '__main__': signal.signal(signal.SIGINT, signal.SIG_DFL) # ^C Vimiv().run(sys.argv)