def test_save_game_override(gui): """Test saving a game.""" _copy_savegame() old_size = os.path.getsize(SavegameManager.create_filename('boatbuilder')) # FIXME escape doesn't work #gui.press_key(gui.Key.ESCAPE) gui.trigger('mainhud/gameMenuButton') def func1(): gui.find('savegamelist').select(u'boatbuilder') # handle "do you want to override file" popup def func2(): gui.trigger('popup_window/okButton') with gui.handler(func2): gui.trigger('load_game_window/okButton') with gui.handler(func1): gui.trigger('menu/button_images/savegameButton') assert os.path.exists(SavegameManager.create_filename('boatbuilder')) new_size = os.path.getsize(SavegameManager.create_filename('boatbuilder')) assert old_size != new_size
def test_delete_game(gui): """Test deleting a savegame.""" _copy_savegame('boatbuilder') _copy_savegame('ai_settlement') assert os.path.exists(SavegameManager.create_filename('boatbuilder')) assert os.path.exists(SavegameManager.create_filename('ai_settlement')) def confirm_deletion(): def close_dialog(): gui.trigger('load_game_window/cancelButton') with gui.handler(close_dialog): gui.trigger('popup_window/okButton') def func1(): gui.find('savegamelist').select(u'boatbuilder') with gui.handler(confirm_deletion): gui.trigger('load_game_window/deleteButton') with gui.handler(func1): gui.trigger('menu/load_button') assert not os.path.exists(SavegameManager.create_filename('boatbuilder')) assert os.path.exists(SavegameManager.create_filename('ai_settlement'))
def test_save_game_override(gui): """Test saving a game.""" _copy_savegame() old_size = os.path.getsize(SavegameManager.create_filename('boatbuilder')) # FIXME escape doesn't work #gui.press_key(gui.Key.ESCAPE) gui.trigger('mainhud', 'gameMenuButton') def func1(): gui.find('savegamelist').select(u'boatbuilder') # handle "do you want to override file" popup def func2(): gui.trigger('popup_window', 'okButton') with gui.handler(func2): gui.trigger('load_game_window', 'okButton') with gui.handler(func1): gui.trigger('menu', 'savegameButton') assert os.path.exists(SavegameManager.create_filename('boatbuilder')) new_size = os.path.getsize(SavegameManager.create_filename('boatbuilder')) assert old_size != new_size
def test_delete_game(gui): """Test deleting a savegame.""" _copy_savegame('boatbuilder') _copy_savegame('ai_settlement') assert os.path.exists(SavegameManager.create_filename('boatbuilder')) assert os.path.exists(SavegameManager.create_filename('ai_settlement')) def confirm_deletion(): def close_dialog(): gui.trigger('load_game_window', 'cancelButton') with gui.handler(close_dialog): gui.trigger('popup_window', 'okButton') def func1(): gui.find('savegamelist').select(u'boatbuilder') with gui.handler(confirm_deletion): gui.trigger('load_game_window', 'deleteButton') with gui.handler(func1): gui.trigger('menu', 'load_button') assert not os.path.exists(SavegameManager.create_filename('boatbuilder')) assert os.path.exists(SavegameManager.create_filename('ai_settlement'))
def save(self, savegamename=None): """Saves a game @param savegamename: string with the full path of the savegame file or None to let user pick one @return: bool, whether no error happened (user aborting dialog means success) """ if savegamename is None: savegamename = self.gui.show_select_savegame(mode='save') if savegamename is None: return True # user aborted dialog savegamename = SavegameManager.create_filename(savegamename) savegame = savegamename assert os.path.isabs(savegame) self.log.debug("Session: Saving to %s", savegame) try: if os.path.exists(savegame): os.unlink(savegame) shutil.copyfile(PATHS.SAVEGAME_TEMPLATE, savegame) self.savecounter += 1 db = DbReader(savegame) except IOError, e: # usually invalid filename headline = _("Failed to create savegame file") descr = _( "There has been an error while creating your savegame file.") advice = _( "This usually means that the savegame name contains unsupported special characters." ) self.gui.show_error_popup(headline, descr, advice, unicode(e)) return self.save( ) # retry with new savegamename entered by the user
def save(self, savegamename=None): """Saves a game @param savegamename: string with the full path of the savegame file or None to let user pick one @return: bool, whether no error happened (user aborting dialog means success) """ if savegamename is None: savegamename = self.gui.show_select_savegame(mode='save') if savegamename is None: return True # user aborted dialog savegamename = SavegameManager.create_filename(savegamename) savegame = savegamename assert os.path.isabs(savegame) self.log.debug("Session: Saving to %s", savegame) try: if os.path.exists(savegame): os.unlink(savegame) shutil.copyfile(PATHS.SAVEGAME_TEMPLATE, savegame) self.savecounter += 1 db = DbReader(savegame) except IOError, e: # usually invalid filename headline = _("Failed to create savegame file") descr = _("There has been an error while creating your savegame file.") advice = _("This usually means that the savegame name contains unsupported special characters.") self.gui.show_error_popup(headline, descr, advice, unicode(e)) return self.save() # retry with new savegamename entered by the user
def save(self, savegamename=None): """Saves a game @param savegamename: string with the full path of the savegame file or None to let user pick one @return: bool, whether save was successfull """ if savegamename is None: savegamename = self.gui.show_select_savegame(mode='save') if savegamename is None: return False # user aborted dialog savegamename = SavegameManager.create_filename(savegamename) savegame = savegamename assert os.path.isabs(savegame) self.log.debug("Session: Saving to %s", savegame) try: if os.path.exists(savegame): os.unlink(savegame) shutil.copyfile(PATHS.SAVEGAME_TEMPLATE, savegame) self.savecounter += 1 db = DbReader(savegame) except IOError: # usually invalid filename self.gui.show_popup(_("Invalid filename"), _("You entered an invalid filename.")) return self.save( ) # retry with new savegamename entered by the user # this must not happen with quicksave/autosave try: db("BEGIN") self.world.save(db) #self.manager.save(db) self.view.save(db) self.ingame_gui.save(db) self.scenario_eventhandler.save(db) for instance in self.selected_instances: db("INSERT INTO selected(`group`, id) VALUES(NULL, ?)", instance.worldid) for group in xrange(len(self.selection_groups)): for instance in self.selection_groups[group]: db("INSERT INTO selected(`group`, id) VALUES(?, ?)", group, instance.worldid) SavegameManager.write_metadata(db, self.savecounter) # make sure everything get's written now db("COMMIT") db.close() return True except: print "Save Exception" traceback.print_exc() db.close() # close db before delete os.unlink(savegame) # remove invalid savegamefile return False
def func1(): gui.find('savegamelist').select(u'boatbuilder') with mock.patch('horizons.main.start_singleplayer') as start_mock: gui.trigger('load_game_window/okButton') # we need to run the game for a bit, because start_singleplayer isn't # called right away, probably because load/save is a dialog gui.run(1) options = start_mock.call_args[0][0] assert options.game_identifier == SavegameManager.create_filename('boatbuilder')
def func1(): gui.find('savegamelist').select(u'boatbuilder') with mock.patch('horizons.main.start_singleplayer') as start_mock: gui.trigger('load_game_window', 'okButton') # we need to run the game for a bit, because start_singleplayer isn't # called right away, probably because load/save is a dialog gui.run(1) options = start_mock.call_args[0][0] assert options.game_identifier == SavegameManager.create_filename( 'boatbuilder')
def save(self, savegamename=None): """Saves a game @param savegamename: string with the full path of the savegame file or None to let user pick one @return: bool, whether save was successfull """ if savegamename is None: savegamename = self.gui.show_select_savegame(mode='save') if savegamename is None: return False # user aborted dialog savegamename = SavegameManager.create_filename(savegamename) savegame = savegamename assert os.path.isabs(savegame) self.log.debug("Session: Saving to %s", savegame) try: if os.path.exists(savegame): os.unlink(savegame) shutil.copyfile(PATHS.SAVEGAME_TEMPLATE, savegame) self.savecounter += 1 db = DbReader(savegame) except IOError: # usually invalid filename self.gui.show_popup(_("Invalid filename"), _("You entered an invalid filename.")) return self.save() # retry with new savegamename entered by the user # this must not happen with quicksave/autosave try: db("BEGIN") self.world.save(db) #self.manager.save(db) self.view.save(db) self.ingame_gui.save(db) self.scenario_eventhandler.save(db) for instance in self.selected_instances: db("INSERT INTO selected(`group`, id) VALUES(NULL, ?)", instance.worldid) for group in xrange(len(self.selection_groups)): for instance in self.selection_groups[group]: db("INSERT INTO selected(`group`, id) VALUES(?, ?)", group, instance.worldid) SavegameManager.write_metadata(db, self.savecounter) # make sure everything get's written now db("COMMIT") db.close() return True except: print "Save Exception" traceback.print_exc() db.close() # close db before delete os.unlink(savegame) # remove invalid savegamefile return False
def test_delete_game_abort(gui): """Try to delete a game, but abort when ask for confirmation.""" _copy_savegame('boatbuilder') assert os.path.exists(SavegameManager.create_filename('boatbuilder')) def confirm_deletion(): def close_dialog(): gui.trigger('load_game_window/cancelButton') with gui.handler(close_dialog): gui.trigger('popup_window/cancelButton') def func1(): gui.find('savegamelist').select(u'boatbuilder') with gui.handler(confirm_deletion): gui.trigger('load_game_window/deleteButton') with gui.handler(func1): gui.trigger('menu/load_button') assert os.path.exists(SavegameManager.create_filename('boatbuilder'))
def test_delete_game_abort(gui): """Try to delete a game, but abort when ask for confirmation.""" _copy_savegame('boatbuilder') assert os.path.exists(SavegameManager.create_filename('boatbuilder')) def confirm_deletion(): def close_dialog(): gui.trigger('load_game_window', 'cancelButton') with gui.handler(close_dialog): gui.trigger('popup_window', 'cancelButton') def func1(): gui.find('savegamelist').select(u'boatbuilder') with gui.handler(confirm_deletion): gui.trigger('load_game_window', 'deleteButton') with gui.handler(func1): gui.trigger('menu', 'load_button') assert os.path.exists(SavegameManager.create_filename('boatbuilder'))
def save(self, savegamename=None): """Saves a game @param savegamename: string with the full path of the savegame file or None to let user pick one @return: bool, whether no error happened (user aborting dialog means success) """ if savegamename is None: savegamename = self.ingame_gui.show_select_savegame(mode='save') if savegamename is None: return True # user aborted dialog savegamename = SavegameManager.create_filename(savegamename) success = self._do_save(savegamename) if success: self.ingame_gui.message_widget.add('SAVED_GAME') return success
def test_save_game_new_file(gui): """Test saving a game.""" # FIXME escape doesn't work #gui.press_key(gui.Key.ESCAPE) gui.trigger('mainhud/gameMenuButton') def func1(): gui.find('savegamefile').write('testsave') gui.trigger('load_game_window/okButton') with gui.handler(func1): gui.trigger('menu/button_images/savegameButton') assert os.path.exists(SavegameManager.create_filename('testsave'))
def test_save_game_new_file(gui): """Test saving a game.""" # FIXME escape doesn't work #gui.press_key(gui.Key.ESCAPE) gui.trigger('mainhud', 'gameMenuButton') def func1(): gui.find('savegamefile').write('testsave') gui.trigger('load_game_window', 'okButton') with gui.handler(func1): gui.trigger('menu', 'savegameButton') assert os.path.exists(SavegameManager.create_filename('testsave'))