Example #1
0
    def setUp(self):
        new_dota_dir()
        self.manager = ModManager()
        #         self.real_method = self.manager._dota_path
        #         self.manager._dota_path = Mock(return_value = mkdtemp())

        self.mod1_folder = join(self.manager._d2mp_path(), "mod1")
        self.mod1_info_file = join(self.mod1_folder, "addoninfo.txt")

        self.mod2_folder = join(self.manager._d2mp_path(), "mod2")
        self.mod2_info_file = join(self.mod2_folder, "addoninfo.txt")

        self.mod_to_delete_folder = join(self.manager._d2mp_path(),
                                         "mod_to_delete")
        self.mod_to_delete_info_file = join(self.mod2_folder, "addoninfo.txt")

        self.mods = [basename(f) for f in [self.mod1_folder, self.mod2_folder]]

        for folder in [
                self.mod1_folder, self.mod2_folder, self.mod_to_delete_folder
        ]:
            if not isdir(folder): os.mkdir(folder)

        for f in [
                self.mod1_info_file, self.mod2_info_file,
                self.mod_to_delete_info_file
        ]:
            if not isfile(f): open(f, "w").close()

        shutil.rmtree(self.manager._mod_path())
Example #2
0
 def _init_message(self):
     man = ModManager()
     return {
         "msg": "init",
         "SteamIDs": man.steam_ids(),
         "Mods": man.mods_as_json(),
         "Version": man.get_version(),
     }
 def _init_message(self):
     man = ModManager()
     return {
         "msg": "init",
         "SteamIDs": man.steam_ids(),
         "Mods": man.mods_as_json(),
         "Version": man.VERSION, 
     }
Example #4
0
    def setUp(self):
        new_dota_dir()
        ModManager.install_mod = Mock(side_effect=self.send_reply)
        XSocketsClient.start = Mock()
        ConnectionManager.send = Mock()

        self.manager = ModManager()
        self.con = ConnectionManager()
        self.manager.signals.message.connect(self.con.send)
    def setUp(self):
        new_dota_dir()
        self.manager = ModManager()
#         self.real_method = self.manager._dota_path 
#         self.manager._dota_path = Mock(return_value = mkdtemp())

        self.mod1_folder = join(self.manager._d2mp_path(), "mod1")
        self.mod1_info_file = join(self.mod1_folder, "addoninfo.txt")
        
        self.mod2_folder = join(self.manager._d2mp_path(), "mod2")
        self.mod2_info_file = join(self.mod2_folder, "addoninfo.txt")
        
        
        self.mod_to_delete_folder = join(self.manager._d2mp_path(), "mod_to_delete")
        self.mod_to_delete_info_file = join(self.mod2_folder, "addoninfo.txt")
        
        self.mods = [basename(f) for f in [self.mod1_folder, self.mod2_folder]]
        
        for folder in [self.mod1_folder, self.mod2_folder, self.mod_to_delete_folder]:
            if not isdir(folder): os.mkdir(folder)
        
        for f in [self.mod1_info_file, self.mod2_info_file, self.mod_to_delete_info_file]:
            if not isfile(f): open(f, "w").close()
        
        shutil.rmtree(self.manager._mod_path())
Example #6
0
class ModInstallTest(TestCase):
    def send_reply(self, *args, **kwargs):
        self.manager.signals.message.emit("ready")

    def setUp(self):
        new_dota_dir()
        ModManager.install_mod = Mock(side_effect=self.send_reply)
        XSocketsClient.start = Mock()
        ConnectionManager.send = Mock()

        self.manager = ModManager()
        self.con = ConnectionManager()
        self.manager.signals.message.connect(self.con.send)

    def tearDown(self):
        shutil.rmtree(self.manager._d2mp_path())

    def test_install_mod(self):
        self.con.handle_command({
            "msg": "installmod",
            "url": "someurl",
            "Mod": {
                "name": "mod_name",
                "version": "mod_version"
            }
        })

        self.manager.install_mod.assert_called_with("mod_name", "mod_version",
                                                    "someurl")
        self.con.send.assert_called_with("ready")
 def setUp(self):
     new_dota_dir()
     ModManager.install_mod = Mock(side_effect = self.send_reply)
     XSocketsClient.start = Mock()
     ConnectionManager.send = Mock()
      
     self.manager = ModManager()
     self.con = ConnectionManager()
     self.manager.signals.message.connect(self.con.send)
