~chrismcginlay/ubuntu/natty/ubuntuone-control-panel/ubuntuone-control-panel-fix-715820

« back to all changes in this revision

Viewing changes to ubuntuone/controlpanel/gtk/tests/test_gui.py

  • Committer: Ken VanDine
  • Date: 2011-02-12 03:26:53 UTC
  • mfrom: (11.1.1 ubuntuone-control-panel)
  • Revision ID: ken.vandine@canonical.com-20110212032653-3q0c2phnvfxlby1o
Tags: 0.8.3-0ubuntu1
releasing version 0.8.3-0ubuntu1

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
from ubuntuone.controlpanel.gtk import gui
28
28
from ubuntuone.controlpanel.gtk.tests import (FAKE_ACCOUNT_INFO,
29
29
    FAKE_DEVICE_INFO, FAKE_DEVICES_INFO,
30
 
    FAKE_VOLUMES_INFO, FAKE_REPLICATIONS_INFO, USER_HOME,
 
30
    FAKE_VOLUMES_INFO, FAKE_REPLICATIONS_INFO, ROOT, USER_HOME,
31
31
    FakedNMState, FakedSSOBackend, FakedSessionBus, FakedInterface,
32
32
    FakedPackageManager, FakedConfirmDialog,
33
33
)
82
82
        pb = gui.gtk.gdk.pixbuf_new_from_file(gui.get_data_file(filename))
83
83
        self.assertEqual(image.get_pixbuf().get_pixels(), pb.get_pixels())
84
84
 
85
 
    def assert_messages_equal(self, widget, msgs):
86
 
        """Check that 'widget' has all the entries in 'msgs'."""
87
 
        children = list(reversed(widget.get_children()))
88
 
        self.assertEqual(len(children), len(msgs))
89
 
        for label, msg in zip(reversed(children), msgs):
90
 
            full_msg = self.ui.BULLET + ' ' + msg
91
 
            self.assertTrue(label.get_visible())
92
 
            self.assertEqual(label.get_property('xalign'), 0)
93
 
            self.assertEqual(label.get_property('wrap'), True)
94
 
            self.assertEqual(label.get_label(), full_msg)
95
 
 
96
 
            expected = gui.gtk.Label()
97
 
            expected.set_markup(full_msg)
98
 
            self.assertEqual(label.get_text(), expected.get_text())
99
 
 
100
85
    def assert_backend_called(self, method_name, args, backend=None):
101
86
        """Check that the control panel backend 'method_name' was called."""
102
87
        if backend is None:
392
377
    """The test suite for the overview panel."""
393
378
 
394
379
    klass = gui.OverviewPanel
395
 
    kwargs = {'messages': None, 'main_window': gui.gtk.Window()}
 
380
    kwargs = {'main_window': gui.gtk.Window()}
396
381
    ui_filename = 'overview.ui'
397
382
 
398
383
    def test_is_a_greyable_bin(self):
561
546
class OverwiewPanelNoCredsTestCase(OverwiewPanelTestCase):
562
547
    """The test suite for the overview panel when no credentials are found."""
563
548
 
564
 
    messages = None
565
 
 
566
549
    def setUp(self):
567
 
        self.kwargs['messages'] = self.messages
568
550
        super(OverwiewPanelNoCredsTestCase, self).setUp()
569
551
        self.ui.on_credentials_not_found(gui.U1_APP_NAME)
570
552
 
581
563
        """There is an image attribute and is correct."""
582
564
        self.assert_image_equal(self.ui.image, 'overview.png')
583
565
 
584
 
    def test_messages(self):
585
 
        """If no messages are passed, the default list is used."""
586
 
        self.assert_messages_equal(self.ui.messages, gui.OVERVIEW_MSGS)
587
 
 
588
566
    def test_join_now_is_default_widget(self):
589
567
        """The join now button is the default widget."""
590
568
        self.assertTrue(self.ui.join_now_button.get_property('can_default'))
683
661
        self.assertTrue(self.ui.connect_button.is_sensitive())
684
662
 
685
663
 
686
 
class OverwiewPanelMessagesTestCase(OverwiewPanelTestCase):
687
 
    """The test suite for the overview panel when messages are set."""
688
 
 
689
 
    messages = ['Test me', 'A little bit more']
690
 
 
691
 
 
692
 
class OverwiewPanelMarkupMessagesTestCase(OverwiewPanelTestCase):
693
 
    """The test suite for the overview panel when markup messages are set."""
694
 
 
695
 
    messages = ['<small>Test me</small>', 'A <b>little</b> bit more']
696
 
 
697
 
 
698
664
class DashboardTestCase(ControlPanelMixinTestCase):
699
665
    """The test suite for the dashboard panel."""
700
666
 
835
801
        """The volumes info is processed when ready."""
836
802
        self.ui.on_volumes_info_ready(FAKE_VOLUMES_INFO)
837
803
 
838
 
        self.assertEqual(len(FAKE_VOLUMES_INFO), len(self.ui.volumes_store))
 
804
        self.assertEqual(len(FAKE_VOLUMES_INFO) + 1,  # count the empty row
 
805
                         len(self.ui.volumes_store))
839
806
        treeiter = self.ui.volumes_store.get_iter_root()
840
807
        for name, free_bytes, volumes in FAKE_VOLUMES_INFO:
841
808
            name = "%s's" % name if name else self.ui.MY_FOLDERS
843
810
            header = (name, self.ui.FREE_SPACE % {'free_space': free_bytes})
844
811
 
845
812
            # check parent row
