from unittest import TestCase from lutris.installer.errors import ScriptingError from lutris.installer.interpreter import ScriptInterpreter TEST_INSTALLER = { "script": {"game": {"exe": "test"}}, "version": "test", "game_slug": "test", "name": "test", "slug": "test", "runner": "linux", } class MockInterpreter(ScriptInterpreter): """A script interpreter mock.""" runner = "linux" class TestScriptInterpreter(TestCase): def test_script_with_correct_values_is_valid(self): installer = { "runner": "linux", "script": {"exe": "doom"}, "name": "Doom", "slug": "doom", "game_slug": "doom", "version": "doom-gzdoom", } interpreter = ScriptInterpreter(installer, None) self.assertEqual(interpreter.installer.game_name, "Doom") self.assertFalse(interpreter.installer.get_errors()) def test_move_requires_src_and_dst(self): script = { "foo": "bar", "script": {}, "name": "missing_runner", "game_slug": "missing-runner", "slug": "some-slug", "runner": "linux", "version": "bar-baz", } with self.assertRaises(ScriptingError): interpreter = ScriptInterpreter(script, None) interpreter._get_move_paths({}) def test_get_command_returns_a_method(self): interpreter = MockInterpreter(TEST_INSTALLER, None) command, params = interpreter._map_command({"move": "whatever"}) self.assertIn("bound method CommandsMixin.move", str(command)) self.assertEqual(params, "whatever") def test_get_command_doesnt_return_private_methods(self): interpreter = MockInterpreter(TEST_INSTALLER, None) with self.assertRaises(ScriptingError) as ex: interpreter._map_command({"_substitute": "foo"}) self.assertEqual(ex.exception.message, 'The command "substitute" does not exist.')