class ModInstallTest(TestCase):
    def send_reply(self, *args, **kwargs):
        self.manager.signals.message.emit("ready")
    
    def setUp(self):
        new_dota_dir()
        ModManager.install_mod = Mock(side_effect = self.send_reply)
        XSocketsClient.start = Mock()
        ConnectionManager.send = Mock()
         
        self.manager = ModManager()
        self.con = ConnectionManager()
        self.manager.signals.message.connect(self.con.send)
         
    def tearDown(self):
        shutil.rmtree(self.manager._d2mp_path())
         
    def test_install_mod(self):
        self.con.handle_command({"msg": "installmod", "url":"someurl", "Mod": {"name":"mod_name", "version":"mod_version" }})
         
        self.manager.install_mod.assert_called_with("mod_name", "mod_version", "someurl")
        self.con.send.assert_called_with("ready")
Example #9
0
 def _command_install_mod(self, content):
     url = content["url"]
     mod_name = content["Mod"]["name"]
     version = content["Mod"]["version"]
     self.message.emit("Installing Mod %s v%s" % (mod_name, version))
     ModManager().install_mod(mod_name, version, url)
Example #10
0
 def _create_mod_manager(self):
     self.manager = ModManager()
     self.manager.mod_game_info()
     self.manager.signals.message.connect(self.show_message_from_mod_manager)
     self.manager.signals.error.connect(self.show_error_from_mod_manager)
Example #11
0
 def show_mod_list(self):
     self.show_message("Mod List", ModManager().mod_names_as_string())
class ModTest(TestCase):  
    
    def test_singleton(self):
        man1 = ModManager()
        man2 = ModManager()
         
        self.assertEqual(man1, man2)
        
    def setUp(self):
        new_dota_dir()
        self.manager = ModManager()
#         self.real_method = self.manager._dota_path 
#         self.manager._dota_path = Mock(return_value = mkdtemp())

        self.mod1_folder = join(self.manager._d2mp_path(), "mod1")
        self.mod1_info_file = join(self.mod1_folder, "addoninfo.txt")
        
        self.mod2_folder = join(self.manager._d2mp_path(), "mod2")
        self.mod2_info_file = join(self.mod2_folder, "addoninfo.txt")
        
        
        self.mod_to_delete_folder = join(self.manager._d2mp_path(), "mod_to_delete")
        self.mod_to_delete_info_file = join(self.mod2_folder, "addoninfo.txt")
        
        self.mods = [basename(f) for f in [self.mod1_folder, self.mod2_folder]]
        
        for folder in [self.mod1_folder, self.mod2_folder, self.mod_to_delete_folder]:
            if not isdir(folder): os.mkdir(folder)
        
        for f in [self.mod1_info_file, self.mod2_info_file, self.mod_to_delete_info_file]:
            if not isfile(f): open(f, "w").close()
        
        shutil.rmtree(self.manager._mod_path())
        
    
    def tearDown(self):
        shutil.rmtree(self.manager._d2mp_path())
