2
# -*- coding: utf-8; -*-
5
from test.support import run_unittest
9
from gi.repository import Gtk, TimezoneMap
12
from ubiquity import gtkwidgets, nm, segmented_bar
13
from ubiquity.frontend.gtk_components import nmwidgets
16
class MockController(object):
17
def get_string(self, name, lang=None, prefix=None):
18
return "%s: %s" % (lang, name)
21
class WidgetTests(unittest.TestCase):
25
def excepthook(exctype, value, tb):
26
# Workaround for http://bugzilla.gnome.org/show_bug.cgi?id=616279
28
self.err = exctype, value, tb
30
sys.excepthook = excepthook
31
self.win = Gtk.Window()
36
exctype, value, tb = self.err
37
if value.__traceback__ is not tb:
38
raise value.with_traceback(tb)
42
def test_segmented_bar(self):
43
sb = segmented_bar.SegmentedBar()
45
sb.add_segment_rgb('Test One', 30 * 1000 * 1000 * 1000, 'ff00ff')
46
sb.add_segment_rgb('Test Two', 30 * 1000 * 1000 * 1000, '0000ff')
47
for segment in sb.segments:
48
self.assertEqual(segment.subtitle, '30.0 GB')
49
self.assertEqual(sb.segments[0].title, 'Test One')
50
self.assertEqual(sb.segments[1].title, 'Test Two')
52
self.assertEqual(sb.segments, [])
56
def test_timezone_map(self):
57
tzmap = TimezoneMap.TimezoneMap()
59
# tzmap.select_city('America/New_York')
61
self.win.connect('destroy', Gtk.main_quit)
64
def test_state_box(self):
65
sb = gtkwidgets.StateBox('foobar')
66
self.assertEqual(sb.get_property('label'), 'foobar')
67
sb.set_property('label', 'barfoo')
68
self.assertEqual(sb.get_property('label'), 'barfoo')
70
self.assertEqual(sb.image.get_stock(),
71
('gtk-yes', Gtk.IconSize.LARGE_TOOLBAR))
72
self.assertEqual(sb.get_state(), True)
74
self.assertEqual(sb.image.get_stock(),
75
('gtk-no', Gtk.IconSize.LARGE_TOOLBAR))
76
self.assertEqual(sb.get_state(), False)
78
def test_gtk_to_cairo_color(self):
79
self.assertEqual(gtkwidgets.gtk_to_cairo_color('white'),
81
self.assertEqual(gtkwidgets.gtk_to_cairo_color('black'), (0, 0, 0))
82
# After all these years a discrepancy between X11 green and CSS
84
self.assertEqual(gtkwidgets.gtk_to_cairo_color('#00ff00'), (0, 1.0, 0))
85
self.assertEqual(gtkwidgets.gtk_to_cairo_color('red'), (1.0, 0, 0))
86
self.assertEqual(gtkwidgets.gtk_to_cairo_color('blue'), (0, 0, 1.0))
89
class NetworkStoreTests(unittest.TestCase):
91
self.model = nmwidgets.GtkNetworkStore()
93
def test_add_device(self):
94
self.model.add_device('/foo', 'Intel', 'Wireless')
95
device_it = self.model.get_iter_first()
96
self.assertEqual(self.model.get(device_it, 0, 1, 2),
97
('/foo', 'Intel', 'Wireless'))
99
def test_has_device(self):
100
self.model.add_device('/foo', 'Intel', 'Wireless')
101
self.model.add_device('/bar', 'Intel', 'Wireless')
103
self.assert_(self.model.has_device('/foo'))
104
self.assert_(not self.model.has_device('/not-there'))
106
def test_get_device_ids(self):
107
self.model.add_device('/foo', 'Intel', 'Wireless')
108
self.model.add_device('/bar', 'Intel', 'Wireless')
110
lst = self.model.get_device_ids()
111
self.assertListEqual(lst, ['/foo', '/bar'])
113
def test_add_ap(self):
114
self.model.add_device('/foo', 'Intel', 'Wireless')
115
self.model.add_ap('/foo', 'Orange', True, 40)
116
self.model.add_ap('/foo', 'Apple', False, 60)
117
device_it = self.model.get_iter_first()
119
ap_it = self.model.iter_children(device_it)
121
self.assertEqual(self.model.get(ap_it, 0, 1, 2), ('Orange', True, 40))
123
ap_it = self.model.iter_next(ap_it)
125
self.assertEqual(self.model.get(ap_it, 0, 1, 2), ('Apple', False, 60))
127
ap_it = self.model.iter_next(ap_it)
128
self.assert_(not ap_it)
130
def test_has_ap(self):
131
self.model.add_device('/foo', 'Intel', 'Wireless')
132
self.model.add_ap('/foo', 'Orange', True, 40)
133
self.model.add_ap('/foo', 'Apple', False, 60)
135
self.assert_(self.model.has_ap('/foo', 'Orange'))
136
self.assert_(not self.model.has_ap('/not-there', 'Orange'))
137
self.assert_(not self.model.has_ap('/foo', 'Aubergine'))
139
def test_set_ap_strength(self):
140
self.model.add_device('/foo', 'Intel', 'Wireless')
141
self.model.add_ap('/foo', 'Orange', True, 40)
143
self.model.set_ap_strength('/foo', 'Orange', 80)
144
device_it = self.model.get_iter_first()
145
ap_it = self.model.iter_children(device_it)
146
self.assertEqual(self.model[ap_it][2], 80)
148
def test_remove_aps_not_in(self):
150
device_it = self.model.get_iter_first()
151
ap_it = self.model.iter_children(device_it)
154
ret.append(self.model[ap_it][0])
155
ap_it = self.model.iter_next(ap_it)
158
self.model.add_device('/foo', 'Intel', 'Wireless')
159
fruits = ['Orange', 'Apple', 'Grape']
161
self.model.add_ap('/foo', ssid, True, 0)
163
self.model.remove_aps_not_in('/foo', fruits)
165
# There haven't been any changes in this update.
166
self.assertListEqual(fruits, ret)
168
# An AP that was present no longer is.
170
self.model.remove_aps_not_in('/foo', fruits)
172
self.assertListEqual(fruits, ret)
177
DEVPATH=/devices/pci0000:00/0000:00:1c.1/0000:03:00.0/net/wlan0
182
ID_VENDOR_FROM_DATABASE=Intel Corporation
183
ID_MODEL_FROM_DATABASE=PRO/Wireless 3945ABG [Golan] Network Connection
191
class NetworkManagerTests(unittest.TestCase):
193
patcher = mock.patch('ubiquity.nm.NetworkManager.start')
195
self.addCleanup(patcher.stop)
196
self.model = nmwidgets.GtkNetworkStore()
197
self.manager = nm.NetworkManager(self.model,
198
nmwidgets.GLibQueuedCaller)
200
@mock.patch('subprocess.Popen')
201
def test_get_vendor_and_model_null(self, mock_subprocess):
202
mock_subprocess.return_value.communicate.return_value = (
203
'', 'device path not found\n')
204
self.assertEqual(nm.get_vendor_and_model('bogus'), ('', ''))
206
@mock.patch('subprocess.Popen')
207
def test_get_vendor_and_model(self, mock_subprocess):
208
mock_subprocess.return_value.communicate.return_value = (
210
self.assertEqual(nm.get_vendor_and_model('foobar'),
211
('Intel Corporation',
212
'PRO/Wireless 3945ABG [Golan] Network Connection'))
214
def test_decode_ssid(self):
215
ssid = [dbus.Byte(85), dbus.Byte(98), dbus.Byte(117), dbus.Byte(110),
216
dbus.Byte(116), dbus.Byte(117), dbus.Byte(45), dbus.Byte(66),
217
dbus.Byte(97), dbus.Byte(116), dbus.Byte(116), dbus.Byte(101),
218
dbus.Byte(114), dbus.Byte(115), dbus.Byte(101), dbus.Byte(97)]
219
self.assertEqual(nm.decode_ssid(ssid), 'Ubuntu-Battersea')
221
def test_decode_ssid_utf8(self):
222
ssid = [dbus.Byte(82), dbus.Byte(195), dbus.Byte(169), dbus.Byte(115),
223
dbus.Byte(101), dbus.Byte(97), dbus.Byte(117)]
224
self.assertEqual(nm.decode_ssid(ssid), 'Réseau')
226
def test_decode_ssid_latin1(self):
227
ssid = [dbus.Byte(82), dbus.Byte(233), dbus.Byte(115), dbus.Byte(101),
228
dbus.Byte(97), dbus.Byte(117)]
229
self.assertEqual(nm.decode_ssid(ssid), 'R\ufffdseau')
231
def test_pixbuf_func(self):
232
iterator = self.model.append(None, ['/foo', 'Intel', 'Wireless'])
233
mock_cell = mock.Mock()
234
tv = nmwidgets.NetworkManagerTreeView()
235
tv.pixbuf_func(None, mock_cell, self.model, iterator, None)
236
mock_cell.set_property.assert_called_with('pixbuf', None)
237
# 0% strength, protected network
238
i = self.model.append(iterator, ['Orange', True, 0])
239
tv.pixbuf_func(None, mock_cell, self.model, i, None)
240
mock_cell.set_property.assert_called_with('pixbuf', tv.icons[5])
241
# 30% strength, protected network
242
self.model.set_value(i, 2, 30)
243
tv.pixbuf_func(None, mock_cell, self.model, i, None)
244
mock_cell.set_property.assert_called_with('pixbuf', tv.icons[6])
245
# 95% strength, unprotected network
246
self.model.set_value(i, 1, False)
247
self.model.set_value(i, 2, 95)
248
tv.pixbuf_func(None, mock_cell, self.model, i, None)
249
mock_cell.set_property.assert_called_with('pixbuf', tv.icons[4])
251
def test_data_func(self):
252
iterator = self.model.append(None, ['/foo', 'Intel', 'Wireless'])
253
mock_cell = mock.Mock()
254
tv = nmwidgets.NetworkManagerTreeView()
255
tv.data_func(None, mock_cell, self.model, iterator, None)
256
mock_cell.set_property.assert_called_with('text', 'Intel Wireless')
257
i = self.model.append(iterator, ['Orange', True, 0])
258
tv.data_func(None, mock_cell, self.model, i, None)
259
mock_cell.set_property.assert_called_with('text', 'Orange')
262
if __name__ == '__main__':
263
run_unittest(WidgetTests, NetworkStoreTests, NetworkManagerTests)