1# -*- coding: utf-8 -*- 2# 3# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with 4# the additional special exception to link portions of this program with the OpenSSL library. 5# See LICENSE for more details. 6# 7 8from __future__ import print_function, unicode_literals 9 10import pytest 11from twisted.trial import unittest 12 13import deluge.component as component 14from deluge.common import windows_check 15from deluge.configmanager import ConfigManager 16from deluge.i18n import setup_translation 17 18from . import common 19from .basetest import BaseTestCase 20 21libs_available = True 22# Allow running other tests without GTKUI dependencies available 23try: 24 from deluge.ui.gtk3.files_tab import FilesTab 25 from deluge.ui.gtk3.gtkui import DEFAULT_PREFS 26 from deluge.ui.gtk3.mainwindow import MainWindow 27except ImportError: 28 libs_available = False 29 30setup_translation() 31 32 33@pytest.mark.gtkui 34class FilesTabTestCase(BaseTestCase): 35 def set_up(self): 36 if libs_available is False: 37 raise unittest.SkipTest('GTKUI dependencies not available') 38 39 common.set_tmp_config_dir() 40 ConfigManager('gtk3ui.conf', defaults=DEFAULT_PREFS) 41 self.mainwindow = MainWindow() 42 self.filestab = FilesTab() 43 self.t_id = '1' 44 self.filestab.torrent_id = self.t_id 45 self.index = 1 46 47 def tear_down(self): 48 return component.shutdown() 49 50 def print_treestore(self, title, treestore): 51 root = treestore.get_iter_first() 52 level = 1 53 54 def p_level(s, l): 55 print('%s%s' % (' ' * l, s)) 56 57 def _print_treestore_children(i, lvl): 58 while i: 59 p_level(treestore[i][0], lvl) 60 if treestore.iter_children(i): 61 _print_treestore_children(treestore.iter_children(i), lvl + 2) 62 i = treestore.iter_next(i) 63 64 print('\n%s' % title) 65 _print_treestore_children(root, level) 66 print('') 67 68 def verify_treestore(self, treestore, tree): 69 def _verify_treestore(itr, tree_values): 70 i = 0 71 while itr: 72 values = tree_values[i] 73 if treestore[itr][0] != values[0]: 74 return False 75 if treestore.iter_children(itr): 76 if not _verify_treestore(treestore.iter_children(itr), values[1]): 77 return False 78 itr = treestore.iter_next(itr) 79 i += 1 80 return True 81 82 return _verify_treestore(treestore.get_iter_first(), tree) 83 84 def test_files_tab(self): 85 self.filestab.files_list[self.t_id] = ( 86 {'index': 0, 'path': '1/test_10.txt', 'offset': 0, 'size': 13}, 87 {'index': 1, 'path': 'test_100.txt', 'offset': 13, 'size': 14}, 88 ) 89 self.filestab.update_files() 90 self.filestab._on_torrentfilerenamed_event( 91 self.t_id, self.index, '2/test_100.txt' 92 ) 93 94 ret = self.verify_treestore( 95 self.filestab.treestore, 96 [['1/', [['test_10.txt']]], ['2/', [['test_100.txt']]]], 97 ) 98 if not ret: 99 self.print_treestore('Treestore not expected:', self.filestab.treestore) 100 self.assertTrue(ret) 101 102 def test_files_tab2(self): 103 if windows_check(): 104 raise unittest.SkipTest('on windows \\ != / for path names') 105 self.filestab.files_list[self.t_id] = ( 106 {'index': 0, 'path': '1/1/test_10.txt', 'offset': 0, 'size': 13}, 107 {'index': 1, 'path': 'test_100.txt', 'offset': 13, 'size': 14}, 108 ) 109 self.filestab.update_files() 110 self.filestab._on_torrentfilerenamed_event( 111 self.t_id, self.index, '1/1/test_100.txt' 112 ) 113 114 ret = self.verify_treestore( 115 self.filestab.treestore, 116 [['1/', [['1/', [['test_100.txt'], ['test_10.txt']]]]]], 117 ) 118 if not ret: 119 self.print_treestore('Treestore not expected:', self.filestab.treestore) 120 self.assertTrue(ret) 121 122 def test_files_tab3(self): 123 if windows_check(): 124 raise unittest.SkipTest('on windows \\ != / for path names') 125 self.filestab.files_list[self.t_id] = ( 126 {'index': 0, 'path': '1/test_10.txt', 'offset': 0, 'size': 13}, 127 {'index': 1, 'path': 'test_100.txt', 'offset': 13, 'size': 14}, 128 ) 129 self.filestab.update_files() 130 self.filestab._on_torrentfilerenamed_event( 131 self.t_id, self.index, '1/test_100.txt' 132 ) 133 134 ret = self.verify_treestore( 135 self.filestab.treestore, [['1/', [['test_100.txt'], ['test_10.txt']]]] 136 ) 137 if not ret: 138 self.print_treestore('Treestore not expected:', self.filestab.treestore) 139 self.assertTrue(ret) 140 141 def test_files_tab4(self): 142 self.filestab.files_list[self.t_id] = ( 143 {'index': 0, 'path': '1/test_10.txt', 'offset': 0, 'size': 13}, 144 {'index': 1, 'path': '1/test_100.txt', 'offset': 13, 'size': 14}, 145 ) 146 self.filestab.update_files() 147 self.filestab._on_torrentfilerenamed_event( 148 self.t_id, self.index, '1/2/test_100.txt' 149 ) 150 151 ret = self.verify_treestore( 152 self.filestab.treestore, 153 [['1/', [['2/', [['test_100.txt']]], ['test_10.txt']]]], 154 ) 155 if not ret: 156 self.print_treestore('Treestore not expected:', self.filestab.treestore) 157 self.assertTrue(ret) 158 159 def test_files_tab5(self): 160 if windows_check(): 161 raise unittest.SkipTest('on windows \\ != / for path names') 162 self.filestab.files_list[self.t_id] = ( 163 {'index': 0, 'path': '1/test_10.txt', 'offset': 0, 'size': 13}, 164 {'index': 1, 'path': '2/test_100.txt', 'offset': 13, 'size': 14}, 165 ) 166 self.filestab.update_files() 167 self.filestab._on_torrentfilerenamed_event( 168 self.t_id, self.index, '1/test_100.txt' 169 ) 170 171 ret = self.verify_treestore( 172 self.filestab.treestore, [['1/', [['test_100.txt'], ['test_10.txt']]]] 173 ) 174 if not ret: 175 self.print_treestore('Treestore not expected:', self.filestab.treestore) 176 self.assertTrue(ret) 177