#         self.manager._dota_path = self.real_method
    
    def test_mod_names(self):
        for mod in self.mods:
            self.assertIn(mod, self.manager.mod_names_as_string(), "mods \"%s\" was not in the mod list!" %(mod))
        
    def test_setting_mod(self):
        mod1_name, mod2_name = self.mods
        
        self.assertNotIn(mod2_name, os.listdir(self.manager._mod_path()), "mod2 should NOT be active now")
        self.assertNotIn(mod1_name, os.listdir(self.manager._mod_path()), "mod1 should NOT be active now")    
        self.manager.set_mod(mod1_name)
        self.assertIn(mod1_name, self.manager.get_active_mod(), "mod1 should be active now")
        
        self.assertNotIn(mod2_name, os.listdir(self.manager._mod_path()), "mod2 should NOT be active now")        
        self.manager.set_mod(mod2_name)
        self.assertIn(mod2_name, self.manager.get_active_mod(), "mod2 should be active now")
        self.assertNotIn(mod1_name, os.listdir(self.manager._mod_path()), "mod1 should NOT be active now")    
        
    def test_active_mod(self):
        mod1_name, mod2_name = self.mods
        self.assertIsNone(self.manager.get_active_mod(), "there should be no active mod")
        
        self.manager.set_mod(mod1_name)
        self.assertEqual(mod1_name, self.manager.get_active_mod(), "mod1 should be active")
        
        self.manager.set_mod(mod2_name)
        self.assertEqual(mod2_name, self.manager.get_active_mod(), "mod1 should be active")
        
        self.manager.delete_mods()
        self.assertIsNone(self.manager.get_active_mod(), "there should be no active mod")
        
    
    def test_deleting_mod(self):
        mod_name = basename(self.mod_to_delete_folder)
        self.assertIn(mod_name, os.listdir(self.manager._d2mp_path()), "mod should be in d2mp folder")
        self.assertIn(mod_name, self.manager.mod_names(), "mod should be in cache")
        self.manager.delete_mod(mod_name)
        self.assertNotIn(mod_name, os.listdir(self.manager._d2mp_path()), "mod should NOT be in d2mp folder")
        self.assertNotIn(mod_name, self.manager.mod_names(), "mod should NOT be in cache")    

    def test_delete_all_mods(self):
        mod1, mod2 = self.mods
        mod3 = basename(self.mod_to_delete_folder)
        
        for mod in [mod1, mod2, mod3]:
            self.assertIn(mod, os.listdir(self.manager._d2mp_path()), "all mods should be present")
            self.assertIn(mod, self.manager.mod_names(), "all mods should be present in cache")
        
        self.manager.delete_mods()
        
        self.assertTrue(len(os.listdir(self.manager._d2mp_path())) == 0, "no mods should be present in d2mp folder anymore")
        self.assertTrue(len(os.listdir(self.manager._mod_path())) == 0, "no mods should be present in mod folder anymore")
        
        self.assertTrue(len(self.manager._mods()) == 0, "no mods should be present in cache anymore")
    def setUp(self):
        self.dota_info_normal = """
            "GameInfo"
            {
              game  "DOTA 2"
              gamelogo 1
              type multiplayer_only
              nomodels 1
              nohimodel 1
              nocrosshair 0
              GameData        "dota.fgd"
              SupportsDX8 0
            
            
              FileSystem
              {
                SteamAppId        816
                ToolsAppId        211
                
                SearchPaths
                {
                  Game        |gameinfo_path|.
                  Game        platform
                }
              }
            }"""
        
        self.dota_info_modded = """
             "GameInfo"
            {
              game  "DOTA 2"
              gamelogo 1
              type multiplayer_only
              nomodels 1
              nohimodel 1
              nocrosshair 0
              GameData        "dota.fgd"
              SupportsDX8 0
            
            
              FileSystem
              {
                SteamAppId        816
                ToolsAppId        211
                
                SearchPaths
                {
                  Game        |gameinfo_path|.
                  Game        platform
                  Game        |gameinfo_path|addons\d2moddin
                }
              }
            }"""
    
        new_dota_dir()
        self.manager = ModManager()
#         self.real_method = self.manager._dota_path 
#         self.manager._dota_path = Mock(return_value = mkdtemp())
        dota_subdir = join(self.manager._dota_path(), "dota")
        if not isdir(dota_subdir): mkdir(dota_subdir)
        write_to_file(self.manager.dota_info_file(), self.dota_info_normal)
