Merge lp:~jonas-drange/ubuntu-system-settings/sim-name-editor into lp:ubuntu-system-settings
- sim-name-editor
- Merge into trunk
Status: | Superseded |
---|---|
Proposed branch: | lp:~jonas-drange/ubuntu-system-settings/sim-name-editor |
Merge into: | lp:ubuntu-system-settings |
Diff against target: |
756 lines (+375/-112) 9 files modified
.bzrignore (+1/-0) plugins/cellular/Components/CMakeLists.txt (+1/-0) plugins/cellular/Components/CellularDualSim.qml (+13/-10) plugins/cellular/Components/Sim.qml (+1/-1) plugins/cellular/Components/SimEditor.qml (+167/-0) plugins/cellular/PageComponent.qml (+51/-13) src/qml/MainWindow.qml (+1/-0) tests/autopilot/ubuntu_system_settings/tests/__init__.py (+0/-9) tests/autopilot/ubuntu_system_settings/tests/test_cellular.py (+140/-79) |
To merge this branch: | bzr merge lp:~jonas-drange/ubuntu-system-settings/sim-name-editor |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
PS Jenkins bot | continuous-integration | Needs Fixing | |
Ken VanDine | Needs Fixing | ||
Review via email: mp+229053@code.launchpad.net |
This proposal supersedes a proposal from 2014-07-27.
This proposal has been superseded by a proposal from 2014-07-31.
Commit message
[cellular] add sim name editor for dual sim scenario
Description of the change
Hi,
this adds a component that allows for editing of sim names, as well as autopilot tests for this.
I also added pycache to the ignore list, since autopilot3 is creating this and it should be ignored.
A nasty bug caused by tests trying to edit a readonly dbus property was removed as well.
Refactored tests to work with new, dynamic sim names.
Thanks
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
Ken VanDine (ken-vandine) wrote : | # |
Please remove debugging output, and see my inline comment
- 807. By Jonas G. Drange
-
remove logstatements
- 808. By Jonas G. Drange
-
merge prereq
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:806
http://
Executed test runs:
UNSTABLE: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
Click here to trigger a rebuild:
http://
Unmerged revisions
Preview Diff
1 | === modified file '.bzrignore' |
2 | --- .bzrignore 2014-07-08 16:17:02 +0000 |
3 | +++ .bzrignore 2014-07-31 14:22:27 +0000 |
4 | @@ -19,3 +19,4 @@ |
5 | .cproject |
6 | .project |
7 | .settings |
8 | +__pycache__ |
9 | |
10 | === modified file 'plugins/cellular/Components/CMakeLists.txt' |
11 | --- plugins/cellular/Components/CMakeLists.txt 2014-07-21 14:29:00 +0000 |
12 | +++ plugins/cellular/Components/CMakeLists.txt 2014-07-31 14:22:27 +0000 |
13 | @@ -3,5 +3,6 @@ |
14 | data-helpers.js |
15 | CellularDualSim.qml |
16 | Sim.qml |
17 | + SimEditor.qml |
18 | ) |
19 | install(FILES ${QML_SOURCES} DESTINATION ${PLUGIN_QML_DIR}/cellular/Components) |
20 | |
21 | === modified file 'plugins/cellular/Components/CellularDualSim.qml' |
22 | --- plugins/cellular/Components/CellularDualSim.qml 2014-07-24 19:00:45 +0000 |
23 | +++ plugins/cellular/Components/CellularDualSim.qml 2014-07-31 14:22:27 +0000 |
24 | @@ -64,17 +64,20 @@ |
25 | text: i18n.tr("Cellular data:") |
26 | expanded: true |
27 | model: ["Off", "sim1", "sim2"] |
28 | - delegate: OptionSelectorDelegate { text: { |
29 | - var t; |
30 | - if (modelData === "sim1") { |
31 | - t = sim1.title |
32 | - } else if (modelData === "sim2") { |
33 | - t = sim2.title |
34 | - } else { |
35 | - t = i18n.tr(modelData); |
36 | + delegate: OptionSelectorDelegate { |
37 | + objectName: "use" + modelData |
38 | + text: { |
39 | + var t; |
40 | + if (modelData === "sim1") { |
41 | + t = sim1.title |
42 | + } else if (modelData === "sim2") { |
43 | + t = sim2.title |
44 | + } else { |
45 | + t = i18n.tr(modelData); |
46 | + } |
47 | + return t; |
48 | } |
49 | - return t; |
50 | - }} |
51 | + } |
52 | selectedIndex: [true, sim1.connMan.powered, sim2.connMan.powered].lastIndexOf(true) |
53 | onDelegateClicked: { |
54 | sim1.connMan.powered = (index === 1) |
55 | |
56 | === modified file 'plugins/cellular/Components/Sim.qml' |
57 | --- plugins/cellular/Components/Sim.qml 2014-07-24 19:00:45 +0000 |
58 | +++ plugins/cellular/Components/Sim.qml 2014-07-31 14:22:27 +0000 |
59 | @@ -27,12 +27,12 @@ |
60 | property alias simMng: simMng |
61 | property alias connMan: connMan |
62 | |
63 | + property string path |
64 | property string name |
65 | property string title: { |
66 | var number = simMng.subscriberNumbers[0] || simMng.subscriberIdentity; |
67 | return name + (number ? " (" + number + ")" : ""); |
68 | } |
69 | - property string path |
70 | |
71 | OfonoModem { |
72 | id: modem |
73 | |
74 | === added file 'plugins/cellular/Components/SimEditor.qml' |
75 | --- plugins/cellular/Components/SimEditor.qml 1970-01-01 00:00:00 +0000 |
76 | +++ plugins/cellular/Components/SimEditor.qml 2014-07-31 14:22:27 +0000 |
77 | @@ -0,0 +1,167 @@ |
78 | +/* |
79 | + * Copyright (C) 2014 Canonical Ltd |
80 | + * |
81 | + * This program is free software: you can redistribute it and/or modify |
82 | + * it under the terms of the GNU General Public License version 3 as |
83 | + * published by the Free Software Foundation. |
84 | + * |
85 | + * This program is distributed in the hope that it will be useful, |
86 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
87 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
88 | + * GNU General Public License for more details. |
89 | + * |
90 | + * You should have received a copy of the GNU General Public License |
91 | + * along with this program. If not, see <http://www.gnu.org/licenses/>. |
92 | + * |
93 | + * Authors: |
94 | + * Jonas G. Drange <jonas.drange@canonical.com> |
95 | + * |
96 | +*/ |
97 | +import QtQuick 2.0 |
98 | +import Ubuntu.Components 1.1 |
99 | +import Ubuntu.Components.ListItems 0.1 as ListItem |
100 | + |
101 | +Column { |
102 | + |
103 | + id: simList |
104 | + |
105 | + anchors.left: parent.left |
106 | + anchors.right: parent.right |
107 | + |
108 | + states: [ |
109 | + State { |
110 | + name: "editing" |
111 | + PropertyChanges { |
112 | + target: editor |
113 | + visible: true |
114 | + } |
115 | + }, |
116 | + State { |
117 | + extend: "editing" |
118 | + name: "editingSim1" |
119 | + PropertyChanges { |
120 | + target: nameField |
121 | + text: sim1.name |
122 | + } |
123 | + ParentChange { |
124 | + target: editor |
125 | + parent: sim1Placeholder |
126 | + } |
127 | + }, |
128 | + State { |
129 | + extend: "editing" |
130 | + name: "editingSim2" |
131 | + PropertyChanges { |
132 | + target: nameField |
133 | + text: sim2.name |
134 | + } |
135 | + ParentChange { |
136 | + target: editor |
137 | + parent: sim2Placeholder |
138 | + } |
139 | + } |
140 | + ] |
141 | + |
142 | + ListItem.Standard { |
143 | + text: i18n.tr("Edit SIM Name") |
144 | + } |
145 | + |
146 | + |
147 | + ListItem.Standard { |
148 | + id: sim1Item |
149 | + text: sim1.title |
150 | + objectName: "editSim1" |
151 | + progression: true |
152 | + onClicked: { |
153 | + simList.state = "editingSim1"; |
154 | + nameField.forceActiveFocus(); |
155 | + } |
156 | + } |
157 | + |
158 | + Column { |
159 | + id: sim1Placeholder |
160 | + } |
161 | + |
162 | + ListItem.Standard { |
163 | + id: sim2Item |
164 | + text: sim2.title |
165 | + objectName: "editSim2" |
166 | + progression: true |
167 | + onClicked: { |
168 | + simList.state = "editingSim2"; |
169 | + nameField.forceActiveFocus(); |
170 | + } |
171 | + } |
172 | + |
173 | + Column { |
174 | + id: sim2Placeholder |
175 | + } |
176 | + |
177 | + Column { |
178 | + id: editor |
179 | + visible: false |
180 | + |
181 | + width: simList.width - units.gu(4) |
182 | + spacing: units.gu(2) |
183 | + anchors { |
184 | + horizontalCenter: simList.horizontalCenter |
185 | + } |
186 | + |
187 | + Item { |
188 | + height: units.gu(0.1) |
189 | + width: parent.width |
190 | + } |
191 | + |
192 | + TextField { |
193 | + id: nameField |
194 | + objectName: "nameField" |
195 | + maximumLength: 30 |
196 | + width: simList.width - units.gu(4) |
197 | + onTriggered: renameAction |
198 | + } |
199 | + |
200 | + Row { |
201 | + |
202 | + spacing: units.gu(2) |
203 | + |
204 | + Button { |
205 | + id: cancel |
206 | + objectName: "cancelRename" |
207 | + gradient: UbuntuColors.greyGradient |
208 | + text: i18n.tr("Cancel") |
209 | + width: (editor.width / 2) - units.gu(1) |
210 | + onClicked: { |
211 | + simList.state = ""; |
212 | + } |
213 | + } |
214 | + |
215 | + Button { |
216 | + id: rename |
217 | + objectName: "doRename" |
218 | + enabled: nameField.text |
219 | + text: i18n.tr("OK") |
220 | + width: (editor.width / 2) - units.gu(1) |
221 | + action: renameAction |
222 | + } |
223 | + } |
224 | + |
225 | + Action { |
226 | + id: renameAction |
227 | + onTriggered: { |
228 | + var tmpSimNames = {}; |
229 | + if (simList.state === "editingSim1") { |
230 | + tmpSimNames[sim1.path] = nameField.text; |
231 | + tmpSimNames[sim2.path] = sim2.name; |
232 | + console.warn('sat simName for', sim1.path, 'to', nameField.text) |
233 | + } else if (simList.state === "editingSim2") { |
234 | + console.warn('sat simName for', sim2.path, 'to', nameField.text) |
235 | + tmpSimNames[sim1.path] = sim1.name; |
236 | + tmpSimNames[sim2.path] = nameField.text; |
237 | + } |
238 | + phoneSettings.simNames = tmpSimNames; |
239 | + simList.state = ""; |
240 | + } |
241 | + } |
242 | + } |
243 | +} |
244 | + |
245 | |
246 | === modified file 'plugins/cellular/PageComponent.qml' |
247 | --- plugins/cellular/PageComponent.qml 2014-07-24 19:00:45 +0000 |
248 | +++ plugins/cellular/PageComponent.qml 2014-07-31 14:22:27 +0000 |
249 | @@ -19,6 +19,7 @@ |
250 | */ |
251 | |
252 | import QtQuick 2.0 |
253 | +import GSettings 1.0 |
254 | import SystemSettings 1.0 |
255 | import Ubuntu.Components 0.1 |
256 | import Ubuntu.Components.ListItems 0.1 as ListItem |
257 | @@ -34,32 +35,31 @@ |
258 | // pointers to sim 1 and 2, lazy loaded |
259 | property alias sim1: simOneLoader.item |
260 | property alias sim2: simTwoLoader.item |
261 | + property var modemsSorted: manager.modems.slice(0).sort() |
262 | |
263 | states: [ |
264 | State { |
265 | name: "singleSim" |
266 | StateChangeScript { |
267 | name: "loadSim" |
268 | - script: simOneLoader.setSource("Components/Sim.qml", { |
269 | - path: manager.modems[0], |
270 | - name: "SIM 1" |
271 | - }) |
272 | + script: { |
273 | + console.warn('modems sorted', modemsSorted); |
274 | + var p = modemsSorted[0]; |
275 | + simOneLoader.setSource("Components/Sim.qml", { |
276 | + path: p |
277 | + }); |
278 | + } |
279 | } |
280 | }, |
281 | State { |
282 | name: "dualSim" |
283 | + extend: "singleSim" |
284 | StateChangeScript { |
285 | name: "loadSecondSim" |
286 | script: { |
287 | - // the ordering is completely depending on manager |
288 | - // TODO: proper sim names (from gsettings?) |
289 | - simOneLoader.setSource("Components/Sim.qml", { |
290 | - path: manager.modems[0], |
291 | - name: "SIM 1" |
292 | - }); |
293 | + var p = modemsSorted[1]; |
294 | simTwoLoader.setSource("Components/Sim.qml", { |
295 | - path: manager.modems[1], |
296 | - name: "SIM 2" |
297 | + path: p |
298 | }); |
299 | } |
300 | } |
301 | @@ -83,6 +83,9 @@ |
302 | id: manager |
303 | Component.onCompleted: { |
304 | console.warn('Manager complete with', modems.length, 'sims.'); |
305 | + for (var i=0, j=modems.length; i<j; i++) { |
306 | + console.warn('manager: sim', i, 'has path', modems[i]); |
307 | + } |
308 | if (modems.length === 1) { |
309 | root.state = "singleSim"; |
310 | } else if (modems.length === 2) { |
311 | @@ -185,6 +188,41 @@ |
312 | progression: true |
313 | visible: showAllUI |
314 | } |
315 | - } |
316 | + |
317 | + SimEditor { |
318 | + visible: root.state === "dualSim" |
319 | + objectName: "simEditor" |
320 | + } |
321 | + } |
322 | + } |
323 | + |
324 | + GSettings { |
325 | + id: phoneSettings |
326 | + schema.id: "com.ubuntu.phone" |
327 | + Component.onCompleted: { |
328 | + // set default names |
329 | + var simNames = phoneSettings.simNames; |
330 | + var m0 = modemsSorted[0]; |
331 | + var m1 = modemsSorted[1]; |
332 | + if (!simNames[m0]) { |
333 | + simNames[m0] = "SIM 1"; |
334 | + } |
335 | + if (!simNames[m1])Â { |
336 | + simNames[m1] = "SIM 2"; |
337 | + } |
338 | + phoneSettings.simNames = simNames; |
339 | + } |
340 | + } |
341 | + |
342 | + Binding { |
343 | + target: sim1 |
344 | + property: "name" |
345 | + value: phoneSettings.simNames[modemsSorted[0]] |
346 | + } |
347 | + |
348 | + Binding { |
349 | + target: sim2 |
350 | + property: "name" |
351 | + value: phoneSettings.simNames[modemsSorted[1]] |
352 | } |
353 | } |
354 | |
355 | === modified file 'src/qml/MainWindow.qml' |
356 | --- src/qml/MainWindow.qml 2014-05-28 18:26:08 +0000 |
357 | +++ src/qml/MainWindow.qml 2014-07-31 14:22:27 +0000 |
358 | @@ -31,6 +31,7 @@ |
359 | objectName: "mainView" |
360 | automaticOrientation: true |
361 | useDeprecatedToolbar: false |
362 | + anchorToKeyboard: true |
363 | |
364 | function loadPluginByName(pluginName, pluginOptions) { |
365 | var plugin = pluginManager.getByName(pluginName) |
366 | |
367 | === modified file 'tests/autopilot/ubuntu_system_settings/tests/__init__.py' |
368 | --- tests/autopilot/ubuntu_system_settings/tests/__init__.py 2014-07-25 18:12:58 +0000 |
369 | +++ tests/autopilot/ubuntu_system_settings/tests/__init__.py 2014-07-31 14:22:27 +0000 |
370 | @@ -167,11 +167,8 @@ |
371 | ) |
372 | |
373 | def mock_radio_settings(self, modem): |
374 | - modem_interfaces = modem.GetProperties()['Interfaces'] |
375 | - modem_interfaces.append(RDO_IFACE) |
376 | modem.AddProperty( |
377 | RDO_IFACE, 'TechnologyPreference', self.technology_preference) |
378 | - modem.SetProperty('Interfaces', modem_interfaces) |
379 | modem.AddMethods( |
380 | RDO_IFACE, |
381 | [('GetProperties', '', 'a{sv}', |
382 | @@ -264,12 +261,6 @@ |
383 | |
384 | super(UbuntuSystemSettingsOfonoTestCase, self).setUp(panel) |
385 | |
386 | - @classmethod |
387 | - def tearDownClass(cls): |
388 | - cls.p_mock.terminate() |
389 | - cls.p_mock.wait() |
390 | - super(UbuntuSystemSettingsOfonoTestCase, cls).tearDownClass() |
391 | - |
392 | |
393 | class CellularBaseTestCase(UbuntuSystemSettingsOfonoTestCase): |
394 | def setUp(self): |
395 | |
396 | === modified file 'tests/autopilot/ubuntu_system_settings/tests/test_cellular.py' |
397 | --- tests/autopilot/ubuntu_system_settings/tests/test_cellular.py 2014-07-24 20:30:20 +0000 |
398 | +++ tests/autopilot/ubuntu_system_settings/tests/test_cellular.py 2014-07-31 14:22:27 +0000 |
399 | @@ -6,6 +6,7 @@ |
400 | # by the Free Software Foundation. |
401 | |
402 | import dbus |
403 | +from gi.repository import Gio, GLib |
404 | from time import sleep |
405 | |
406 | from autopilot.introspection.dbus import StateNotFoundError |
407 | @@ -23,9 +24,9 @@ |
408 | PREFERENCE_2G = '2G only (saves battery)' |
409 | PREFERENCE_ANY = '2G/3G/4G (faster)' |
410 | PREFERENCE_OFF = 'Off' |
411 | -LABEL_SIM_1 = 'SIM 1 (08123)' |
412 | -LABEL_SIM_2 = 'SIM 2 (123456)' |
413 | -LABEL_OFF = 'Off' |
414 | +USE_OFF = "useOff" |
415 | +USE_SIM_1 = "usesim1" |
416 | +USE_SIM_2 = "usesim2" |
417 | |
418 | |
419 | class CellularTestCase(CellularBaseTestCase): |
420 | @@ -170,7 +171,7 @@ |
421 | objectName="dataRoamingSwitch" |
422 | ) |
423 | self.system_settings.main_view.scroll_to_and_click(roaming_switch) |
424 | - sleep(2) |
425 | + sleep(1.5) |
426 | self.assertEqual( |
427 | True, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed')) |
428 | |
429 | @@ -250,6 +251,12 @@ |
430 | |
431 | self.assert_selected_preference(2) |
432 | |
433 | + def test_that_sim_editor_is_hidden(self): |
434 | + editor = self.system_settings.main_view.cellular_page.select_single( |
435 | + objectName="simEditor" |
436 | + ) |
437 | + self.assertFalse(editor.get_properties()['visible']) |
438 | + |
439 | |
440 | class DualSimCellularTestCase(CellularBaseTestCase): |
441 | |
442 | @@ -311,7 +318,7 @@ |
443 | def use_selector(self, label): |
444 | obj = self.system_settings.main_view.cellular_page.select_single( |
445 | objectName="use" |
446 | - ).select_single('Label', text=label) |
447 | + ).select_single(objectName=label) |
448 | self.system_settings.main_view.scroll_to_and_click(obj) |
449 | |
450 | def assert_used(self, index): |
451 | @@ -321,107 +328,110 @@ |
452 | self.assertThat( |
453 | obj.selectedIndex, Eventually(Equals(index))) |
454 | |
455 | + def get_sim_name(self, num): |
456 | + obj = self.system_settings.main_view.cellular_page.select_single( |
457 | + objectName="simEditor" |
458 | + ).select_single(objectName="editSim%d" % num) |
459 | + return obj.get_properties()['text'] |
460 | + |
461 | + def rename_sim(self, num, new_name): |
462 | + obj = self.system_settings.main_view.cellular_page.select_single( |
463 | + objectName="simEditor" |
464 | + ).select_single(objectName="editSim%d" % num) |
465 | + self.system_settings.main_view.scroll_to_and_click(obj) |
466 | + field = self.system_settings.main_view.cellular_page.select_single( |
467 | + objectName="nameField" |
468 | + ) |
469 | + self.system_settings.main_view.scroll_to_and_click(field) |
470 | + self.system_settings.main_view.scroll_to_and_click( |
471 | + field.select_single(objectName="clear_button")) |
472 | + self.keyboard.type(new_name) |
473 | + self.system_settings.main_view.scroll_to_and_click( |
474 | + self.system_settings.main_view.cellular_page.select_single( |
475 | + objectName="doRename")) |
476 | + |
477 | def test_use_sim_1(self): |
478 | - self.use_selector(LABEL_OFF) |
479 | - self.use_selector(LABEL_SIM_1) |
480 | - sleep(0.7) |
481 | + self.use_selector(USE_OFF) |
482 | + self.use_selector(USE_SIM_1) |
483 | + sleep(0.7) |
484 | + self.assertEqual(True, self.modem_0.Get(CONNMAN_IFACE, 'Powered')) |
485 | + self.assertEqual(False, self.modem_1.Get(CONNMAN_IFACE, 'Powered')) |
486 | + |
487 | + def test_use_sim_2(self): |
488 | + self.use_selector(USE_OFF) |
489 | + self.use_selector(USE_SIM_2) |
490 | + sleep(0.7) |
491 | + self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered')) |
492 | self.assertEqual(True, self.modem_1.Get(CONNMAN_IFACE, 'Powered')) |
493 | - self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered')) |
494 | - |
495 | - def test_use_sim_2(self): |
496 | - self.use_selector(LABEL_OFF) |
497 | - self.use_selector(LABEL_SIM_2) |
498 | - sleep(0.7) |
499 | - self.assertEqual(True, self.modem_0.Get(CONNMAN_IFACE, 'Powered')) |
500 | - self.assertEqual(False, self.modem_1.Get(CONNMAN_IFACE, 'Powered')) |
501 | |
502 | def test_turn_off_both_sims(self): |
503 | - self.use_selector(LABEL_OFF) |
504 | + self.use_selector(USE_OFF) |
505 | sleep(0.7) |
506 | self.assertEqual(False, self.modem_0.Get(CONNMAN_IFACE, 'Powered')) |
507 | self.assertEqual(False, self.modem_1.Get(CONNMAN_IFACE, 'Powered')) |
508 | |
509 | def test_use_gsm_for_sim_1(self): |
510 | - self.use_selector(LABEL_SIM_1) |
511 | + self.use_selector(USE_SIM_1) |
512 | self.select_preference(PREFERENCE_2G) |
513 | sleep(0.7) |
514 | self.assertEqual( |
515 | - 'gsm', self.modem_1.Get(RDO_IFACE, 'TechnologyPreference')) |
516 | + 'gsm', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference')) |
517 | |
518 | def test_use_any_for_sim_1(self): |
519 | - self.use_selector(LABEL_SIM_1) |
520 | + self.use_selector(USE_SIM_1) |
521 | self.select_preference(PREFERENCE_ANY) |
522 | sleep(0.7) |
523 | self.assertEqual( |
524 | - 'any', self.modem_1.Get(RDO_IFACE, 'TechnologyPreference')) |
525 | + 'any', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference')) |
526 | |
527 | def test_use_gsm_for_sim_2(self): |
528 | - self.use_selector(LABEL_SIM_1) |
529 | + self.use_selector(USE_SIM_1) |
530 | self.select_preference(PREFERENCE_2G) |
531 | sleep(0.7) |
532 | self.assertEqual( |
533 | - 'gsm', self.modem_1.Get(RDO_IFACE, 'TechnologyPreference')) |
534 | + 'gsm', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference')) |
535 | |
536 | def test_use_any_for_sim_2(self): |
537 | - self.use_selector(LABEL_SIM_1) |
538 | + self.use_selector(USE_SIM_2) |
539 | self.select_preference(PREFERENCE_ANY) |
540 | sleep(1) |
541 | self.assertEqual( |
542 | 'any', self.modem_1.Get(RDO_IFACE, 'TechnologyPreference')) |
543 | |
544 | def test_when_sim_1_comes_online_ui_is_correct(self): |
545 | - self.use_selector(LABEL_SIM_1) |
546 | + self.use_selector(USE_SIM_1) |
547 | self.select_preference(PREFERENCE_ANY) |
548 | - self.use_selector(LABEL_OFF) |
549 | + self.use_selector(USE_OFF) |
550 | sleep(0.7) |
551 | - self.modem_1.Set(CONNMAN_IFACE, 'Powered', True) |
552 | - self.modem_1.EmitSignal( |
553 | + self.modem_0.Set(CONNMAN_IFACE, 'Powered', True) |
554 | + self.modem_0.EmitSignal( |
555 | CONNMAN_IFACE, |
556 | 'PropertyChanged', |
557 | 'sv', |
558 | ['Powered', 'true']) |
559 | |
560 | self.assertEqual( |
561 | - 'any', self.modem_1.Get(RDO_IFACE, 'TechnologyPreference')) |
562 | + 'any', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference')) |
563 | self.assert_used(1) |
564 | self.assert_selected_preference(1) |
565 | |
566 | def test_when_sim_2_comes_online_ui_is_correct(self): |
567 | - self.use_selector(LABEL_SIM_2) |
568 | + self.use_selector(USE_SIM_2) |
569 | self.select_preference(PREFERENCE_ANY) |
570 | - self.use_selector(LABEL_OFF) |
571 | + self.use_selector(USE_OFF) |
572 | sleep(0.7) |
573 | - self.modem_0.Set(CONNMAN_IFACE, 'Powered', True) |
574 | - self.modem_0.EmitSignal( |
575 | + self.modem_1.Set(CONNMAN_IFACE, 'Powered', True) |
576 | + self.modem_1.EmitSignal( |
577 | CONNMAN_IFACE, |
578 | 'PropertyChanged', |
579 | 'sv', |
580 | ['Powered', 'true']) |
581 | |
582 | self.assertEqual( |
583 | - 'any', self.modem_0.Get(RDO_IFACE, 'TechnologyPreference')) |
584 | + 'any', self.modem_1.Get(RDO_IFACE, 'TechnologyPreference')) |
585 | self.assert_used(2) |
586 | self.assert_selected_preference(1) |
587 | |
588 | - def test_both_sims_comes_online(self): |
589 | - self.use_selector(LABEL_OFF) |
590 | - sleep(2) |
591 | - self.modem_0.Set(CONNMAN_IFACE, 'Powered', True) |
592 | - self.modem_0.EmitSignal( |
593 | - CONNMAN_IFACE, |
594 | - 'PropertyChanged', |
595 | - 'sv', |
596 | - ['Powered', 'true']) |
597 | - |
598 | - self.modem_1.Set(CONNMAN_IFACE, 'Powered', True) |
599 | - self.modem_1.EmitSignal( |
600 | - CONNMAN_IFACE, |
601 | - 'PropertyChanged', |
602 | - 'sv', |
603 | - ['Powered', 'true']) |
604 | - self.assert_used(1) |
605 | - self.assert_selected_preference(0) |
606 | - |
607 | def test_roaming_switch(self): |
608 | roaming_switch = self.system_settings.main_view.select_single( |
609 | objectName="dataRoamingSwitch" |
610 | @@ -430,7 +440,7 @@ |
611 | self.assertTrue(roaming_switch.get_properties()['enabled']) |
612 | |
613 | # click off |
614 | - self.use_selector(LABEL_OFF) |
615 | + self.use_selector(USE_OFF) |
616 | |
617 | # assert roaming_switch is disabled |
618 | self.assertThat( |
619 | @@ -438,23 +448,23 @@ |
620 | Eventually(Equals(False))) |
621 | |
622 | def test_allow_roaming(self): |
623 | - self.use_selector(LABEL_SIM_1) |
624 | + self.use_selector(USE_SIM_1) |
625 | self.assertEqual( |
626 | - False, self.modem_1.Get(CONNMAN_IFACE, 'RoamingAllowed')) |
627 | + False, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed')) |
628 | roaming_switch = self.system_settings.main_view.select_single( |
629 | objectName="dataRoamingSwitch" |
630 | ) |
631 | self.system_settings.main_view.scroll_to_and_click(roaming_switch) |
632 | - sleep(2) |
633 | + sleep(1.5) |
634 | self.assertEqual( |
635 | - True, self.modem_1.Get(CONNMAN_IFACE, 'RoamingAllowed')) |
636 | + True, self.modem_0.Get(CONNMAN_IFACE, 'RoamingAllowed')) |
637 | |
638 | def test_no_radio_preference(self): |
639 | self.select_preference(PREFERENCE_ANY) |
640 | - self.use_selector(LABEL_OFF) |
641 | + self.use_selector(USE_OFF) |
642 | |
643 | - self.modem_1.Set(RDO_IFACE, 'TechnologyPreference', '') |
644 | - self.modem_1.EmitSignal( |
645 | + self.modem_0.Set(RDO_IFACE, 'TechnologyPreference', '') |
646 | + self.modem_0.EmitSignal( |
647 | CONNMAN_IFACE, |
648 | 'PropertyChanged', |
649 | 'sv', |
650 | @@ -464,18 +474,6 @@ |
651 | self.data_preference_selector.get_properties()['enabled'], |
652 | Eventually(Equals(False))) |
653 | |
654 | - def test_radio_preference_changes(self): |
655 | - self.use_selector(LABEL_SIM_1) |
656 | - |
657 | - self.modem_1.Set(RDO_IFACE, 'TechnologyPreference', 'any') |
658 | - self.modem_1.EmitSignal( |
659 | - RDO_IFACE, |
660 | - 'PropertyChanged', |
661 | - 'sv', |
662 | - ['TechnologyPreference', 'any']) |
663 | - |
664 | - self.assert_selected_preference(1) |
665 | - |
666 | # see |
667 | # https://gitorious.org/python-dbusmock/python-dbusmock/merge_requests/3 |
668 | @skip('skipped due to bug in dbusmock') |
669 | @@ -483,9 +481,7 @@ |
670 | self.navigate_to_carriers_page() |
671 | self.navigate_to_carrier_page_for_sim(1) |
672 | carriers = self.system_settings.main_view.choose_page.select_single( |
673 | - toolkit_emulators.ItemSelector, |
674 | - objectName="carrierSelector" |
675 | - ) |
676 | + toolkit_emulators.ItemSelector, objectName="carrierSelector") |
677 | manual = carriers.select_single('Label', text="my.cool.telco") |
678 | self.assertThat(manual, NotEquals(None)) |
679 | |
680 | @@ -496,8 +492,73 @@ |
681 | self.navigate_to_carriers_page() |
682 | self.navigate_to_carrier_page_for_sim(2) |
683 | carriers = self.system_settings.main_view.choose_page.select_single( |
684 | - toolkit_emulators.ItemSelector, |
685 | - objectName="carrierSelector" |
686 | - ) |
687 | + toolkit_emulators.ItemSelector, objectName="carrierSelector") |
688 | manual = carriers.select_single('Label', text="my.cool.telco") |
689 | self.assertThat(manual, NotEquals(None)) |
690 | + |
691 | + def test_radio_preference_changes(self): |
692 | + self.use_selector(USE_SIM_1) |
693 | + |
694 | + self.modem_0.Set(RDO_IFACE, 'TechnologyPreference', 'any') |
695 | + self.modem_0.EmitSignal( |
696 | + RDO_IFACE, |
697 | + 'PropertyChanged', |
698 | + 'sv', |
699 | + ['TechnologyPreference', 'any']) |
700 | + |
701 | + self.assert_selected_preference(1) |
702 | + |
703 | + def test_changing_sim1_name(self): |
704 | + gsettings = Gio.Settings.new('com.ubuntu.phone') |
705 | + old_name = gsettings.get_value('sim-names')['/ril_0'] |
706 | + new_name = 'FOO BAR' |
707 | + self.rename_sim(1, new_name) |
708 | + |
709 | + # wait for gsettings |
710 | + sleep(1) |
711 | + try: |
712 | + self.assertEqual( |
713 | + new_name, gsettings.get_value('sim-names')['/ril_0']) |
714 | + except Exception as e: |
715 | + raise e |
716 | + finally: |
717 | + self.rename_sim(1, old_name) |
718 | + sleep(1) |
719 | + |
720 | + def test_changing_sim2_name(self): |
721 | + gsettings = Gio.Settings.new('com.ubuntu.phone') |
722 | + old_name = gsettings.get_value('sim-names')['/ril_1'] |
723 | + new_name = 'BAR BAZ' |
724 | + self.rename_sim(2, new_name) |
725 | + |
726 | + # wait for gsettings |
727 | + sleep(1) |
728 | + try: |
729 | + self.assertEqual( |
730 | + new_name, gsettings.get_value('sim-names')['/ril_1']) |
731 | + except Exception as e: |
732 | + raise e |
733 | + finally: |
734 | + self.rename_sim(2, old_name) |
735 | + # wait for gsettings |
736 | + sleep(1) |
737 | + |
738 | + def test_changes_to_sim_names_in_gsettings_are_reflected_in_ui(self): |
739 | + gsettings = Gio.Settings.new('com.ubuntu.phone') |
740 | + old_names = gsettings.get_value('sim-names') |
741 | + |
742 | + new_names = old_names.unpack() |
743 | + new_names['/ril_0'] = 'BAS QUX' |
744 | + new_names = GLib.Variant('a{ss}', new_names) |
745 | + gsettings.set_value('sim-names', new_names) |
746 | + |
747 | + # wait for gsettings |
748 | + sleep(1) |
749 | + try: |
750 | + self.assertIn(new_names['/ril_0'], self.get_sim_name(1)) |
751 | + except Exception as e: |
752 | + raise e |
753 | + finally: |
754 | + gsettings.set_value('sim-names', old_names) |
755 | + # wait for gsettings |
756 | + sleep(1) |
FAILED: Continuous integration, rev:801 jenkins. qa.ubuntu. com/job/ ubuntu- system- settings- ci/1072/ jenkins. qa.ubuntu. com/job/ generic- deb-autopilot- utopic- touch/2539 jenkins. qa.ubuntu. com/job/ generic- mediumtests- utopic/ 2047 jenkins. qa.ubuntu. com/job/ ubuntu- system- settings- utopic- amd64-ci/ 264 jenkins. qa.ubuntu. com/job/ ubuntu- system- settings- utopic- armhf-ci/ 264 jenkins. qa.ubuntu. com/job/ ubuntu- system- settings- utopic- armhf-ci/ 264/artifact/ work/output/ *zip*/output. zip jenkins. qa.ubuntu. com/job/ ubuntu- system- settings- utopic- i386-ci/ 264 jenkins. qa.ubuntu. com/job/ generic- deb-autopilot- runner- mako/2686 jenkins. qa.ubuntu. com/job/ generic- mediumtests- builder- utopic- armhf/3782 jenkins. qa.ubuntu. com/job/ generic- mediumtests- builder- utopic- armhf/3782/ artifact/ work/output/ *zip*/output. zip s-jenkins. ubuntu- ci:8080/ job/touch- flash-device/ 10482 jenkins. qa.ubuntu. com/job/ autopilot- testrunner- otto-utopic/ 1715 jenkins. qa.ubuntu. com/job/ generic- mediumtests- builder- utopic- amd64/2300 jenkins. qa.ubuntu. com/job/ generic- mediumtests- builder- utopic- amd64/2300/ artifact/ work/output/ *zip*/output. zip
http://
Executed test runs:
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
Click here to trigger a rebuild: s-jenkins. ubuntu- ci:8080/ job/ubuntu- system- settings- ci/1072/ rebuild
http://