~nataliabidart/magicicada-gui/glade-ui

« back to all changes in this revision

Viewing changes to magicicada/gui/gtk/tests/test_listings.py

  • Committer: Tarmac
  • Author(s): Natalia B. Bidart
  • Date: 2012-08-21 23:27:53 UTC
  • mfrom: (126.1.4 migrate-to-gi)
  • Revision ID: tarmac-20120821232753-6x28f05vmms0ts3j
- Migrating the GTK+ UI to use GObject instrospection.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 
19
19
"""Tests for the listings widgets."""
20
20
 
21
 
import gtk
 
21
# pylint: disable=E0611
 
22
from gi.repository import Gtk
 
23
# pylint: enable=E0611
22
24
 
23
25
from twisted.internet import defer
24
26
 
105
107
        self._attrs = attrs
106
108
        for i in xrange(attrs):
107
109
            attr_name = 'attr%i' % i
108
 
            setattr(self, attr_name, '%s-%i' % (prefix, i))
 
110
            setattr(self, attr_name, u'%s-%i' % (prefix, i))
109
111
 
110
112
    def __len__(self):
111
113
        return self._attrs
114
116
class FakeDialog(Recorder):
115
117
    """A Fake Dialog that knows how to run and hide itself."""
116
118
 
117
 
    response = gtk.RESPONSE_NONE
 
119
    response = Gtk.ResponseType.NONE
118
120
    no_wrap = ['_called', 'response', 'args', 'kwargs']
119
121
 
120
122
    def __init__(self, *args, **kwargs):
136
138
 
137
139
    @defer.inlineCallbacks
138
140
    def setUp(self):
139
 
        self.patch(gtk, 'FileChooserDialog', FakeDialog)
140
 
        self.patch(gtk, 'MessageDialog', FakeDialog)
 
141
        self.patch(Gtk, 'FileChooserDialog', FakeDialog)
 
142
        self.patch(Gtk, 'MessageDialog', FakeDialog)
141
143
 
142
144
        if self.ui_class.data_fields is None:
143
 
            fakes = (('attr0', lambda s: ''.join(reversed(s))),
144
 
                     ('attr1', lambda s: s.replace('-', ' ❥ ')))
 
145
            fakes = (('attr0', lambda s: u''.join(reversed(s))),
 
146
                     ('attr1', lambda s: s.replace(u'-', u' ❥ ')))
145
147
            self.patch(self.ui_class, 'data_fields', fakes)
146
148
 
147
149
        if self.ui_class.sd_attr is None:
148
150
            self.patch(self.ui_class, 'sd_attr', 'fake_sd_attr')
149
151
 
150
152
        if self.ui_class.filename is None:
151
 
            builder = gtk.Builder()
 
153
            builder = Gtk.Builder()
152
154
            builder.add_from_string(TEST_UI)
153
155
            self.kwargs['builder'] = builder
154
156
            self.addCleanup(self.kwargs.pop, 'builder')
257
259
        buttons = self.ui.get_action_area().get_children()
258
260
        self.assertTrue(len(buttons) > 0)
259
261
 
260
 
        # with the gtk.STOCK_CLOSE stock
 
262
        # with the Gtk.STOCK_CLOSE stock
261
263
        close_button = buttons[-1]
262
264
        self.assertIs(self.ui.close_button, close_button)
263
265
        self.assertTrue(close_button.get_use_stock())
264
266
        stock = close_button.get_image().get_stock()
265
 
        self.assertEqual(stock, (gtk.STOCK_CLOSE, gtk.ICON_SIZE_BUTTON))
 
267
        self.assertEqual(stock, (Gtk.STOCK_CLOSE, Gtk.IconSize.BUTTON))
266
268
 
267
 
        # that emits gtk.RESPONSE_CLOSE when clicked
268
 
        widget = self.ui.get_widget_for_response(gtk.RESPONSE_CLOSE)
 
269
        # that emits Gtk.ResponseType.CLOSE when clicked
 
270
        widget = self.ui.get_widget_for_response(Gtk.ResponseType.CLOSE)
269
271
        self.assertIs(widget, close_button)
270
272
 
271
273
    def test_warning_label(self):
328
330
        """The panel can be re-sorted."""
329
331
        for idx, col in enumerate(self.ui.view.get_columns()):
330
332
            col.clicked()  # click on the column
331
 
            self.assert_sort_order_correct(col, idx, gtk.SORT_ASCENDING)
 
333
            self.assert_sort_order_correct(col, idx, Gtk.SortType.ASCENDING)
332
334
            self.assert_sort_indicator_correct(col)
333
335
 
334
336
            col.clicked()  # click on the column, sort order must change
335
 
            self.assert_sort_order_correct(col, idx, gtk.SORT_DESCENDING)
 
337
            self.assert_sort_order_correct(col, idx, Gtk.SortType.DESCENDING)
336
338
 
337
339
            col.clicked()  # click again, sort order must be the first one
338
 
            self.assert_sort_order_correct(col, idx, gtk.SORT_ASCENDING)
 
340
            self.assert_sort_order_correct(col, idx, Gtk.SortType.ASCENDING)
339
341
 
340
342
    def test_view_selection_single(self):
341
343
        """The view selection's mode is SINGLE."""
342
344
        self.assertEqual(self.ui.view.get_selection().get_mode(),
343
 
                         gtk.SELECTION_SINGLE)
 
345
                         Gtk.SelectionMode.SINGLE)
344
346
 
345
347
    def test_on_error(self, exc=None):
346
348
        """On error 'exc', show a error dialog."""
356
358
 
357
359
    def test_confirm_dialog(self):
358
360
        """The confirm dialog dialog is properly created."""