class GameInfoTest(TestCase):
    
    def setUp(self):
        self.dota_info_normal = """
            "GameInfo"
            {
              game  "DOTA 2"
              gamelogo 1
              type multiplayer_only
              nomodels 1
              nohimodel 1
              nocrosshair 0
              GameData        "dota.fgd"
              SupportsDX8 0
            
            
              FileSystem
              {
                SteamAppId        816
                ToolsAppId        211
                
                SearchPaths
                {
                  Game        |gameinfo_path|.
                  Game        platform
                }
              }
            }"""
        
        self.dota_info_modded = """
             "GameInfo"
            {
              game  "DOTA 2"
              gamelogo 1
              type multiplayer_only
              nomodels 1
              nohimodel 1
              nocrosshair 0
              GameData        "dota.fgd"
              SupportsDX8 0
            
            
              FileSystem
              {
                SteamAppId        816
                ToolsAppId        211
                
                SearchPaths
                {
                  Game        |gameinfo_path|.
                  Game        platform
                  Game        |gameinfo_path|addons\d2moddin
                }
              }
            }"""
    
        new_dota_dir()
        self.manager = ModManager()
#         self.real_method = self.manager._dota_path 
#         self.manager._dota_path = Mock(return_value = mkdtemp())
        dota_subdir = join(self.manager._dota_path(), "dota")
        if not isdir(dota_subdir): mkdir(dota_subdir)
        write_to_file(self.manager.dota_info_file(), self.dota_info_normal)

#     def tearDown(self):
#         self.manager._dota_path = self.real_method

    def test_is_modded_tester(self):
        write_to_file(self.manager.dota_info_file(), self.dota_info_normal)
        self.assertFalse(self.manager.is_modded(), "should NOT be modded")
        
        write_to_file(self.manager.dota_info_file(), self.dota_info_modded)
        self.assertTrue(self.manager.is_modded(), "should be modded")
        

    def test_mod_game_info(self):
        
        self.assertFalse(self.manager.is_modded(), "game info schould NOT be modded at the beginning")
        
        self.manager.mod_game_info()
        self.assertTrue(self.manager.is_modded(), "game info schould be modded now")
        
    
    def test_unmod_game_info(self):
        self.manager.mod_game_info()
        self.assertTrue(self.manager.is_modded(), "game info schould be modded at the beginning")
        
        self.manager.unmod_game_info()
        self.assertFalse(self.manager.is_modded(), "game info schould NOT be modded anymore")
Example #15
0
 def _command_del_mod(self, content):
     mod_name = content["Mod"]["name"]
     version = content["Mod"]["version"]
     self.message.emit("Uninstalling Mod %s v%s" % (mod_name, version))
     ModManager().delete_mod(mod_name, version)
Example #16
0
 def _command_set_mod(self, content):
     ModManager().set_mod(content["Mod"]["name"])
Example #17
0
class GameInfoTest(TestCase):
    def setUp(self):
        self.dota_info_normal = """
            "GameInfo"
            {
              game  "DOTA 2"
              gamelogo 1
              type multiplayer_only
              nomodels 1
              nohimodel 1
              nocrosshair 0
              GameData        "dota.fgd"
              SupportsDX8 0
            
            
              FileSystem
              {
                SteamAppId        816
                ToolsAppId        211
                
                SearchPaths
                {
                  Game        |gameinfo_path|.
                  Game        platform
                }
              }
            }"""

        self.dota_info_modded = """
             "GameInfo"
            {
              game  "DOTA 2"
              gamelogo 1
              type multiplayer_only
              nomodels 1
              nohimodel 1
              nocrosshair 0
              GameData        "dota.fgd"
              SupportsDX8 0
            
            
              FileSystem
              {
                SteamAppId        816
                ToolsAppId        211
                
                SearchPaths
                {
                  Game        |gameinfo_path|.
                  Game        platform
                  Game        |gameinfo_path|addons\d2moddin
                }
              }
            }"""

        new_dota_dir()
        self.manager = ModManager()
        #         self.real_method = self.manager._dota_path
        #         self.manager._dota_path = Mock(return_value = mkdtemp())
        dota_subdir = join(self.manager._dota_path(), "dota")
        if not isdir(dota_subdir): mkdir(dota_subdir)
        write_to_file(self.manager.dota_info_file(), self.dota_info_normal)

