deluge/deluge/tests/test_torrentview.py
Calum Lind 84802da29b [Py2to3] Force unicode_literals and fix related issues
* Added `from __future__ import unicode_literals` to every file so
   now all strings in code are forced to be unicode strings unless
   marked as byte string `b'str'` or encoded to byte string `'str'.encode('utf-8')`.

   This is a large change but we have been working towards the goal of unicode
   strings passed in the code so decoding external input and encoding
   output as byte strings (where applicable).

   Note that in Python 2 the `str` type still refers to byte strings.

 * Replaced the use of `str` for `basestring` in isinstance comparison as
   this was the original intention but breaks code when encoutering unicode strings.

 * Marked byte strings in gtkui as the conversion to utf8 is not always handled, mostly
   related to gobject signal names.
2017-02-22 12:36:32 +00:00

166 lines
7.7 KiB
Python

from __future__ import unicode_literals
import pytest
from twisted.trial import unittest
import deluge.component as component
from deluge.configmanager import ConfigManager
from deluge.ui.translations_util import setup_translations
from . import common
from .basetest import BaseTestCase
# Allow running other tests without GTKUI dependencies available
try:
from gobject import TYPE_UINT64
except ImportError as err:
libs_available = False
TYPE_UINT64 = 'Whatever'
import traceback
traceback.print_exc()
else:
libs_available = True
from deluge.ui.gtkui.mainwindow import MainWindow # pylint: disable=ungrouped-imports
from deluge.ui.gtkui.menubar import MenuBar
from deluge.ui.gtkui.torrentdetails import TorrentDetails
from deluge.ui.gtkui.torrentview import TorrentView
from deluge.ui.gtkui.gtkui import DEFAULT_PREFS
setup_translations()
@pytest.mark.gtkui
class TorrentviewTestCase(BaseTestCase):
default_column_index = ['filter', 'torrent_id', 'dirty', '#',
'Name',
'Size', 'Downloaded', 'Uploaded', 'Remaining',
'Progress',
'Seeds', 'Peers', 'Seeds:Peers',
'Down Speed', 'Up Speed', 'Down Limit', 'Up Limit',
'ETA', 'Ratio', 'Avail',
'Added', 'Completed', 'Complete Seen',
'Tracker', 'Download Folder', 'Owner', 'Shared']
default_liststore_columns = [bool, str, bool, int,
str, str, # Name
TYPE_UINT64, TYPE_UINT64, TYPE_UINT64, TYPE_UINT64,
float, str, # Progress
int, int, int, int, float, # Seeds, Peers
int, int, float, float,
int, float, float, # ETA, Ratio, Avail
int, int, int,
str, str, # Tracker
str, str,
bool] # shared
def set_up(self):
if libs_available is False:
raise unittest.SkipTest('GTKUI dependencies not available')
common.set_tmp_config_dir()
# MainWindow loads this config file, so lets make sure it contains the defaults
ConfigManager('gtkui.conf', defaults=DEFAULT_PREFS)
self.mainwindow = MainWindow()
self.torrentview = TorrentView()
self.torrentdetails = TorrentDetails()
self.menubar = MenuBar()
def tear_down(self):
return component.shutdown()
def test_torrentview_columns(self):
self.assertEquals(self.torrentview.column_index, TorrentviewTestCase.default_column_index)
self.assertEquals(self.torrentview.liststore_columns, TorrentviewTestCase.default_liststore_columns)
self.assertEquals(self.torrentview.columns['Download Folder'].column_indices, [29])
def test_add_column(self):
# Add a text column
test_col = 'Test column'
self.torrentview.add_text_column(test_col, status_field=['label'])
self.assertEquals(len(self.torrentview.liststore_columns),
len(TorrentviewTestCase.default_liststore_columns) + 1)
self.assertEquals(len(self.torrentview.column_index),
len(TorrentviewTestCase.default_column_index) + 1)
self.assertEquals(self.torrentview.column_index[-1], test_col)
self.assertEquals(self.torrentview.columns[test_col].column_indices, [32])
def test_add_columns(self):
# Add a text column
test_col = 'Test column'
self.torrentview.add_text_column(test_col, status_field=['label'])
# Add a second text column
test_col2 = 'Test column2'
self.torrentview.add_text_column(test_col2, status_field=['label2'])
self.assertEquals(len(self.torrentview.liststore_columns),
len(TorrentviewTestCase.default_liststore_columns) + 2)
self.assertEquals(len(self.torrentview.column_index),
len(TorrentviewTestCase.default_column_index) + 2)
# test_col
self.assertEquals(self.torrentview.column_index[-2], test_col)
self.assertEquals(self.torrentview.columns[test_col].column_indices, [32])
# test_col2
self.assertEquals(self.torrentview.column_index[-1], test_col2)
self.assertEquals(self.torrentview.columns[test_col2].column_indices, [33])
def test_remove_column(self):
# Add and remove text column
test_col = 'Test column'
self.torrentview.add_text_column(test_col, status_field=['label'])
self.torrentview.remove_column(test_col)
self.assertEquals(len(self.torrentview.liststore_columns), len(TorrentviewTestCase.default_liststore_columns))
self.assertEquals(len(self.torrentview.column_index), len(TorrentviewTestCase.default_column_index))
self.assertEquals(self.torrentview.column_index[-1], TorrentviewTestCase.default_column_index[-1])
self.assertEquals(self.torrentview.columns[TorrentviewTestCase.default_column_index[-1]].column_indices, [31])
def test_remove_columns(self):
# Add two columns
test_col = 'Test column'
self.torrentview.add_text_column(test_col, status_field=['label'])
test_col2 = 'Test column2'
self.torrentview.add_text_column(test_col2, status_field=['label2'])
# Remove test_col
self.torrentview.remove_column(test_col)
self.assertEquals(len(self.torrentview.liststore_columns),
len(TorrentviewTestCase.default_liststore_columns) + 1)
self.assertEquals(len(self.torrentview.column_index),
len(TorrentviewTestCase.default_column_index) + 1)
self.assertEquals(self.torrentview.column_index[-1], test_col2)
self.assertEquals(self.torrentview.columns[test_col2].column_indices, [32])
# Remove test_col2
self.torrentview.remove_column(test_col2)
self.assertEquals(len(self.torrentview.liststore_columns), len(TorrentviewTestCase.default_liststore_columns))
self.assertEquals(len(self.torrentview.column_index), len(TorrentviewTestCase.default_column_index))
self.assertEquals(self.torrentview.column_index[-1], TorrentviewTestCase.default_column_index[-1])
self.assertEquals(self.torrentview.columns[TorrentviewTestCase.default_column_index[-1]].column_indices, [31])
def test_add_remove_column_multiple_types(self):
# Add a column with multiple column types
test_col3 = 'Test column3'
self.torrentview.add_progress_column(test_col3, status_field=['progress', 'label3'], col_types=[float, str])
self.assertEquals(len(self.torrentview.liststore_columns),
len(TorrentviewTestCase.default_liststore_columns) + 2)
self.assertEquals(len(self.torrentview.column_index),
len(TorrentviewTestCase.default_column_index) + 1)
self.assertEquals(self.torrentview.column_index[-1], test_col3)
self.assertEquals(self.torrentview.columns[test_col3].column_indices, [32, 33])
# Remove multiple column-types column
self.torrentview.remove_column(test_col3)
self.assertEquals(len(self.torrentview.liststore_columns), len(TorrentviewTestCase.default_liststore_columns))
self.assertEquals(len(self.torrentview.column_index), len(TorrentviewTestCase.default_column_index))
self.assertEquals(self.torrentview.column_index[-1], TorrentviewTestCase.default_column_index[-1])
self.assertEquals(self.torrentview.columns[TorrentviewTestCase.default_column_index[-1]].column_indices, [31])