359
 
        self.assertIsInstance(self.ui.confirm_dialog, gtk.MessageDialog)
 
361
        self.assertIsInstance(self.ui.confirm_dialog, Gtk.MessageDialog)
360
362
 
361
363
    def test_confirm_dialog_creation_params(self):
362
364
        """The confirm dialog dialog is created with the expected params."""
363
365
        self.assertEqual(self.ui.confirm_dialog.args, ())
 
366
        flags = Gtk.DialogFlags.MODAL | Gtk.DialogFlags.DESTROY_WITH_PARENT
364
367
        kwargs = dict(parent=self.ui,
365
 
                      flags=gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
366
 
                      type=gtk.MESSAGE_QUESTION,
367
 
                      buttons=gtk.BUTTONS_YES_NO)
 
368
                      flags=flags,
 
369
                      type=Gtk.MessageType.QUESTION,
 
370
                      buttons=Gtk.ButtonsType.YES_NO)
368
371
        self.assertEqual(self.ui.confirm_dialog.kwargs, kwargs)
369
372
 
370
373
    def test_confirm_dialog_title(self):
428
431
 
429
432
    def test_file_chooser(self):
430
433
        """The file chooser dialog is properly created."""
431
 
        self.assertIsInstance(self.ui.file_chooser, gtk.FileChooserDialog)
 
434
        self.assertIsInstance(self.ui.file_chooser, Gtk.FileChooserDialog)
432
435
 
433
436
        self.assertEqual(self.ui.file_chooser.args, ())
434
437
        kwargs = dict(title=ADD_NEW_FOLDER, parent=None,
435
 
                      action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
436
 
                      buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
437
 
                               gtk.STOCK_OPEN, gtk.RESPONSE_ACCEPT))
 
438
                      action=Gtk.FileChooserAction.SELECT_FOLDER,
 
439
                      buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
 
440
                               Gtk.STOCK_OPEN, Gtk.ResponseType.ACCEPT))
438
441
        self.assertEqual(self.ui.file_chooser.kwargs, kwargs)
439
442
 
440
443
    def test_on_subscribed_renderer_toggled(self):
450
453
    @defer.inlineCallbacks
451
454
    def test_on_add_folder_button_clicked_file_chooser_cancel(self):
452
455
        """When the file choosing is canceled, the backend is not called."""
453
 
        self.patch(self.ui.file_chooser, 'response', gtk.RESPONSE_CANCEL)
 
456
        self.patch(self.ui.file_chooser, 'response', Gtk.ResponseType.CANCEL)
454
457
        yield self.ui.add_folder_button.clicked()
455
458
 
456
459
        self.assert_methods_called(self.ui.file_chooser, ['run', 'hide'])
460
463
    @defer.inlineCallbacks
461
464
    def test_on_add_folder_button_clicked_file_chooser_close(self):
462
465
        """When the file choosing is closed, the backend is not called."""
463
 
        self.patch(self.ui.file_chooser, 'response', gtk.RESPONSE_CLOSE)
 
466
        self.patch(self.ui.file_chooser, 'response', Gtk.ResponseType.CLOSE)
464
467
        yield self.ui.add_folder_button.clicked()
465
468
 
466
469
        self.assert_methods_called(self.ui.file_chooser, ['run', 'hide'])
471
474
    def test_on_add_folder_button_clicked_file_chooser_accept(self):
472
475
        """When the add_folder_button is clicked, the backend is called."""
473
476
        self.patch(self.ui, 'load', self._set_called)
474
 
        self.patch(self.ui.file_chooser, 'response', gtk.RESPONSE_ACCEPT)
 
477
        self.patch(self.ui.file_chooser, 'response', Gtk.ResponseType.ACCEPT)
475
478
 
476
479
        def check():
477
480
            """Perform a middle check."""
514
517
 
515
518
    def test_remove_folder_button_disabled(self):
516
519
        """When there is no folder selected, the remove button is disabled."""
517
 
        self.ui.view.get_selection().unselect_path('0')
 
520
        self.ui.view.get_selection().unselect_all()
518
521
        self.ui.on_view_cursor_changed()
519
522
        self.assertFalse(self.ui.remove_folder_button.get_sensitive())
520
523
 
539
542
    def test_on_remove_folder_button_clicked_closes_dialog(self):
540
543
        """If the user closes the dialog, nothing is done."""
541
544
        self.patch(self.ui.confirm_dialog, 'response',
542
 
                   gtk.RESPONSE_DELETE_EVENT)
 
545
                   Gtk.ResponseType.DELETE_EVENT)
543
546
        yield self.ui.remove_folder_button.clicked()
544
547
 
545
548
        self.assert_no_method_called(self.ui.sd)
548
551
    @defer.inlineCallbacks
549
552
    def test_on_remove_folder_button_clicked_answers_no(self):
550
553
        """If the user answers no, nothing is done."""
551
 
        self.patch(self.ui.confirm_dialog, 'response', gtk.RESPONSE_NO)
 
554
        self.patch(self.ui.confirm_dialog, 'response', Gtk.ResponseType.NO)
552
555
        yield self.ui.remove_folder_button.clicked()
553
556
 
554
557
        self.assert_no_method_called(self.ui.sd)
557
560
    @defer.inlineCallbacks
558
561
    def test_on_remove_folder_button_clicked_answers_yes(self):
559
562
        """If the user answers yes, sd.delete_folder is called."""
560
 
        self.patch(self.ui.confirm_dialog, 'response', gtk.RESPONSE_YES)
 
563
        self.patch(self.ui.confirm_dialog, 'response', Gtk.ResponseType.YES)
561
564
 
562
565
        def check():
563
566
            """Perform a middle check."""