#     def tearDown(self):
#         self.manager._dota_path = self.real_method

    def test_is_modded_tester(self):
        write_to_file(self.manager.dota_info_file(), self.dota_info_normal)
        self.assertFalse(self.manager.is_modded(), "should NOT be modded")

        write_to_file(self.manager.dota_info_file(), self.dota_info_modded)
        self.assertTrue(self.manager.is_modded(), "should be modded")

    def test_mod_game_info(self):

        self.assertFalse(self.manager.is_modded(),
                         "game info schould NOT be modded at the beginning")

        self.manager.mod_game_info()
        self.assertTrue(self.manager.is_modded(),
                        "game info schould be modded now")

    def test_unmod_game_info(self):
        self.manager.mod_game_info()
        self.assertTrue(self.manager.is_modded(),
                        "game info schould be modded at the beginning")

        self.manager.unmod_game_info()
        self.assertFalse(self.manager.is_modded(),
                         "game info schould NOT be modded anymore")
Example #18
0
    def uninstall(self):
        ModManager().delete_mods()
#         ModManager().uninstall_d2mp()
        self.exit()
Example #19
0
    def setUp(self):
        self.dota_info_normal = """
            "GameInfo"
            {
              game  "DOTA 2"
              gamelogo 1
              type multiplayer_only
              nomodels 1
              nohimodel 1
              nocrosshair 0
              GameData        "dota.fgd"
              SupportsDX8 0
            
            
              FileSystem
              {
                SteamAppId        816
                ToolsAppId        211
                
                SearchPaths
                {
                  Game        |gameinfo_path|.
                  Game        platform
                }
              }
            }"""

        self.dota_info_modded = """
             "GameInfo"
            {
              game  "DOTA 2"
              gamelogo 1
              type multiplayer_only
              nomodels 1
              nohimodel 1
              nocrosshair 0
              GameData        "dota.fgd"
              SupportsDX8 0
            
            
              FileSystem
              {
                SteamAppId        816
                ToolsAppId        211
                
                SearchPaths
                {
                  Game        |gameinfo_path|.
                  Game        platform
                  Game        |gameinfo_path|addons\d2moddin
                }
              }
            }"""

        new_dota_dir()
        self.manager = ModManager()
        #         self.real_method = self.manager._dota_path
        #         self.manager._dota_path = Mock(return_value = mkdtemp())
        dota_subdir = join(self.manager._dota_path(), "dota")
        if not isdir(dota_subdir): mkdir(dota_subdir)
        write_to_file(self.manager.dota_info_file(), self.dota_info_normal)
