Merge lp:~mvo/software-center/thumbnail-test-fixes into lp:software-center
- thumbnail-test-fixes
- Merge into trunk
Proposed by
Michael Vogt
Status: | Merged |
---|---|
Merged at revision: | 3200 |
Proposed branch: | lp:~mvo/software-center/thumbnail-test-fixes |
Merge into: | lp:software-center |
Diff against target: |
261 lines (+68/-59) 3 files modified
softwarecenter/ui/gtk3/widgets/thumbnail.py (+21/-18) tests/gtk3/test_widgets.py (+14/-4) tests/gtk3/windows.py (+33/-37) |
To merge this branch: | bzr merge lp:~mvo/software-center/thumbnail-test-fixes |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Gary Lasker (community) | Approve | ||
Review via email: mp+125935@code.launchpad.net |
Commit message
Description of the change
Tiny branch that fixes the get_test_
function and ensures that its properly used in the automatic test.
This is a drive-by branch while trying to figure out why davmor2 sometimes
gets a "screenshot-
screenshot available
To post a comment you must log in.
- 3201. By Michael Vogt
-
add missing disconnect for self._on_
screenshot_ query_complete)
Revision history for this message
Gary Lasker (gary-lasker) : | # |
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'softwarecenter/ui/gtk3/widgets/thumbnail.py' | |||
2 | --- softwarecenter/ui/gtk3/widgets/thumbnail.py 2012-05-30 18:39:55 +0000 | |||
3 | +++ softwarecenter/ui/gtk3/widgets/thumbnail.py 2012-09-24 07:25:22 +0000 | |||
4 | @@ -162,19 +162,21 @@ | |||
5 | 162 | self.loader.disconnect_by_func( | 162 | self.loader.disconnect_by_func( |
6 | 163 | self._on_screenshot_download_complete) | 163 | self._on_screenshot_download_complete) |
7 | 164 | self.loader.disconnect_by_func( | 164 | self.loader.disconnect_by_func( |
8 | 165 | self._on_screenshot_query_complete) | ||
9 | 166 | self.loader.disconnect_by_func( | ||
10 | 165 | self._on_screenshot_load_error) | 167 | self._on_screenshot_load_error) |
11 | 166 | 168 | ||
12 | 167 | # overrides | 169 | # overrides |
13 | 168 | def do_get_preferred_width(self): | 170 | def do_get_preferred_width(self): |
14 | 169 | if self.data.get_n_screenshots() <= 1: | 171 | if self.data.get_n_screenshots() <= 1: |
16 | 170 | pb = self.button.image.get_pixbuf() | 172 | pb = self.main_screenshot.image.get_pixbuf() |
17 | 171 | if pb: | 173 | if pb: |
18 | 172 | width = pb.get_width() + 20 | 174 | width = pb.get_width() + 20 |
19 | 173 | return width, width | 175 | return width, width |
20 | 174 | return 320, 320 | 176 | return 320, 320 |
21 | 175 | 177 | ||
22 | 176 | def do_get_preferred_height(self): | 178 | def do_get_preferred_height(self): |
24 | 177 | pb = self.button.image.get_pixbuf() | 179 | pb = self.main_screenshot.image.get_pixbuf() |
25 | 178 | if pb: | 180 | if pb: |
26 | 179 | height = pb.get_height() | 181 | height = pb.get_height() |
27 | 180 | if self.data.get_n_screenshots() <= 1: | 182 | if self.data.get_n_screenshots() <= 1: |
28 | @@ -194,18 +196,18 @@ | |||
29 | 194 | def _build_ui(self): | 196 | def _build_ui(self): |
30 | 195 | self.set_border_width(3) | 197 | self.set_border_width(3) |
31 | 196 | # the frame around the screenshot (placeholder) | 198 | # the frame around the screenshot (placeholder) |
34 | 197 | self.screenshot = Gtk.VBox() | 199 | self.screenshot_frame = Gtk.VBox() |
35 | 198 | self.pack_start(self.screenshot, True, True, 0) | 200 | self.pack_start(self.screenshot_frame, True, True, 0) |
36 | 199 | 201 | ||
37 | 200 | self.spinner = Gtk.Spinner() | 202 | self.spinner = Gtk.Spinner() |
38 | 201 | self.spinner.set_size_request(*self.SPINNER_SIZE) | 203 | self.spinner.set_size_request(*self.SPINNER_SIZE) |
39 | 202 | self.spinner.set_valign(Gtk.Align.CENTER) | 204 | self.spinner.set_valign(Gtk.Align.CENTER) |
40 | 203 | self.spinner.set_halign(Gtk.Align.CENTER) | 205 | self.spinner.set_halign(Gtk.Align.CENTER) |
42 | 204 | self.screenshot.add(self.spinner) | 206 | self.screenshot_frame.add(self.spinner) |
43 | 205 | 207 | ||
47 | 206 | # clickable screenshot button | 208 | # main big clickable screenshot button |
48 | 207 | self.button = ScreenshotButton() | 209 | self.main_screenshot = ScreenshotButton() |
49 | 208 | self.screenshot.pack_start(self.button, True, False, 0) | 210 | self.screenshot_frame.pack_start(self.main_screenshot, True, False, 0) |
50 | 209 | 211 | ||
51 | 210 | # unavailable layout | 212 | # unavailable layout |
52 | 211 | self.unavailable = Gtk.Label(label=_(self.NOT_AVAILABLE_STRING)) | 213 | self.unavailable = Gtk.Label(label=_(self.NOT_AVAILABLE_STRING)) |
53 | @@ -213,7 +215,7 @@ | |||
54 | 213 | # force the label state to INSENSITIVE so we get the nice | 215 | # force the label state to INSENSITIVE so we get the nice |
55 | 214 | # subtle etched in look | 216 | # subtle etched in look |
56 | 215 | self.unavailable.set_state(Gtk.StateType.INSENSITIVE) | 217 | self.unavailable.set_state(Gtk.StateType.INSENSITIVE) |
58 | 216 | self.screenshot.add(self.unavailable) | 218 | self.screenshot_frame.add(self.unavailable) |
59 | 217 | 219 | ||
60 | 218 | self.thumbnails = ThumbnailGallery(self) | 220 | self.thumbnails = ThumbnailGallery(self) |
61 | 219 | self.thumbnails.set_margin_top(5) | 221 | self.thumbnails.set_margin_top(5) |
62 | @@ -221,9 +223,9 @@ | |||
63 | 221 | self.pack_end(self.thumbnails, False, False, 0) | 223 | self.pack_end(self.thumbnails, False, False, 0) |
64 | 222 | self.thumbnails.connect( | 224 | self.thumbnails.connect( |
65 | 223 | "thumb-selected", self.on_thumbnail_selected) | 225 | "thumb-selected", self.on_thumbnail_selected) |
69 | 224 | self.button.connect("clicked", self.on_clicked) | 226 | self.main_screenshot.connect("clicked", self.on_clicked) |
70 | 225 | self.button.connect('enter-notify-event', self._on_enter) | 227 | self.main_screenshot.connect('enter-notify-event', self._on_enter) |
71 | 226 | self.button.connect('leave-notify-event', self._on_leave) | 228 | self.main_screenshot.connect('leave-notify-event', self._on_leave) |
72 | 227 | self.show_all() | 229 | self.show_all() |
73 | 228 | 230 | ||
74 | 229 | def _on_enter(self, widget, event): | 231 | def _on_enter(self, widget, event): |
75 | @@ -261,6 +263,7 @@ | |||
76 | 261 | self.thumbnails.set_thumbnails_from_data(screenshots) | 263 | self.thumbnails.set_thumbnails_from_data(screenshots) |
77 | 262 | 264 | ||
78 | 263 | def _on_screenshot_download_complete(self, loader, screenshot_path): | 265 | def _on_screenshot_download_complete(self, loader, screenshot_path): |
79 | 266 | |||
80 | 264 | try: | 267 | try: |
81 | 265 | self.screenshot_pixbuf = GdkPixbuf.Pixbuf.new_from_file( | 268 | self.screenshot_pixbuf = GdkPixbuf.Pixbuf.new_from_file( |
82 | 266 | screenshot_path) | 269 | screenshot_path) |
83 | @@ -269,10 +272,10 @@ | |||
84 | 269 | self.loader.emit('error', GObject.GError, e) | 272 | self.loader.emit('error', GObject.GError, e) |
85 | 270 | return False | 273 | return False |
86 | 271 | 274 | ||
88 | 272 | #context = self.button.get_style_context() | 275 | #context = self.main_screenshot.get_style_context() |
89 | 273 | tw, th = self.MAX_SIZE_CONSTRAINTS | 276 | tw, th = self.MAX_SIZE_CONSTRAINTS |
90 | 274 | pb = self._downsize_pixbuf(self.screenshot_pixbuf, tw, th) | 277 | pb = self._downsize_pixbuf(self.screenshot_pixbuf, tw, th) |
92 | 275 | self.button.image.set_from_pixbuf(pb) | 278 | self.main_screenshot.image.set_from_pixbuf(pb) |
93 | 276 | self.ready = True | 279 | self.ready = True |
94 | 277 | self.display_image() | 280 | self.display_image() |
95 | 278 | 281 | ||
96 | @@ -311,8 +314,8 @@ | |||
97 | 311 | self.display_spinner() | 314 | self.display_spinner() |
98 | 312 | 315 | ||
99 | 313 | def display_spinner(self): | 316 | def display_spinner(self): |
102 | 314 | self.button.image.clear() | 317 | self.main_screenshot.image.clear() |
103 | 315 | self.button.hide() | 318 | self.main_screenshot.hide() |
104 | 316 | self.unavailable.hide() | 319 | self.unavailable.hide() |
105 | 317 | self.spinner.show() | 320 | self.spinner.show() |
106 | 318 | self.spinner.start() | 321 | self.spinner.start() |
107 | @@ -321,7 +324,7 @@ | |||
108 | 321 | self.spinner.hide() | 324 | self.spinner.hide() |
109 | 322 | self.spinner.stop() | 325 | self.spinner.stop() |
110 | 323 | self.unavailable.show() | 326 | self.unavailable.show() |
112 | 324 | self.button.hide() | 327 | self.main_screenshot.hide() |
113 | 325 | acc = self.get_accessible() | 328 | acc = self.get_accessible() |
114 | 326 | acc.set_name(_(self.NOT_AVAILABLE_STRING)) | 329 | acc.set_name(_(self.NOT_AVAILABLE_STRING)) |
115 | 327 | acc.set_role(Atk.Role.LABEL) | 330 | acc.set_role(Atk.Role.LABEL) |
116 | @@ -330,7 +333,7 @@ | |||
117 | 330 | self.unavailable.hide() | 333 | self.unavailable.hide() |
118 | 331 | self.spinner.stop() | 334 | self.spinner.stop() |
119 | 332 | self.spinner.hide() | 335 | self.spinner.hide() |
121 | 333 | self.button.show_all() | 336 | self.main_screenshot.show_all() |
122 | 334 | self.thumbnails.show() | 337 | self.thumbnails.show() |
123 | 335 | 338 | ||
124 | 336 | def get_is_actionable(self): | 339 | def get_is_actionable(self): |
125 | 337 | 340 | ||
126 | === modified file 'tests/gtk3/test_widgets.py' | |||
127 | --- tests/gtk3/test_widgets.py 2012-09-17 14:46:36 +0000 | |||
128 | +++ tests/gtk3/test_widgets.py 2012-09-24 07:25:22 +0000 | |||
129 | @@ -9,6 +9,7 @@ | |||
130 | 9 | DATA_DIR, | 9 | DATA_DIR, |
131 | 10 | setup_test_env, | 10 | setup_test_env, |
132 | 11 | do_events, | 11 | do_events, |
133 | 12 | do_events_with_sleep, | ||
134 | 12 | ) | 13 | ) |
135 | 13 | setup_test_env() | 14 | setup_test_env() |
136 | 14 | 15 | ||
137 | @@ -106,10 +107,6 @@ | |||
138 | 106 | win = get_test_buttons_window() | 107 | win = get_test_buttons_window() |
139 | 107 | self.addCleanup(win.destroy) | 108 | self.addCleanup(win.destroy) |
140 | 108 | 109 | ||
141 | 109 | def test_screenshot_thumbnail(self): | ||
142 | 110 | win = get_test_screenshot_thumbnail_window() | ||
143 | 111 | self.addCleanup(win.destroy) | ||
144 | 112 | |||
145 | 113 | def test_videoplayer(self): | 110 | def test_videoplayer(self): |
146 | 114 | win = get_test_videoplayer_window() | 111 | win = get_test_videoplayer_window() |
147 | 115 | self.addCleanup(win.destroy) | 112 | self.addCleanup(win.destroy) |
148 | @@ -118,6 +115,19 @@ | |||
149 | 118 | win = get_test_window_apptreeview() | 115 | win = get_test_window_apptreeview() |
150 | 119 | self.addCleanup(win.destroy) | 116 | self.addCleanup(win.destroy) |
151 | 120 | 117 | ||
152 | 118 | def test_screenshot_thumbnail(self): | ||
153 | 119 | win = get_test_screenshot_thumbnail_window() | ||
154 | 120 | self.addCleanup(win.destroy) | ||
155 | 121 | t = win.get_data("screenshot_thumbnail_widget") | ||
156 | 122 | b = win.get_data("screenshot_thumbnail_cycle_test_button") | ||
157 | 123 | for i in range(5): | ||
158 | 124 | b.clicked() | ||
159 | 125 | do_events_with_sleep(iterations=5) | ||
160 | 126 | # ensure that either the big screeshot is visible or the loading | ||
161 | 127 | # spinner | ||
162 | 128 | self.assertTrue(t.main_screenshot.get_property("visible") or | ||
163 | 129 | t.spinner.get_property("visible")) | ||
164 | 130 | |||
165 | 121 | 131 | ||
166 | 122 | 132 | ||
167 | 123 | class TestHWRequirements(unittest.TestCase): | 133 | class TestHWRequirements(unittest.TestCase): |
168 | 124 | 134 | ||
169 | === modified file 'tests/gtk3/windows.py' | |||
170 | --- tests/gtk3/windows.py 2012-09-20 00:53:48 +0000 | |||
171 | +++ tests/gtk3/windows.py 2012-09-24 07:25:22 +0000 | |||
172 | @@ -1038,17 +1038,35 @@ | |||
173 | 1038 | 1038 | ||
174 | 1039 | 1039 | ||
175 | 1040 | def get_test_screenshot_thumbnail_window(): | 1040 | def get_test_screenshot_thumbnail_window(): |
176 | 1041 | |||
177 | 1042 | class CycleState(object): | ||
178 | 1043 | def __init__(self): | ||
179 | 1044 | self.app_n = 0 | ||
180 | 1045 | self.apps = [application.Application("Movie Player", "totem"), | ||
181 | 1046 | application.Application("Comix", "comix"), | ||
182 | 1047 | application.Application("Gimp", "gimp"), | ||
183 | 1048 | #application.Application("ACE", "uace"), | ||
184 | 1049 | ] | ||
185 | 1050 | |||
186 | 1051 | def testing_cycle_apps(widget, thumb, db, cycle_state): | ||
187 | 1052 | d = cycle_state.apps[cycle_state.app_n].get_details(db) | ||
188 | 1053 | |||
189 | 1054 | if cycle_state.app_n + 1 < len(cycle_state.apps): | ||
190 | 1055 | cycle_state.app_n += 1 | ||
191 | 1056 | else: | ||
192 | 1057 | cycle_state.app_n = 0 | ||
193 | 1058 | |||
194 | 1059 | thumb.fetch_screenshots(d) | ||
195 | 1060 | return True | ||
196 | 1061 | |||
197 | 1062 | cycle_state = CycleState() | ||
198 | 1063 | |||
199 | 1041 | vb = Gtk.VBox(spacing=6) | 1064 | vb = Gtk.VBox(spacing=6) |
200 | 1042 | win = get_test_window(child=vb) | 1065 | win = get_test_window(child=vb) |
201 | 1043 | 1066 | ||
205 | 1044 | icons = Gtk.IconTheme.get_default() | 1067 | icons = get_test_gtk3_icon_cache() |
203 | 1045 | icons.append_search_path("/usr/share/app-install/icons/") | ||
204 | 1046 | |||
206 | 1047 | distro = softwarecenter.distro.get_distro() | 1068 | distro = softwarecenter.distro.get_distro() |
207 | 1048 | 1069 | ||
208 | 1049 | init_sc_css_provider(win, Gtk.Settings.get_default(), | ||
209 | 1050 | Gdk.Screen.get_default()) | ||
210 | 1051 | |||
211 | 1052 | t = thumbnail.ScreenshotGallery(distro, icons) | 1070 | t = thumbnail.ScreenshotGallery(distro, icons) |
212 | 1053 | t.connect('draw', t.draw) | 1071 | t.connect('draw', t.draw) |
213 | 1054 | frame = containers.FramedBox() | 1072 | frame = containers.FramedBox() |
214 | @@ -1056,39 +1074,17 @@ | |||
215 | 1056 | 1074 | ||
216 | 1057 | win.set_data("screenshot_thumbnail_widget", t) | 1075 | win.set_data("screenshot_thumbnail_widget", t) |
217 | 1058 | 1076 | ||
220 | 1059 | b = Gtk.Button('A button for focus testing') | 1077 | b = Gtk.Button('A button for cycle testing') |
221 | 1060 | vb.pack_start(b, True, True, 0) | 1078 | vb.pack_start(b, False, False, 8) |
222 | 1061 | win.set_data("screenshot_button_widget", b) | 1079 | win.set_data("screenshot_button_widget", b) |
223 | 1062 | vb.pack_start(frame, True, True, 0) | 1080 | vb.pack_start(frame, True, True, 0) |
253 | 1063 | 1081 | win.set_data("screenshot_thumbnail_cycle_test_button", b) | |
254 | 1064 | cache = pkginfo.get_pkg_info() | 1082 | |
255 | 1065 | cache.open() | 1083 | db = get_test_db() |
256 | 1066 | 1084 | win.show_all() | |
257 | 1067 | xapian_base_path = "/var/cache/software-center" | 1085 | |
258 | 1068 | pathname = os.path.join(xapian_base_path, "xapian") | 1086 | testing_cycle_apps(None, t, db, cycle_state) |
259 | 1069 | db = database.StoreDatabase(pathname, cache) | 1087 | b.connect("clicked", testing_cycle_apps, t, db, cycle_state) |
231 | 1070 | db.open() | ||
232 | 1071 | |||
233 | 1072 | apps = [application.Application("Movie Player", "totem"), | ||
234 | 1073 | application.Application("Comix", "comix"), | ||
235 | 1074 | application.Application("Gimp", "gimp"), | ||
236 | 1075 | application.Application("ACE", "uace")] | ||
237 | 1076 | |||
238 | 1077 | app_n = 0 | ||
239 | 1078 | |||
240 | 1079 | def testing_cycle_apps(_, thumb, apps, db): | ||
241 | 1080 | global app_n | ||
242 | 1081 | d = apps[app_n].get_details(db) | ||
243 | 1082 | |||
244 | 1083 | if app_n + 1 < len(apps): | ||
245 | 1084 | app_n += 1 | ||
246 | 1085 | else: | ||
247 | 1086 | app_n = 0 | ||
248 | 1087 | |||
249 | 1088 | thumb.fetch_screenshots(d) | ||
250 | 1089 | return True | ||
251 | 1090 | |||
252 | 1091 | b.connect("clicked", testing_cycle_apps, t, apps, db) | ||
260 | 1092 | 1088 | ||
261 | 1093 | return win | 1089 | return win |
262 | 1094 | 1090 |