Merge lp:~renatofilho/mediaplayer-app/add-gst-libav into lp:mediaplayer-app
- add-gst-libav
- Merge into trunk
Status: | Rejected |
---|---|
Rejected by: | Renato Araujo Oliveira Filho |
Proposed branch: | lp:~renatofilho/mediaplayer-app/add-gst-libav |
Merge into: | lp:mediaplayer-app |
Diff against target: |
307 lines (+78/-68) 6 files modified
debian/control (+2/-1) src/qml/player.qml (+1/-0) tests/autopilot/mediaplayer_app/emulators/main_window.py (+35/-2) tests/autopilot/mediaplayer_app/tests/__init__.py (+2/-5) tests/autopilot/mediaplayer_app/tests/test_player.py (+9/-21) tests/autopilot/mediaplayer_app/tests/test_player_with_video.py (+29/-39) |
To merge this branch: | bzr merge lp:~renatofilho/mediaplayer-app/add-gst-libav |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
PS Jenkins bot | continuous-integration | Needs Fixing | |
Ubuntu Phablet Team | Pending | ||
Review via email: mp+193604@code.launchpad.net |
Commit message
Added gstreamer1.0-libav as dep for i386 and amd64 arch.
Description of the change
PS Jenkins bot (ps-jenkins) wrote : | # |
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:140
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
- 141. By Renato Araujo Oliveira Filho
-
Changed autopilot package arch.
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:141
http://
Executed test runs:
UNSTABLE: http://
FAILURE: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
FAILURE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Unmerged revisions
- 141. By Renato Araujo Oliveira Filho
-
Changed autopilot package arch.
- 140. By Renato Araujo Oliveira Filho
-
Added gstreamer1.0-libav as dep for i386 and amd64 arch.
Preview Diff
1 | === modified file 'debian/control' | |||
2 | --- debian/control 2013-10-14 21:48:26 +0000 | |||
3 | +++ debian/control 2013-11-01 15:09:37 +0000 | |||
4 | @@ -37,10 +37,11 @@ | |||
5 | 37 | A QML Media player service used by Ubuntu shell to play video sources. | 37 | A QML Media player service used by Ubuntu shell to play video sources. |
6 | 38 | 38 | ||
7 | 39 | Package: mediaplayer-app-autopilot | 39 | Package: mediaplayer-app-autopilot |
9 | 40 | Architecture: all | 40 | Architecture: any |
10 | 41 | Depends: ${misc:Depends}, | 41 | Depends: ${misc:Depends}, |
11 | 42 | ${shlibs:Depends}, | 42 | ${shlibs:Depends}, |
12 | 43 | libautopilot-qt, | 43 | libautopilot-qt, |
13 | 44 | gstreamer1.0-libav[i386 amd64], | ||
14 | 44 | libqt5test5, | 45 | libqt5test5, |
15 | 45 | libqt5widgets5, | 46 | libqt5widgets5, |
16 | 46 | mediaplayer-app (>= ${source:Version}), | 47 | mediaplayer-app (>= ${source:Version}), |
17 | 47 | 48 | ||
18 | === modified file 'src/qml/player.qml' | |||
19 | --- src/qml/player.qml 2013-10-15 22:50:12 +0000 | |||
20 | +++ src/qml/player.qml 2013-11-01 15:09:37 +0000 | |||
21 | @@ -60,6 +60,7 @@ | |||
22 | 60 | 60 | ||
23 | 61 | Popups.Dialog { | 61 | Popups.Dialog { |
24 | 62 | id: dialogue | 62 | id: dialogue |
25 | 63 | objectName: "noMediaDialog" | ||
26 | 63 | 64 | ||
27 | 64 | title: i18n.tr("Error") | 65 | title: i18n.tr("Error") |
28 | 65 | text: i18n.tr("No video selected to play. Connect your phone to your computer to transfer videos to the phone. Then select video from Videos lens.") | 66 | text: i18n.tr("No video selected to play. Connect your phone to your computer to transfer videos to the phone. Then select video from Videos lens.") |
29 | 66 | 67 | ||
30 | === modified file 'tests/autopilot/mediaplayer_app/emulators/main_window.py' | |||
31 | --- tests/autopilot/mediaplayer_app/emulators/main_window.py 2013-05-27 11:23:52 +0000 | |||
32 | +++ tests/autopilot/mediaplayer_app/emulators/main_window.py 2013-11-01 15:09:37 +0000 | |||
33 | @@ -16,5 +16,38 @@ | |||
34 | 16 | """Get the main QML view""" | 16 | """Get the main QML view""" |
35 | 17 | return self.app.select_single("QQuickView") | 17 | return self.app.select_single("QQuickView") |
36 | 18 | 18 | ||
39 | 19 | def get_object(self, typeName, name): | 19 | def get_controls(self): |
40 | 20 | return self.app.select_single(typeName, objectName=name) | 20 | return self.app.select_single("Controls", objectName="controls") |
41 | 21 | |||
42 | 22 | def get_video_area(self): | ||
43 | 23 | return self.app.select_single("VideoPlayer", objectName="player") | ||
44 | 24 | |||
45 | 25 | def get_toolbar(self): | ||
46 | 26 | return self.app.select_single("GenericToolbar", objectName="toolbar") | ||
47 | 27 | |||
48 | 28 | def get_playback_button(self): | ||
49 | 29 | return self.app.select_single("IconButton", objectName="Controls.PlayBackButton") | ||
50 | 30 | |||
51 | 31 | def get_player(self): | ||
52 | 32 | return self.app.select_single("VideoPlayer", objectName="player") | ||
53 | 33 | |||
54 | 34 | def get_scene_selector(self): | ||
55 | 35 | return self.app.select_single("SceneSelector", objectName="Controls.SceneSelector") | ||
56 | 36 | |||
57 | 37 | def get_slider(self): | ||
58 | 38 | return self.app.select_single("Slider", objectName="TimeLine.Slider") | ||
59 | 39 | |||
60 | 40 | def get_timeline(self): | ||
61 | 41 | return self.app.select_single("TimeLine", objectName="TimeLine") | ||
62 | 42 | |||
63 | 43 | def get_scene_0(self): | ||
64 | 44 | return self.app.select_single("SceneFrame", objectName="SceneSelector.Scene0") | ||
65 | 45 | |||
66 | 46 | def get_scene_2(self): | ||
67 | 47 | return self.app.select_single("SceneFrame", objectName="SceneSelector.Scene2") | ||
68 | 48 | |||
69 | 49 | def get_time_label(self): | ||
70 | 50 | return self.app.select_single("Label", objectName="TimeLine.TimeLabel") | ||
71 | 51 | |||
72 | 52 | def get_no_video_dialog(self): | ||
73 | 53 | return self.app.select_single("Dialog", objectName="noMediaDialog") | ||
74 | 21 | 54 | ||
75 | === modified file 'tests/autopilot/mediaplayer_app/tests/__init__.py' | |||
76 | --- tests/autopilot/mediaplayer_app/tests/__init__.py 2013-05-27 11:23:52 +0000 | |||
77 | +++ tests/autopilot/mediaplayer_app/tests/__init__.py 2013-11-01 15:09:37 +0000 | |||
78 | @@ -7,7 +7,6 @@ | |||
79 | 7 | 7 | ||
80 | 8 | """mediaplayer-app autopilot tests.""" | 8 | """mediaplayer-app autopilot tests.""" |
81 | 9 | 9 | ||
82 | 10 | from os import remove | ||
83 | 11 | import os.path | 10 | import os.path |
84 | 12 | import os | 11 | import os |
85 | 13 | 12 | ||
86 | @@ -26,11 +25,9 @@ | |||
87 | 26 | """ | 25 | """ |
88 | 27 | 26 | ||
89 | 28 | if model() == 'Desktop': | 27 | if model() == 'Desktop': |
92 | 29 | scenarios = [ | 28 | scenarios = [('with mouse', dict(input_device_class=Mouse))] |
91 | 30 | ('with mouse', dict(input_device_class=Mouse))] | ||
93 | 31 | else: | 29 | else: |
96 | 32 | scenarios = [ | 30 | scenarios = [('with touch', dict(input_device_class=Touch))] |
95 | 33 | ('with touch', dict(input_device_class=Touch))] | ||
97 | 34 | 31 | ||
98 | 35 | def setUp(self): | 32 | def setUp(self): |
99 | 36 | self.pointing_device = Pointer(self.input_device_class.create()) | 33 | self.pointing_device = Pointer(self.input_device_class.create()) |
100 | 37 | 34 | ||
101 | === modified file 'tests/autopilot/mediaplayer_app/tests/test_player.py' | |||
102 | --- tests/autopilot/mediaplayer_app/tests/test_player.py 2013-05-27 11:23:52 +0000 | |||
103 | +++ tests/autopilot/mediaplayer_app/tests/test_player.py 2013-11-01 15:09:37 +0000 | |||
104 | @@ -14,11 +14,6 @@ | |||
105 | 14 | 14 | ||
106 | 15 | from mediaplayer_app.tests import MediaplayerAppTestCase | 15 | from mediaplayer_app.tests import MediaplayerAppTestCase |
107 | 16 | 16 | ||
108 | 17 | import unittest | ||
109 | 18 | import time | ||
110 | 19 | import os | ||
111 | 20 | from os import path | ||
112 | 21 | |||
113 | 22 | 17 | ||
114 | 23 | class TestPlayer(MediaplayerAppTestCase): | 18 | class TestPlayer(MediaplayerAppTestCase): |
115 | 24 | """Tests the main media player features""" | 19 | """Tests the main media player features""" |
116 | @@ -34,19 +29,12 @@ | |||
117 | 34 | def tearDown(self): | 29 | def tearDown(self): |
118 | 35 | super(TestPlayer, self).tearDown() | 30 | super(TestPlayer, self).tearDown() |
119 | 36 | 31 | ||
136 | 37 | """ Test if the toolbar appears with mouse click over the video area """ | 32 | def test_no_video_dialog_visible(self): |
137 | 38 | def test_controls_visibility(self): | 33 | """ Makes sure 'No Video' dialog appears if the meidaplayer is opened |
138 | 39 | controls = self.main_window.get_object("Controls", "controls") | 34 | without a video file argument. |
139 | 40 | 35 | ||
140 | 41 | """ The toolbar is invisible by default """ | 36 | """ |
141 | 42 | self.assertProperty(controls, visible=False) | 37 | |
142 | 43 | 38 | dialog = self.main_window.get_no_video_dialog() | |
143 | 44 | """ Toolbar must apper when clicked in the video area """ | 39 | self.assertThat(dialog.visible, Eventually(Equals(True))) |
144 | 45 | video_area = self.main_window.get_object("VideoPlayer", "player") | 40 | |
129 | 46 | self.pointing_device.move_to_object(video_area) | ||
130 | 47 | self.pointing_device.click() | ||
131 | 48 | self.assertProperty(controls, visible=True) | ||
132 | 49 | |||
133 | 50 | """ Toolbar must disappear when clicked in the video area again """ | ||
134 | 51 | self.pointing_device.click() | ||
135 | 52 | self.assertProperty(controls, visible=True) | ||
145 | 53 | 41 | ||
146 | === modified file 'tests/autopilot/mediaplayer_app/tests/test_player_with_video.py' | |||
147 | --- tests/autopilot/mediaplayer_app/tests/test_player_with_video.py 2013-09-25 21:19:34 +0000 | |||
148 | +++ tests/autopilot/mediaplayer_app/tests/test_player_with_video.py 2013-11-01 15:09:37 +0000 | |||
149 | @@ -30,64 +30,60 @@ | |||
150 | 30 | self.assertThat( | 30 | self.assertThat( |
151 | 31 | self.main_window.get_qml_view().visible, Eventually(Equals(True))) | 31 | self.main_window.get_qml_view().visible, Eventually(Equals(True))) |
152 | 32 | # wait video player start | 32 | # wait video player start |
154 | 33 | player = self.main_window.get_object("VideoPlayer", "player") | 33 | player = self.main_window.get_player() |
155 | 34 | self.assertThat(player.playing, Eventually(Equals(True))) | 34 | self.assertThat(player.playing, Eventually(Equals(True))) |
156 | 35 | 35 | ||
157 | 36 | def tearDown(self): | 36 | def tearDown(self): |
158 | 37 | super(TestPlayerWithVideo, self).tearDown() | 37 | super(TestPlayerWithVideo, self).tearDown() |
159 | 38 | 38 | ||
160 | 39 | def show_controls(self): | 39 | def show_controls(self): |
165 | 40 | video_area = self.main_window.get_object("VideoPlayer", "player") | 40 | video_area = self.main_window.get_video_area() |
166 | 41 | self.pointing_device.move_to_object(video_area) | 41 | self.pointing_device.click_object(video_area) |
167 | 42 | self.pointing_device.click() | 42 | toolbar = self.main_window.get_toolbar() |
164 | 43 | toolbar = self.main_window.get_object("GenericToolbar", "toolbar") | ||
168 | 44 | self.assertThat(toolbar.ready, Eventually(Equals(True))) | 43 | self.assertThat(toolbar.ready, Eventually(Equals(True))) |
169 | 45 | 44 | ||
170 | 46 | def pause_video(self): | 45 | def pause_video(self): |
174 | 47 | playback_buttom = self.main_window.get_object("IconButton", "Controls.PlayBackButton") | 46 | playback_button = self.main_window.get_playback_button() |
175 | 48 | self.pointing_device.move_to_object(playback_buttom) | 47 | self.pointing_device.click_object(playback_button) |
173 | 49 | self.pointing_device.click() | ||
176 | 50 | 48 | ||
178 | 51 | def test_playback_buttom_states(self): | 49 | def test_playback_button_states(self): |
179 | 52 | self.show_controls() | 50 | self.show_controls() |
180 | 53 | 51 | ||
183 | 54 | playback_buttom = self.main_window.get_object("IconButton", "Controls.PlayBackButton") | 52 | playback_button = self.main_window.get_playback_button() |
184 | 55 | player = self.main_window.get_object("VideoPlayer", "player") | 53 | player = self.main_window.get_player() |
185 | 56 | 54 | ||
186 | 57 | """ Default state after load the video is playing and with pause | 55 | """ Default state after load the video is playing and with pause |
187 | 58 | icon. | 56 | icon. |
188 | 59 | """ | 57 | """ |
189 | 60 | self.assertProperty(player, playing=True, paused=False) | 58 | self.assertProperty(player, playing=True, paused=False) |
191 | 61 | self.assertProperty(playback_buttom, icon="pause") | 59 | self.assertProperty(playback_button, icon="pause") |
192 | 62 | 60 | ||
195 | 63 | self.pointing_device.move_to_object(playback_buttom) | 61 | self.pointing_device.click_object(playback_button) |
194 | 64 | self.pointing_device.click() | ||
196 | 65 | 62 | ||
197 | 66 | """ First click must pause the video, change playing state and show | 63 | """ First click must pause the video, change playing state and show |
198 | 67 | play icon. """ | 64 | play icon. """ |
199 | 68 | self.assertProperty(player, playing=False, paused=True) | 65 | self.assertProperty(player, playing=False, paused=True) |
201 | 69 | self.assertProperty(playback_buttom, icon="play") | 66 | self.assertProperty(playback_button, icon="play") |
202 | 70 | 67 | ||
203 | 71 | self.pointing_device.click() | 68 | self.pointing_device.click() |
204 | 72 | 69 | ||
205 | 73 | """ Second click should change the state to playing again """ | 70 | """ Second click should change the state to playing again """ |
206 | 74 | self.assertProperty(player, playing=True, paused=False) | 71 | self.assertProperty(player, playing=True, paused=False) |
208 | 75 | self.assertProperty(playback_buttom, icon="pause") | 72 | self.assertProperty(playback_button, icon="pause") |
209 | 76 | 73 | ||
210 | 77 | @skip("New backend work needed. bug 1231147") | 74 | @skip("New backend work needed. bug 1231147") |
211 | 78 | def test_scene_selector_visibility(self): | 75 | def test_scene_selector_visibility(self): |
212 | 79 | self.show_controls() | 76 | self.show_controls() |
213 | 80 | self.pause_video() | 77 | self.pause_video() |
214 | 81 | 78 | ||
217 | 82 | scene_selector = self.main_window.get_object("SceneSelector", "Controls.SceneSelector") | 79 | scene_selector = self.main_window.get_scene_selector() |
218 | 83 | slider = self.main_window.get_object("Slider", "TimeLine.Slider") | 80 | slider = self.main_window.get_slider() |
219 | 84 | 81 | ||
220 | 85 | """ Default state is hide """ | 82 | """ Default state is hide """ |
221 | 86 | self.assertProperty(scene_selector, visible=False) | 83 | self.assertProperty(scene_selector, visible=False) |
222 | 87 | 84 | ||
223 | 88 | """ Scene selector must apper when clicking int the slider handler """ | 85 | """ Scene selector must apper when clicking int the slider handler """ |
226 | 89 | self.pointing_device.move_to_object(slider) | 86 | self.pointing_device.click_object(slider) |
225 | 90 | self.pointing_device.click() | ||
227 | 91 | self.assertProperty(scene_selector, visible=True) | 87 | self.assertProperty(scene_selector, visible=True) |
228 | 92 | 88 | ||
229 | 93 | """ click again must dismiss the scene selector """ | 89 | """ click again must dismiss the scene selector """ |
230 | @@ -99,17 +95,16 @@ | |||
231 | 99 | self.show_controls() | 95 | self.show_controls() |
232 | 100 | self.pause_video() | 96 | self.pause_video() |
233 | 101 | 97 | ||
237 | 102 | slider = self.main_window.get_object("Slider", "TimeLine.Slider") | 98 | slider = self.main_window.get_slider() |
238 | 103 | time_line = self.main_window.get_object("TimeLine", "TimeLine") | 99 | time_line = self.main_window.get_timeline() |
239 | 104 | selector = self.main_window.get_object("SceneSelector", "Controls.SceneSelector") | 100 | selector = self.main_window.get_scene_selector() |
240 | 105 | self.assertThat(selector.count, Eventually(GreaterThan(3))) | 101 | self.assertThat(selector.count, Eventually(GreaterThan(3))) |
241 | 106 | 102 | ||
242 | 107 | """ Show scene selector """ | 103 | """ Show scene selector """ |
245 | 108 | self.pointing_device.move_to_object(slider) | 104 | self.pointing_device.click_object(slider) |
244 | 109 | self.pointing_device.click() | ||
246 | 110 | 105 | ||
247 | 111 | """ Make sure that the scenes are in correct place """ | 106 | """ Make sure that the scenes are in correct place """ |
249 | 112 | scene_0 = self.main_window.get_object("SceneFrame", "SceneSelector.Scene0") | 107 | scene_0 = self.main_window.get_scene_0() |
250 | 113 | selectorRect = selector.globalRect | 108 | selectorRect = selector.globalRect |
251 | 114 | self.pointing_device.drag( | 109 | self.pointing_device.drag( |
252 | 115 | selectorRect[0], selectorRect[1] + selectorRect[3] / 2, | 110 | selectorRect[0], selectorRect[1] + selectorRect[3] / 2, |
253 | @@ -118,10 +113,9 @@ | |||
254 | 118 | self.assertThat(scene_0.x, Eventually(Equals(0))) | 113 | self.assertThat(scene_0.x, Eventually(Equals(0))) |
255 | 119 | 114 | ||
256 | 120 | """ Click in the second scene """ | 115 | """ Click in the second scene """ |
258 | 121 | scene_2 = self.main_window.get_object("SceneFrame", "SceneSelector.Scene2") | 116 | scene_2 = self.main_window.get_scene_2() |
259 | 122 | self.assertThat(scene_2.ready, Eventually(Equals(True))) | 117 | self.assertThat(scene_2.ready, Eventually(Equals(True))) |
262 | 123 | self.pointing_device.move_to_object(scene_2) | 118 | self.pointing_device.click_object(scene_2) |
261 | 124 | self.pointing_device.click() | ||
263 | 125 | self.assertThat(selector.currentIndex, Eventually(Equals(2))) | 119 | self.assertThat(selector.currentIndex, Eventually(Equals(2))) |
264 | 126 | self.assertProperty(time_line, value=1.107) | 120 | self.assertProperty(time_line, value=1.107) |
265 | 127 | 121 | ||
266 | @@ -130,35 +124,31 @@ | |||
267 | 130 | self.show_controls() | 124 | self.show_controls() |
268 | 131 | self.pause_video() | 125 | self.pause_video() |
269 | 132 | 126 | ||
273 | 133 | time_line = self.main_window.get_object("Slider", "TimeLine.Slider") | 127 | time_line = self.main_window.get_slider() |
274 | 134 | time_label = self.main_window.get_object("Label", "TimeLine.TimeLabel") | 128 | time_label = self.main_window.get_time_label() |
272 | 135 | scene_selector = self.main_window.get_object("SceneSelector", "Controls.SceneSelector") | ||
275 | 136 | 129 | ||
276 | 137 | """ Seek to the midle of the movie """ | 130 | """ Seek to the midle of the movie """ |
277 | 138 | self.pointing_device.click_object(time_line) | 131 | self.pointing_device.click_object(time_line) |
278 | 139 | self.assertThat(scene_selector.opacity, Eventually(Equals(1))) | ||
279 | 140 | 132 | ||
280 | 141 | """ Time label must show the current video time (diff from zero or empty) """ | 133 | """ Time label must show the current video time (diff from zero or empty) """ |
281 | 142 | self.assertNotEqual(time_label.text, "00:00:00") | 134 | self.assertNotEqual(time_label.text, "00:00:00") |
282 | 143 | self.assertNotEqual(time_label.text, "") | 135 | self.assertNotEqual(time_label.text, "") |
283 | 144 | 136 | ||
284 | 145 | """ Click in the label to change the state """ | 137 | """ Click in the label to change the state """ |
287 | 146 | self.pointing_device.move_to_object(time_label) | 138 | self.pointing_device.click_object(time_label) |
286 | 147 | self.pointing_device.click() | ||
288 | 148 | 139 | ||
289 | 149 | """ After the click the label must show the remaning time (with '-' signal) """ | 140 | """ After the click the label must show the remaning time (with '-' signal) """ |
290 | 150 | self.assertEqual(time_label.text[0:1], "-") | 141 | self.assertEqual(time_label.text[0:1], "-") |
291 | 151 | 142 | ||
292 | 152 | @skipIf(model() == 'Nexus 4' or model() == 'Galaxy Nexus', 'Screen width not enough for seekbar') | 143 | @skipIf(model() == 'Nexus 4' or model() == 'Galaxy Nexus', 'Screen width not enough for seekbar') |
293 | 153 | def test_show_controls_at_end(self): | 144 | def test_show_controls_at_end(self): |
294 | 154 | time_line = self.main_window.get_object("Slider", "TimeLine.Slider") | ||
295 | 155 | 145 | ||
296 | 156 | """ wait for video ends and control appears""" | 146 | """ wait for video ends and control appears""" |
298 | 157 | time_label = self.main_window.get_object("Label", "TimeLine.TimeLabel") | 147 | time_label = self.main_window.get_time_label() |
299 | 158 | 148 | ||
300 | 159 | """ avoid the test fails due the timeout """ | 149 | """ avoid the test fails due the timeout """ |
301 | 160 | self.assertThat(time_label.text, Eventually(Equals("00:00:25"), timeout=35)) | 150 | self.assertThat(time_label.text, Eventually(Equals("00:00:25"), timeout=35)) |
304 | 161 | 151 | ||
305 | 162 | controls = self.main_window.get_object("Controls", "controls") | 152 | controls = self.main_window.get_controls() |
306 | 163 | self.assertProperty(controls, visible=False) | 153 | self.assertProperty(controls, visible=False) |
307 | 164 | self.assertThat(controls.visible, Eventually(Equals(True))) | 154 | self.assertThat(controls.visible, Eventually(Equals(True))) |
FAILED: Continuous integration, rev:140 jenkins. qa.ubuntu. com/job/ mediaplayer- app-ci/ 147/ jenkins. qa.ubuntu. com/job/ generic- mediumtests- trusty/ 284/console jenkins. qa.ubuntu. com/job/ generic- mediumtests- trusty- touch/274/ console jenkins. qa.ubuntu. com/job/ mediaplayer- app-trusty- amd64-ci/ 3/console jenkins. qa.ubuntu. com/job/ mediaplayer- app-trusty- armhf-ci/ 3/console jenkins. qa.ubuntu. com/job/ mediaplayer- app-trusty- i386-ci/ 3/console jenkins. qa.ubuntu. com/job/ generic- mediumtests- builder- trusty- amd64/284/ console jenkins. qa.ubuntu. com/job/ generic- mediumtests- builder- trusty- armhf/274/ console
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild: 10.97.0. 26:8080/ job/mediaplayer -app-ci/ 147/rebuild
http://