846
 
            row = self.ui.volumes_store.get(treeiter, *xrange(7))
 
813
            row = self.ui.volumes_store.get(treeiter,
 
814
                                            *xrange(self.ui.MAX_COLS))
847
815
 
848
816
            self.assertEqual(row[0], self.ui.ROW_HEADER % header)
849
817
            self.assertTrue(row[1], 'parent will always be subscribed')
852
820
            self.assertFalse(row[4], 'toggle should be non sensitive.')
853
821
            self.assertEqual(row[5], gui.gtk.ICON_SIZE_LARGE_TOOLBAR)
854
822
            self.assertEqual(row[6], None)
 
823
            self.assertEqual(row[7], None)
855
824
 
856
825
            # check children
857
826
            self.assertEqual(len(volumes),
860
829
 
861
830
            sorted_vols = sorted(volumes, key=gui.operator.itemgetter('path'))
862
831
            for volume in sorted_vols:
863
 
                row = self.ui.volumes_store.get(childiter, *xrange(7))
 
832
                row = self.ui.volumes_store.get(childiter,
 
833
                                                *xrange(self.ui.MAX_COLS))
864
834
 
865
835
                sensitive = True
866
836
                path = volume['path'].replace(USER_HOME + '/', '')
868
838
                    sensitive = False
869
839
                    path = self.ui.ROOT % (path, gui.ORANGE,
870
840
                                           self.ui.ALWAYS_SUBSCRIBED)
 
841
                elif volume['type'] == 'SHARE':
 
842
                    path = volume['name']
871
843
 
872
844
                self.assertEqual(row[0], path)
873
845
                self.assertEqual(row[1], bool(volume['subscribed']))
879
851
                self.assertEqual(row[4], sensitive)
880
852
                self.assertEqual(row[5], gui.gtk.ICON_SIZE_MENU)
881
853
                self.assertEqual(row[6], volume['volume_id'])
 
854
                self.assertEqual(row[7], volume['path'])
882
855
 
883
856
                childiter = self.ui.volumes_store.iter_next(childiter)
884
857
 
885
858
            treeiter = self.ui.volumes_store.iter_next(treeiter)
886
859
 
 
860
            if treeiter is not None:
 
861
                # skip the empty row
 
862
                row = self.ui.volumes_store.get(treeiter,
 
863
                                                *xrange(self.ui.MAX_COLS))
 
864
                self.assertEqual(row, self.ui._empty_row)
 
865
 
 
866
                # grab next non-empty row
 
867
                treeiter = self.ui.volumes_store.iter_next(treeiter)
 
868
 
887
869
    def test_on_volumes_info_ready_clears_the_list(self):
888
870
        """The old volumes info is cleared before updated."""
889
871
        self.ui.on_volumes_info_ready(FAKE_VOLUMES_INFO)
890
872
        self.ui.on_volumes_info_ready(FAKE_VOLUMES_INFO)
891
873
 
892
 
        self.assertEqual(len(self.ui.volumes_store), len(FAKE_VOLUMES_INFO))
 
874
        self.assertEqual(len(FAKE_VOLUMES_INFO) + 1,
 
875
                         len(self.ui.volumes_store))
893
876
 
894
877
    def test_on_volumes_info_ready_with_no_volumes(self):
895
878
        """When there are no volumes, a notification is shown."""
917
900
        """Clicking on 'subscribed' updates the folder subscription."""
918
901
        self.ui.on_volumes_info_ready(FAKE_VOLUMES_INFO)
919
902
 
920
 
        for parent, (_, _, volumes) in enumerate(FAKE_VOLUMES_INFO):
 
903
        real_rows = len(FAKE_VOLUMES_INFO)
 
904
        data = zip(range(real_rows)[::2], FAKE_VOLUMES_INFO)  # skip emtpy rows
 
905
        for parent, (_, _, volumes) in data:
921
906
 
922
907
            sorted_vols = sorted(volumes, key=gui.operator.itemgetter('path'))
923
908
            for child, volume in enumerate(sorted_vols):
964
949
        # reload folders list to sanitize the info in volumes_store
965
950
        self.assertTrue(self._called, ((), {}))
966
951
 
 
952
    def test_clicking_on_row_opens_folder(self):
 
953
        """The folder activated is opened."""
 
954
        self.patch(gui, 'uri_hook', self._set_called)
 
955
        self.ui.on_volumes_info_ready(FAKE_VOLUMES_INFO)
 
956
 
 
957
        self.ui.volumes_view.row_activated('0:0',
 
958
                                           self.ui.volumes_view.get_column(0))
 
959
 
 
960
        self.assertEqual(self._called,
 
961
                         ((None, gui.FILE_URI_PREFIX + ROOT['path']), {}))
 
962
 
967
963
 
968
964
class DeviceTestCase(ControlPanelMixinTestCase):
969
965
    """The test suite for the device widget."""
2358
2354
        self.ui.devices.emit('local-device-removed')
2359
2355
 
2360
2356
        self.assertEqual(self._called, ((self.ui,), {}))
 
2357
 
 
2358
    def test_dashboard_button_name(self):
 
2359
        """The dashboard_button widget has the proper name."""
 
2360
        self.assertEqual(self.ui.dashboard_button.get_name(),
 
2361
                         self.ui.DASHBOARD_BUTTON_NAME)
 
2362
 
 
2363
    def test_devices_button_name(self):
 
2364
        """The devices_button widget has the proper name."""
 
2365
        self.assertEqual(self.ui.devices_button.get_name(),
 
2366
                         self.ui.DEVICES_BUTTON_NAME)