Merge lp:~iahmad/unity-greeter/duplicate-entry-bug1092425 into lp:unity-greeter
- duplicate-entry-bug1092425
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Robert Ancell |
Approved revision: | 753 |
Merged at revision: | 761 |
Proposed branch: | lp:~iahmad/unity-greeter/duplicate-entry-bug1092425 |
Merge into: | lp:unity-greeter |
Diff against target: |
300 lines (+132/-16) 2 files modified
src/user-list.vala (+74/-2) tests/test.vala (+58/-14) |
To merge this branch: | bzr merge lp:~iahmad/unity-greeter/duplicate-entry-bug1092425 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Robert Ancell | Approve | ||
David Barth (community) | Approve | ||
Review via email: mp+147602@code.launchpad.net |
This proposal supersedes a proposal from 2013-02-06.
Commit message
Description of the change
Fixed the comments form David and Robert, Also Added a unit test case to test the defect fix as well as fixed the existing remote login unit test cases broken due to the duplicate entry fix. Please see the results below
UBUNTU_MENUPROXY=0 top_srcdir=.. . xvfb-run ./unity-
/Simple Navigation: OK
/Remote Login: OK
/Remote Login duplicate entries: OK
/Remote Login with Servers Updated signal: OK
/Remote Login with Servers Updated signal and not in remote server: OK
/Remote Login with Login Servers Updated signal: OK
/Remote Login with Login Servers Updated signal and not in removed server: OK
/Remote Login with Remote Login Changed signal: OK
/Remote Login with Remote Login Changed signal and not in changed server: OK
/Remote Login authentication: OK
/Remote Login cancel authentication: OK
/Email Autocomplete: OK
/Greeter Communication: OK
/Unsupported server type: OK
David Barth (dbarth) wrote : Posted in a previous version of this proposal | # |
Robert Ancell (robert-ancell) wrote : Posted in a previous version of this proposal | # |
You have tab characters instead of four spaces in the branch.
David Barth (dbarth) wrote : | # |
The code looks good to me now.
Approving, as much as remote login is concerned.
Robert Ancell (robert-ancell) wrote : | # |
Pushed with some coding style fixes
Preview Diff
1 | === modified file 'src/user-list.vala' | |||
2 | --- src/user-list.vala 2012-10-02 17:20:34 +0000 | |||
3 | +++ src/user-list.vala 2013-02-11 07:47:20 +0000 | |||
4 | @@ -172,15 +172,35 @@ | |||
5 | 172 | return "*remote_directory*" + remote_server.url; | 172 | return "*remote_directory*" + remote_server.url; |
6 | 173 | } | 173 | } |
7 | 174 | 174 | ||
8 | 175 | private string username_from_remote_server_fields(RemoteServer remote_server) | ||
9 | 176 | { | ||
10 | 177 | var username = ""; | ||
11 | 178 | foreach (var f in remote_server.fields) | ||
12 | 179 | { | ||
13 | 180 | if (f.type == "username" && f.default_value != null) | ||
14 | 181 | { | ||
15 | 182 | username = f.default_value.get_string(); | ||
16 | 183 | break; | ||
17 | 184 | } | ||
18 | 185 | } | ||
19 | 186 | return username; | ||
20 | 187 | } | ||
21 | 188 | |||
22 | 175 | private string user_list_name_for_remote_login_server (RemoteServer remote_server) | 189 | private string user_list_name_for_remote_login_server (RemoteServer remote_server) |
23 | 176 | { | 190 | { |
25 | 177 | return "*remote_login*" + remote_server.url; | 191 | var username = username_from_remote_server_fields(remote_server); |
26 | 192 | return "*remote_login*" + remote_server.url+"*"+username; | ||
27 | 178 | } | 193 | } |
28 | 179 | 194 | ||
29 | 180 | private string url_from_remote_loding_server_list_name (string remote_server_list_name) | 195 | private string url_from_remote_loding_server_list_name (string remote_server_list_name) |
30 | 181 | { | 196 | { |
31 | 182 | return remote_server_list_name.split ("*")[2]; | 197 | return remote_server_list_name.split ("*")[2]; |
32 | 183 | } | 198 | } |
33 | 199 | |||
34 | 200 | private string username_from_remote_loding_server_list_name (string remote_server_list_name) | ||
35 | 201 | { | ||
36 | 202 | return remote_server_list_name.split ("*")[3]; | ||
37 | 203 | } | ||
38 | 184 | 204 | ||
39 | 185 | private void set_remote_directory_servers (RemoteServer[] server_list) | 205 | private void set_remote_directory_servers (RemoteServer[] server_list) |
40 | 186 | { | 206 | { |
41 | @@ -398,6 +418,11 @@ | |||
42 | 398 | login_success = true; | 418 | login_success = true; |
43 | 399 | Timeout.add (5000, () => { remote_login_changed (currently_browsing_server_url, currently_browsing_server_email); return false; }); | 419 | Timeout.add (5000, () => { remote_login_changed (currently_browsing_server_url, currently_browsing_server_email); return false; }); |
44 | 400 | } | 420 | } |
45 | 421 | else if (password_field.text == "duplicate") | ||
46 | 422 | { | ||
47 | 423 | test_fill_remote_login_servers_duplicate_entries (out server_list); | ||
48 | 424 | login_success = true; | ||
49 | 425 | } | ||
50 | 401 | } | 426 | } |
51 | 402 | else | 427 | else |
52 | 403 | { | 428 | { |
53 | @@ -589,9 +614,12 @@ | |||
54 | 589 | { | 614 | { |
55 | 590 | current_remote_fields = new HashTable<string, Gtk.Widget> (str_hash, str_equal); | 615 | current_remote_fields = new HashTable<string, Gtk.Widget> (str_hash, str_equal); |
56 | 591 | var url = url_from_remote_loding_server_list_name (selected_entry.id); | 616 | var url = url_from_remote_loding_server_list_name (selected_entry.id); |
57 | 617 | var username = username_from_remote_loding_server_list_name(selected_entry.id); | ||
58 | 618 | |||
59 | 592 | foreach (var remote_server in server_list) | 619 | foreach (var remote_server in server_list) |
60 | 593 | { | 620 | { |
62 | 594 | if (remote_server.url == url) | 621 | var remote_username = username_from_remote_server_fields(remote_server); |
63 | 622 | if (remote_server.url == url && (username == null || username == remote_username)) | ||
64 | 595 | { | 623 | { |
65 | 596 | if (selected_entry.id.has_prefix ("*remote_login")) | 624 | if (selected_entry.id.has_prefix ("*remote_login")) |
66 | 597 | { | 625 | { |
67 | @@ -1236,6 +1264,50 @@ | |||
68 | 1236 | server_list[3] = remote_server4; | 1264 | server_list[3] = remote_server4; |
69 | 1237 | } | 1265 | } |
70 | 1238 | 1266 | ||
71 | 1267 | private void test_fill_remote_login_servers_duplicate_entries (out RemoteServer[] server_list) | ||
72 | 1268 | { | ||
73 | 1269 | //Create two remote servers with same url but different username and domain. | ||
74 | 1270 | server_list = {}; | ||
75 | 1271 | |||
76 | 1272 | RemoteServer remote_server2 = RemoteServer (); | ||
77 | 1273 | remote_server2.type = "rdp"; | ||
78 | 1274 | remote_server2.name = "RDP server with default username, and editable domain"; | ||
79 | 1275 | remote_server2.url = "http://rdpdefaultusername.com"; | ||
80 | 1276 | remote_server2.last_used_server = false; | ||
81 | 1277 | remote_server2.fields = {}; | ||
82 | 1278 | RemoteServerField field21 = RemoteServerField (); | ||
83 | 1279 | field21.type = "username"; | ||
84 | 1280 | field21.default_value = new Variant.string ("alowl1"); | ||
85 | 1281 | RemoteServerField field22 = RemoteServerField (); | ||
86 | 1282 | field22.type = "password"; | ||
87 | 1283 | field22.default_value = new Variant.string ("duplicate1"); | ||
88 | 1284 | RemoteServerField field23 = RemoteServerField (); | ||
89 | 1285 | field23.type = "domain"; | ||
90 | 1286 | field23.default_value = new Variant.string ("SCANNERS"); | ||
91 | 1287 | remote_server2.fields = {field21, field22, field23}; | ||
92 | 1288 | |||
93 | 1289 | RemoteServer remote_server5 = RemoteServer (); | ||
94 | 1290 | remote_server5.type = "rdp"; | ||
95 | 1291 | remote_server5.name = "RDP server with default username, and editable domain"; | ||
96 | 1292 | remote_server5.url = "http://rdpdefaultusername.com"; | ||
97 | 1293 | remote_server5.last_used_server = false; | ||
98 | 1294 | remote_server5.fields = {}; | ||
99 | 1295 | RemoteServerField field51 = RemoteServerField (); | ||
100 | 1296 | field51.type = "username"; | ||
101 | 1297 | field51.default_value = new Variant.string ("alowl2"); | ||
102 | 1298 | RemoteServerField field52 = RemoteServerField (); | ||
103 | 1299 | field52.type = "password"; | ||
104 | 1300 | field52.default_value = new Variant.string ("duplicate2"); | ||
105 | 1301 | RemoteServerField field53 = RemoteServerField (); | ||
106 | 1302 | field53.type = "domain"; | ||
107 | 1303 | field53.default_value = new Variant.string ("PRINTERS"); | ||
108 | 1304 | remote_server5.fields = {field51, field52, field53}; | ||
109 | 1305 | |||
110 | 1306 | server_list.resize (2); | ||
111 | 1307 | server_list[0] = remote_server2; | ||
112 | 1308 | server_list[1] = remote_server5; | ||
113 | 1309 | } | ||
114 | 1310 | |||
115 | 1239 | private bool test_key_press_cb (Gdk.EventKey event) | 1311 | private bool test_key_press_cb (Gdk.EventKey event) |
116 | 1240 | { | 1312 | { |
117 | 1241 | if ((event.state & Gdk.CONTROL_MASK) == 0) | 1313 | if ((event.state & Gdk.CONTROL_MASK) == 0) |
118 | 1242 | 1314 | ||
119 | === modified file 'tests/test.vala' | |||
120 | --- tests/test.vala 2013-01-04 15:28:54 +0000 | |||
121 | +++ tests/test.vala 2013-02-11 07:47:20 +0000 | |||
122 | @@ -183,7 +183,7 @@ | |||
123 | 183 | pwd.text = "password"; | 183 | pwd.text = "password"; |
124 | 184 | list.selected_entry.respond ({}); | 184 | list.selected_entry.respond ({}); |
125 | 185 | GLib.assert (!list.selected_entry.has_errors); | 185 | GLib.assert (!list.selected_entry.has_errors); |
127 | 186 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com"); | 186 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com*lwola"); |
128 | 187 | wait_for_scrolling_end (list); | 187 | wait_for_scrolling_end (list); |
129 | 188 | 188 | ||
130 | 189 | // Go back to the remote_directory entry and write the same password but an invalid email | 189 | // Go back to the remote_directory entry and write the same password but an invalid email |
131 | @@ -215,7 +215,7 @@ | |||
132 | 215 | pwd.text = "delay1"; | 215 | pwd.text = "delay1"; |
133 | 216 | list.selected_entry.respond ({}); | 216 | list.selected_entry.respond ({}); |
134 | 217 | GLib.assert (!list.selected_entry.has_errors); | 217 | GLib.assert (!list.selected_entry.has_errors); |
136 | 218 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com"); | 218 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com*lwola"); |
137 | 219 | 219 | ||
138 | 220 | bool done = false; | 220 | bool done = false; |
139 | 221 | // The delay1 code triggers at 5 seconds | 221 | // The delay1 code triggers at 5 seconds |
140 | @@ -253,7 +253,7 @@ | |||
141 | 253 | pwd.text = "delay1"; | 253 | pwd.text = "delay1"; |
142 | 254 | list.selected_entry.respond ({}); | 254 | list.selected_entry.respond ({}); |
143 | 255 | GLib.assert (!list.selected_entry.has_errors); | 255 | GLib.assert (!list.selected_entry.has_errors); |
145 | 256 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com"); | 256 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com*lwola"); |
146 | 257 | wait_for_scrolling_end (list); | 257 | wait_for_scrolling_end (list); |
147 | 258 | 258 | ||
148 | 259 | while (list.selected_entry.id.has_prefix("*remote_")) | 259 | while (list.selected_entry.id.has_prefix("*remote_")) |
149 | @@ -299,7 +299,7 @@ | |||
150 | 299 | pwd.text = "delay2"; | 299 | pwd.text = "delay2"; |
151 | 300 | list.selected_entry.respond ({}); | 300 | list.selected_entry.respond ({}); |
152 | 301 | GLib.assert (!list.selected_entry.has_errors); | 301 | GLib.assert (!list.selected_entry.has_errors); |
154 | 302 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com"); | 302 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com*lwola"); |
155 | 303 | 303 | ||
156 | 304 | bool done = false; | 304 | bool done = false; |
157 | 305 | // The delay2 code triggers at 5 seconds | 305 | // The delay2 code triggers at 5 seconds |
158 | @@ -307,7 +307,7 @@ | |||
159 | 307 | { | 307 | { |
160 | 308 | // If the login server we were disappears we get moved to a different one | 308 | // If the login server we were disappears we get moved to a different one |
161 | 309 | wait_for_scrolling_end (list); | 309 | wait_for_scrolling_end (list); |
163 | 310 | GLib.assert (list.selected_entry.id == "*remote_login*http://megacoolrdpserver.com"); | 310 | GLib.assert (list.selected_entry.id == "*remote_login*http://megacoolrdpserver.com*"); |
164 | 311 | done = true; | 311 | done = true; |
165 | 312 | return false; | 312 | return false; |
166 | 313 | } | 313 | } |
167 | @@ -336,10 +336,10 @@ | |||
168 | 336 | pwd.text = "delay2"; | 336 | pwd.text = "delay2"; |
169 | 337 | list.selected_entry.respond ({}); | 337 | list.selected_entry.respond ({}); |
170 | 338 | GLib.assert (!list.selected_entry.has_errors); | 338 | GLib.assert (!list.selected_entry.has_errors); |
172 | 339 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com"); | 339 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com*lwola"); |
173 | 340 | 340 | ||
174 | 341 | // Move to a server that won't be removed | 341 | // Move to a server that won't be removed |
176 | 342 | while (list.selected_entry.id != "*remote_login*http://coolrdpserver.com") | 342 | while (list.selected_entry.id != "*remote_login*http://coolrdpserver.com*") |
177 | 343 | do_scroll (list, GreeterList.ScrollTarget.UP); | 343 | do_scroll (list, GreeterList.ScrollTarget.UP); |
178 | 344 | 344 | ||
179 | 345 | bool done = false; | 345 | bool done = false; |
180 | @@ -348,7 +348,7 @@ | |||
181 | 348 | { | 348 | { |
182 | 349 | // If the login server we were did not disappear we are still in the same one | 349 | // If the login server we were did not disappear we are still in the same one |
183 | 350 | wait_for_scrolling_end (list); | 350 | wait_for_scrolling_end (list); |
185 | 351 | GLib.assert (list.selected_entry.id == "*remote_login*http://coolrdpserver.com"); | 351 | GLib.assert (list.selected_entry.id == "*remote_login*http://coolrdpserver.com*"); |
186 | 352 | done = true; | 352 | done = true; |
187 | 353 | return false; | 353 | return false; |
188 | 354 | } | 354 | } |
189 | @@ -377,7 +377,7 @@ | |||
190 | 377 | pwd.text = "delay3"; | 377 | pwd.text = "delay3"; |
191 | 378 | list.selected_entry.respond ({}); | 378 | list.selected_entry.respond ({}); |
192 | 379 | GLib.assert (!list.selected_entry.has_errors); | 379 | GLib.assert (!list.selected_entry.has_errors); |
194 | 380 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com"); | 380 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com*lwola"); |
195 | 381 | 381 | ||
196 | 382 | bool done = false; | 382 | bool done = false; |
197 | 383 | // The delay3 code triggers at 5 seconds | 383 | // The delay3 code triggers at 5 seconds |
198 | @@ -419,7 +419,7 @@ | |||
199 | 419 | pwd.text = "delay3"; | 419 | pwd.text = "delay3"; |
200 | 420 | list.selected_entry.respond ({}); | 420 | list.selected_entry.respond ({}); |
201 | 421 | GLib.assert (!list.selected_entry.has_errors); | 421 | GLib.assert (!list.selected_entry.has_errors); |
203 | 422 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com"); | 422 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com*lwola"); |
204 | 423 | wait_for_scrolling_end (list); | 423 | wait_for_scrolling_end (list); |
205 | 424 | 424 | ||
206 | 425 | while (list.selected_entry.id.has_prefix("*remote_")) | 425 | while (list.selected_entry.id.has_prefix("*remote_")) |
207 | @@ -473,7 +473,7 @@ | |||
208 | 473 | pwd.text = "password"; | 473 | pwd.text = "password"; |
209 | 474 | list.selected_entry.respond ({}); | 474 | list.selected_entry.respond ({}); |
210 | 475 | GLib.assert (!list.selected_entry.has_errors); | 475 | GLib.assert (!list.selected_entry.has_errors); |
212 | 476 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com"); | 476 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com*lwola"); |
213 | 477 | wait_for_scrolling_end (list); | 477 | wait_for_scrolling_end (list); |
214 | 478 | 478 | ||
215 | 479 | UnityGreeter.singleton.session_started = false; | 479 | UnityGreeter.singleton.session_started = false; |
216 | @@ -503,7 +503,7 @@ | |||
217 | 503 | pwd.text = "password"; | 503 | pwd.text = "password"; |
218 | 504 | list.selected_entry.respond ({}); | 504 | list.selected_entry.respond ({}); |
219 | 505 | GLib.assert (!list.selected_entry.has_errors); | 505 | GLib.assert (!list.selected_entry.has_errors); |
221 | 506 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com"); | 506 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername2.com*lwola"); |
222 | 507 | wait_for_scrolling_end (list); | 507 | wait_for_scrolling_end (list); |
223 | 508 | 508 | ||
224 | 509 | UnityGreeter.singleton.session_started = false; | 509 | UnityGreeter.singleton.session_started = false; |
225 | @@ -520,6 +520,49 @@ | |||
226 | 520 | mw.hide (); | 520 | mw.hide (); |
227 | 521 | } | 521 | } |
228 | 522 | 522 | ||
229 | 523 | public static void remote_login_duplicate_entries() | ||
230 | 524 | { | ||
231 | 525 | MainWindow mw = setup (); | ||
232 | 526 | TestList list = mw.stack.top () as TestList; | ||
233 | 527 | |||
234 | 528 | scroll_to_remote_login (list); //Wait until remote login appears. | ||
235 | 529 | GLib.assert (list.selected_entry.id == "*remote_directory*http://crazyurl.com"); | ||
236 | 530 | GLib.assert (!list.selected_entry.has_errors); | ||
237 | 531 | |||
238 | 532 | // If we answer without filling in any field -> error | ||
239 | 533 | list.selected_entry.respond ({}); | ||
240 | 534 | GLib.assert (list.selected_entry.has_errors); | ||
241 | 535 | |||
242 | 536 | // Go to first and back to last to clear the error | ||
243 | 537 | do_scroll (list, GreeterList.ScrollTarget.START); | ||
244 | 538 | do_scroll (list, GreeterList.ScrollTarget.END); | ||
245 | 539 | GLib.assert (!list.selected_entry.has_errors); | ||
246 | 540 | |||
247 | 541 | // Fill in a valid email and password | ||
248 | 542 | // Check there is no error and we moved to the last logged in server | ||
249 | 543 | var email = remote_directory_entry_email_field (list); | ||
250 | 544 | var pwd = remote_directory_entry_password_field (list); | ||
251 | 545 | email.text = "a@canonical.com"; | ||
252 | 546 | pwd.text = "duplicate"; | ||
253 | 547 | list.selected_entry.respond ({}); | ||
254 | 548 | GLib.assert (!list.selected_entry.has_errors); | ||
255 | 549 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername.com*alowl2"); | ||
256 | 550 | |||
257 | 551 | var username = remote_login_entry_username_field(list); | ||
258 | 552 | var domain = remote_login_entry_domain_field(list); | ||
259 | 553 | var password = remote_login_entry_password_field(list); | ||
260 | 554 | GLib.assert (username.text == "alowl2" && domain.text == "PRINTERS" && password.text == "duplicate2"); | ||
261 | 555 | |||
262 | 556 | do_scroll (list, GreeterList.ScrollTarget.DOWN); | ||
263 | 557 | GLib.assert (list.selected_entry.id == "*remote_login*http://rdpdefaultusername.com*alowl1"); | ||
264 | 558 | username = remote_login_entry_username_field(list); | ||
265 | 559 | domain = remote_login_entry_domain_field(list); | ||
266 | 560 | password = remote_login_entry_password_field(list); | ||
267 | 561 | GLib.assert (username.text == "alowl1" && domain.text == "SCANNERS" && password.text == "duplicate1"); | ||
268 | 562 | wait_for_scrolling_end (list); | ||
269 | 563 | mw.hide (); | ||
270 | 564 | } | ||
271 | 565 | |||
272 | 523 | public static void email_autocomplete () | 566 | public static void email_autocomplete () |
273 | 524 | { | 567 | { |
274 | 525 | MainWindow mw = setup (); | 568 | MainWindow mw = setup (); |
275 | @@ -587,7 +630,7 @@ | |||
276 | 587 | list.selected_entry.respond ({}); | 630 | list.selected_entry.respond ({}); |
277 | 588 | wait_for_scrolling_end (list); | 631 | wait_for_scrolling_end (list); |
278 | 589 | 632 | ||
280 | 590 | while (list.selected_entry.id != "*remote_login*http://coolrdpserver.com") | 633 | while (list.selected_entry.id != "*remote_login*http://coolrdpserver.com*") |
281 | 591 | do_scroll (list, GreeterList.ScrollTarget.UP); | 634 | do_scroll (list, GreeterList.ScrollTarget.UP); |
282 | 592 | 635 | ||
283 | 593 | var domain = remote_login_entry_domain_field (list); | 636 | var domain = remote_login_entry_domain_field (list); |
284 | @@ -626,7 +669,7 @@ | |||
285 | 626 | list.selected_entry.respond ({}); | 669 | list.selected_entry.respond ({}); |
286 | 627 | wait_for_scrolling_end (list); | 670 | wait_for_scrolling_end (list); |
287 | 628 | 671 | ||
289 | 629 | while (list.selected_entry.id != "*remote_login*http://notsupportedserver.com") | 672 | while (list.selected_entry.id != "*remote_login*http://notsupportedserver.com*") |
290 | 630 | do_scroll (list, GreeterList.ScrollTarget.UP); | 673 | do_scroll (list, GreeterList.ScrollTarget.UP); |
291 | 631 | 674 | ||
292 | 632 | GLib.assert (list.selected_entry.has_errors); | 675 | GLib.assert (list.selected_entry.has_errors); |
293 | @@ -675,6 +718,7 @@ | |||
294 | 675 | 718 | ||
295 | 676 | GLib.Test.add_func ("/Simple Navigation", simple_navigation); | 719 | GLib.Test.add_func ("/Simple Navigation", simple_navigation); |
296 | 677 | GLib.Test.add_func ("/Remote Login", remote_login); | 720 | GLib.Test.add_func ("/Remote Login", remote_login); |
297 | 721 | GLib.Test.add_func ("/Remote Login duplicate entries", remote_login_duplicate_entries); | ||
298 | 678 | GLib.Test.add_func ("/Remote Login with Servers Updated signal", remote_login_servers_updated_signal); | 722 | GLib.Test.add_func ("/Remote Login with Servers Updated signal", remote_login_servers_updated_signal); |
299 | 679 | GLib.Test.add_func ("/Remote Login with Servers Updated signal and not in remote server", remote_login_servers_updated_signal_focus_not_in_remote_server); | 723 | GLib.Test.add_func ("/Remote Login with Servers Updated signal and not in remote server", remote_login_servers_updated_signal_focus_not_in_remote_server); |
300 | 680 | GLib.Test.add_func ("/Remote Login with Login Servers Updated signal", remote_login_login_servers_updated_signal); | 724 | GLib.Test.add_func ("/Remote Login with Login Servers Updated signal", remote_login_login_servers_updated_signal); |
The code looks fine, but i'd prefer to have a unit test to verify that the bug is indeed gone.
The foreach loop could also be factorized under a new function with a name explaining that it generates a unique id for the user + url combination.