Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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'))
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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'))
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
	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
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
	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')
Ejemplo n.º 9
0
    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')
Ejemplo n.º 10
0
	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
Ejemplo n.º 11
0
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'))
Ejemplo n.º 12
0
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'))
Ejemplo n.º 13
0
	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
Ejemplo n.º 14
0
    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
Ejemplo n.º 15
0
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'))
Ejemplo n.º 16
0
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'))