Example #20
0
class SingleApplication(QApplication):
    def __init__(self, *args):
        QApplication.__init__(self, *args)
        self._memory = QSharedMemory(self)
        self._memory.setKey("d2mp")
        if self._memory.attach():
            self._running = True
        else:
            self._running = False
            if not self._memory.create(1):
                raise RuntimeError(self._memory.errorString().toLocal8Bit().data())

    def is_running(self):
        return self._running
    
    def exec_(self):
        self._create_tray_icon()
        self._create_mod_manager()
        self._start_file_watcher()
        self._create_socket()
        Settings()
        
        return super(SingleApplication, self).exec_()
    def _create_mod_manager(self):
        self.manager = ModManager()
        self.manager.mod_game_info()
        self.manager.signals.message.connect(self.show_message_from_mod_manager)
        self.manager.signals.error.connect(self.show_error_from_mod_manager)
    
    def _create_socket(self):    
        self.socket = ConnectionManager()
        
        self.manager.signals.contact_server.connect(self.socket.send)
        
        self.socket.message.connect(self.show_message_from_socket)
        self.socket.error.connect(self.show_error_from_socket)
        
        
    @property
    def _watcher_file_name(self):
        return "d2mp.pid"
    
    def _start_file_watcher(self):
        self.watcher = QFileSystemWatcher()
        self.watcher_file_path =  join(abspath("."), self._watcher_file_name)
        log.DEBUG("creating watcher file: %s" %(self.watcher_file_path))
        write_to_file(self.watcher_file_path, "Delete this file to shutdown D2MP\n")
        self.watcher.addPath(abspath("."))
        self.watcher.directoryChanged.connect(self._watcher_changed_callback)
    
    def _watcher_changed_callback(self, val):
        if self._watcher_file_name not in os.listdir(val): 
            secs = 3
            self.show_message("Shutdown", "Watcher file was deleted. D2MP will shotdown in %d seconds." %(secs))
            sleep(secs)
            self.exit()
    
    def _create_tray_icon(self):
        self.tray = QSystemTrayIcon(self)
        self.tray.setToolTip("D2Moddin Manager")
        self.tray.setIcon(QIcon(SETTINGS['icon']))
        traymenu = QMenu()
        traymenu.addAction("Restart", self.restart)
        traymenu.addAction("Uninstall", self.uninstall)
        traymenu.addAction("Preferences", UIManager().open_preferences)
        traymenu.addAction("Show mod list", self.show_mod_list)
        traymenu.addSeparator()

        traymenu.addAction("Exit", self.exit)
    
        self.tray.setContextMenu(traymenu)
        self.tray.show()
    
    def restart(self):
        python = sys.executable
        args = set(sys.argv)
        args.add("restart")
        os.execl(python, python, *list(sys.argv))
        self.exit()
    
    def uninstall(self):
        ModManager().delete_mods()
#         ModManager().uninstall_d2mp()
        self.exit()
    
    def exit(self):
        # do some cleanup
        return super(SingleApplication, self).exit()
    
    def show_mod_list(self):
        self.show_message("Mod List", ModManager().mod_names_as_string())
    
    def show_message_from_socket(self, message):
        self.show_message("Server message", message)
        
    def show_error_from_socket(self, message):
        self.show_message("Server error", message, QSystemTrayIcon.Critical)
        
    def show_message_from_mod_manager(self, message):
        self.show_message("ModManager message", message)
        
    def show_error_from_mod_manager(self, message):
        self.show_message("ModManager error", message, QSystemTrayIcon.Critical)
        
    def show_message(self, title, message, icon = QSystemTrayIcon.Information):
        self.tray.showMessage(title, message, icon)
Example #21
0
class ModTest(TestCase):
    def test_singleton(self):
        man1 = ModManager()
        man2 = ModManager()

        self.assertEqual(man1, man2)

    def setUp(self):
        new_dota_dir()
        self.manager = ModManager()
        #         self.real_method = self.manager._dota_path
        #         self.manager._dota_path = Mock(return_value = mkdtemp())

        self.mod1_folder = join(self.manager._d2mp_path(), "mod1")
        self.mod1_info_file = join(self.mod1_folder, "addoninfo.txt")

        self.mod2_folder = join(self.manager._d2mp_path(), "mod2")
        self.mod2_info_file = join(self.mod2_folder, "addoninfo.txt")

        self.mod_to_delete_folder = join(self.manager._d2mp_path(),
                                         "mod_to_delete")
        self.mod_to_delete_info_file = join(self.mod2_folder, "addoninfo.txt")

        self.mods = [basename(f) for f in [self.mod1_folder, self.mod2_folder]]

        for folder in [
                self.mod1_folder, self.mod2_folder, self.mod_to_delete_folder
        ]:
            if not isdir(folder): os.mkdir(folder)

        for f in [
                self.mod1_info_file, self.mod2_info_file,
                self.mod_to_delete_info_file
        ]:
            if not isfile(f): open(f, "w").close()

        shutil.rmtree(self.manager._mod_path())

    def tearDown(self):
        shutil.rmtree(self.manager._d2mp_path())


#         self.manager._dota_path = self.real_method

    def test_mod_names(self):
        for mod in self.mods:
            self.assertIn(mod, self.manager.mod_names_as_string(),
                          "mods \"%s\" was not in the mod list!" % (mod))

    def test_setting_mod(self):
        mod1_name, mod2_name = self.mods

        self.assertNotIn(mod2_name, os.listdir(self.manager._mod_path()),
                         "mod2 should NOT be active now")
        self.assertNotIn(mod1_name, os.listdir(self.manager._mod_path()),
                         "mod1 should NOT be active now")
        self.manager.set_mod(mod1_name)
        self.assertIn(mod1_name, self.manager.get_active_mod(),
                      "mod1 should be active now")

        self.assertNotIn(mod2_name, os.listdir(self.manager._mod_path()),
                         "mod2 should NOT be active now")
        self.manager.set_mod(mod2_name)
        self.assertIn(mod2_name, self.manager.get_active_mod(),
                      "mod2 should be active now")
        self.assertNotIn(mod1_name, os.listdir(self.manager._mod_path()),
                         "mod1 should NOT be active now")

    def test_active_mod(self):
        mod1_name, mod2_name = self.mods
        self.assertIsNone(self.manager.get_active_mod(),
                          "there should be no active mod")

        self.manager.set_mod(mod1_name)
        self.assertEqual(mod1_name, self.manager.get_active_mod(),
                         "mod1 should be active")

        self.manager.set_mod(mod2_name)
        self.assertEqual(mod2_name, self.manager.get_active_mod(),
                         "mod1 should be active")

        self.manager.delete_mods()
        self.assertIsNone(self.manager.get_active_mod(),
                          "there should be no active mod")

    def test_deleting_mod(self):
        mod_name = basename(self.mod_to_delete_folder)
        self.assertIn(mod_name, os.listdir(self.manager._d2mp_path()),
                      "mod should be in d2mp folder")
        self.assertIn(mod_name, self.manager.mod_names(),
                      "mod should be in cache")
        self.manager.delete_mod(mod_name)
        self.assertNotIn(mod_name, os.listdir(self.manager._d2mp_path()),
                         "mod should NOT be in d2mp folder")
        self.assertNotIn(mod_name, self.manager.mod_names(),
                         "mod should NOT be in cache")

    def test_delete_all_mods(self):
        mod1, mod2 = self.mods
        mod3 = basename(self.mod_to_delete_folder)

        for mod in [mod1, mod2, mod3]:
            self.assertIn(mod, os.listdir(self.manager._d2mp_path()),
                          "all mods should be present")
            self.assertIn(mod, self.manager.mod_names(),
                          "all mods should be present in cache")

        self.manager.delete_mods()

        self.assertTrue(
            len(os.listdir(self.manager._d2mp_path())) == 0,
            "no mods should be present in d2mp folder anymore")
        self.assertTrue(
            len(os.listdir(self.manager._mod_path())) == 0,
            "no mods should be present in mod folder anymore")

        self.assertTrue(
            len(self.manager._mods()) == 0,
            "no mods should be present in cache anymore")
Example #22
0
def command(cmd):
    if sys.platform == "darwin":
        return call(["open", ModManager().steam_exe(), "steam://%s" % cmd])
    else:
        return call([ModManager().steam_exe(), "steam://%s" % cmd])
Example #23
0
    def test_singleton(self):
        man1 = ModManager()
        man2 = ModManager()

        self.assertEqual(man1, man2)