Merge lp:~samuel-buffet/entertainer/volume_management into lp:entertainer

Proposed by Samuel Buffet
Status: Merged
Approved by: Paul Hummer
Approved revision: 404
Merged at revision: not available
Proposed branch: lp:~samuel-buffet/entertainer/volume_management
Merge into: lp:entertainer
Diff against target: None lines
To merge this branch: bzr merge lp:~samuel-buffet/entertainer/volume_management
Reviewer Review Type Date Requested Status
Paul Hummer Approve
Review via email: mp+7992@code.launchpad.net

Commit message

It's now possible to change the player's volume level.

To post a comment you must log in.
Revision history for this message
Samuel Buffet (samuel-buffet) wrote :

Devs,

With this branch it is now possible to change the volume level when playing a media. This is something important that was missing (I think).

To reach that goal, a "volume" property has been added to the media player.
A VolumeIndicator has also been created. It's themable and is displayed when we change the volume with a fade in effect while the screen is faded out at the same time.

The keys I've chosen to change the volume are l = volume down and m = volume up. If you prefer other keys just let me know.

The VolumeIndicator widget is not reactive right now (I'l do that in an other branch)

Samuel-

402. By Samuel Buffet

Merged with trunk 389.

403. By Samuel Buffet

Fixes after Paul's comments.

404. By Samuel Buffet

Merged with trunk 393.

Revision history for this message
Samuel Buffet (samuel-buffet) wrote :
Download full text (14.6 KiB)

Devs,

I've pushed some modifications after Paul's comments.

new diff :

=== added file 'cfg/themes/Black/images/volume.png'
Binary files cfg/themes/Black/images/volume.png 1970-01-01 00:00:00 +0000 and cfg/themes/Black/images/volume.png 2009-06-27 09:25:00 +0000 differ
=== added file 'cfg/themes/Black/images/volume_filled.png'
Binary files cfg/themes/Black/images/volume_filled.png 1970-01-01 00:00:00 +0000 and cfg/themes/Black/images/volume_filled.png 2009-06-01 20:55:32 +0000 differ
=== added file 'cfg/themes/Black/images/volume_unfilled.png'
Binary files cfg/themes/Black/images/volume_unfilled.png 1970-01-01 00:00:00 +0000 and cfg/themes/Black/images/volume_unfilled.png 2009-06-01 20:55:34 +0000 differ
=== added file 'cfg/themes/Default/images/volume.png'
Binary files cfg/themes/Default/images/volume.png 1970-01-01 00:00:00 +0000 and cfg/themes/Default/images/volume.png 2009-06-01 20:55:33 +0000 differ
=== added file 'cfg/themes/Default/images/volume_filled.png'
Binary files cfg/themes/Default/images/volume_filled.png 1970-01-01 00:00:00 +0000 and cfg/themes/Default/images/volume_filled.png 2009-06-01 20:55:34 +0000 differ
=== added file 'cfg/themes/Default/images/volume_unfilled.png'
Binary files cfg/themes/Default/images/volume_unfilled.png 1970-01-01 00:00:00 +0000 and cfg/themes/Default/images/volume_unfilled.png 2009-06-01 20:55:34 +0000 differ
=== modified file 'entertainerlib/frontend/gui/user_event.py'
--- entertainerlib/frontend/gui/user_event.py 2009-05-06 03:40:22 +0000
+++ entertainerlib/frontend/gui/user_event.py 2009-06-01 20:55:33 +0000
@@ -18,6 +18,8 @@
     PLAYER_PREVIOUS = 3
     PLAYER_SKIP_FORWARD = 4
     PLAYER_SKIP_BACKWARD = 5
+ PLAYER_VOLUME_UP = 6
+ PLAYER_VOLUME_DOWN = 7

     # Navigation events
     NAVIGATE_UP = 20

=== modified file 'entertainerlib/frontend/gui/user_interface.py'
--- entertainerlib/frontend/gui/user_interface.py 2009-06-28 20:12:13 +0000
+++ entertainerlib/frontend/gui/user_interface.py 2009-06-29 19:35:06 +0000
@@ -20,6 +20,7 @@
 from entertainerlib.frontend.gui.user_event import UserEvent
 from entertainerlib.frontend.gui.widgets.menu_overlay import MenuOverlay
 from entertainerlib.frontend.media_player import MediaPlayer
+from entertainerlib.frontend.gui.widgets.volume_indicator import VolumeIndicator
 from entertainerlib.utils.configuration import Configuration
 from entertainerlib.utils.logger import Logger

@@ -92,6 +93,7 @@

         self.player = MediaPlayer(self.stage,
             self.config.get_stage_width(), self.config.get_stage_height())
+ self.player.connect('volume-changed', self._on_volume_changed)

         # Initialize menu overlay texture
         self.is_overlay = False
@@ -101,6 +103,15 @@
             self.config.get_stage_width(), self.config.get_stage_height())
         self.stage.add(self.menu_overlay)

+ self.volume_indicator = VolumeIndicator()
+ self.stage.add(self.volume_indicator)
+ self.volume_indicator.connect('hiding',
+ self._on_volume_indicator_hiding)
+ self.fade_screen_timeline = clutter.Timeline(13, 26)
+ alpha = clutter.Alpha(self.fade_screen_timeline,
+ clutter.smoothstep_inc...

Revision history for this message
Paul Hummer (rockstar) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added file 'cfg/themes/Black/images/volume.png'
0Binary files cfg/themes/Black/images/volume.png 1970-01-01 00:00:00 +0000 and cfg/themes/Black/images/volume.png 2009-06-01 19:59:57 +0000 differ0Binary files cfg/themes/Black/images/volume.png 1970-01-01 00:00:00 +0000 and cfg/themes/Black/images/volume.png 2009-06-01 19:59:57 +0000 differ
=== added file 'cfg/themes/Black/images/volume_filled.png'
1Binary files cfg/themes/Black/images/volume_filled.png 1970-01-01 00:00:00 +0000 and cfg/themes/Black/images/volume_filled.png 2009-06-01 19:25:27 +0000 differ1Binary files cfg/themes/Black/images/volume_filled.png 1970-01-01 00:00:00 +0000 and cfg/themes/Black/images/volume_filled.png 2009-06-01 19:25:27 +0000 differ
=== added file 'cfg/themes/Black/images/volume_unfilled.png'
2Binary files cfg/themes/Black/images/volume_unfilled.png 1970-01-01 00:00:00 +0000 and cfg/themes/Black/images/volume_unfilled.png 2009-06-01 19:25:27 +0000 differ2Binary files cfg/themes/Black/images/volume_unfilled.png 1970-01-01 00:00:00 +0000 and cfg/themes/Black/images/volume_unfilled.png 2009-06-01 19:25:27 +0000 differ
=== added file 'cfg/themes/Default/images/volume.png'
3Binary files cfg/themes/Default/images/volume.png 1970-01-01 00:00:00 +0000 and cfg/themes/Default/images/volume.png 2009-06-01 19:59:57 +0000 differ3Binary files cfg/themes/Default/images/volume.png 1970-01-01 00:00:00 +0000 and cfg/themes/Default/images/volume.png 2009-06-01 19:59:57 +0000 differ
=== added file 'cfg/themes/Default/images/volume_filled.png'
4Binary files cfg/themes/Default/images/volume_filled.png 1970-01-01 00:00:00 +0000 and cfg/themes/Default/images/volume_filled.png 2009-06-01 19:25:27 +0000 differ4Binary files cfg/themes/Default/images/volume_filled.png 1970-01-01 00:00:00 +0000 and cfg/themes/Default/images/volume_filled.png 2009-06-01 19:25:27 +0000 differ
=== added file 'cfg/themes/Default/images/volume_unfilled.png'
5Binary files cfg/themes/Default/images/volume_unfilled.png 1970-01-01 00:00:00 +0000 and cfg/themes/Default/images/volume_unfilled.png 2009-06-01 19:25:27 +0000 differ5Binary files cfg/themes/Default/images/volume_unfilled.png 1970-01-01 00:00:00 +0000 and cfg/themes/Default/images/volume_unfilled.png 2009-06-01 19:25:27 +0000 differ
=== modified file 'entertainerlib/frontend/gui/user_event.py'
--- entertainerlib/frontend/gui/user_event.py 2009-05-06 03:40:22 +0000
+++ entertainerlib/frontend/gui/user_event.py 2009-05-29 10:33:32 +0000
@@ -18,6 +18,8 @@
18 PLAYER_PREVIOUS = 318 PLAYER_PREVIOUS = 3
19 PLAYER_SKIP_FORWARD = 419 PLAYER_SKIP_FORWARD = 4
20 PLAYER_SKIP_BACKWARD = 520 PLAYER_SKIP_BACKWARD = 5
21 PLAYER_VOLUME_UP = 6
22 PLAYER_VOLUME_DOWN = 7
2123
22 # Navigation events24 # Navigation events
23 NAVIGATE_UP = 2025 NAVIGATE_UP = 20
2426
=== modified file 'entertainerlib/frontend/gui/user_interface.py'
--- entertainerlib/frontend/gui/user_interface.py 2009-06-03 01:54:03 +0000
+++ entertainerlib/frontend/gui/user_interface.py 2009-06-27 10:51:35 +0000
@@ -20,6 +20,7 @@
20from entertainerlib.frontend.gui.user_event import UserEvent20from entertainerlib.frontend.gui.user_event import UserEvent
21from entertainerlib.frontend.gui.widgets.menu_overlay import MenuOverlay21from entertainerlib.frontend.gui.widgets.menu_overlay import MenuOverlay
22from entertainerlib.frontend.media_player import MediaPlayer22from entertainerlib.frontend.media_player import MediaPlayer
23from entertainerlib.frontend.gui.widgets.volume_indicator import VolumeIndicator
23from entertainerlib.utils.configuration import Configuration24from entertainerlib.utils.configuration import Configuration
24from entertainerlib.utils.logger import Logger25from entertainerlib.utils.logger import Logger
2526
@@ -92,6 +93,7 @@
9293
93 self.player = MediaPlayer(self.stage,94 self.player = MediaPlayer(self.stage,
94 self.config.get_stage_width(), self.config.get_stage_height())95 self.config.get_stage_width(), self.config.get_stage_height())
96 self.player.connect("volume-changed", self._on_volume_changed)
9597
96 # Initialize menu overlay texture98 # Initialize menu overlay texture
97 self.overlay_status = False99 self.overlay_status = False
@@ -102,6 +104,15 @@
102 self.config.get_stage_width(), self.config.get_stage_height())104 self.config.get_stage_width(), self.config.get_stage_height())
103 self.stage.add(self.menu_overlay)105 self.stage.add(self.menu_overlay)
104106
107 self.volume_indicator = VolumeIndicator()
108 self.stage.add(self.volume_indicator)
109 self.volume_indicator.connect("hidening",
110 self._on_volume_indicator_hidening)
111 self.fade_screen_timeline = clutter.Timeline(13, 26)
112 alpha = clutter.Alpha(self.fade_screen_timeline,
113 clutter.smoothstep_inc_func)
114 self.fade_screen_behaviour = clutter.BehaviourOpacity(255, 0, alpha)
115
105 # Transition object. Handles effects between screen changes.116 # Transition object. Handles effects between screen changes.
106 transition_factory = TransitionFactory(self._remove_from_stage)117 transition_factory = TransitionFactory(self._remove_from_stage)
107 self.transition = transition_factory.generate_transition()118 self.transition = transition_factory.generate_transition()
@@ -140,6 +151,8 @@
140 clutter.keysyms.c : UserEvent.PLAYER_SKIP_FORWARD,151 clutter.keysyms.c : UserEvent.PLAYER_SKIP_FORWARD,
141 clutter.keysyms.z : UserEvent.PLAYER_PREVIOUS,152 clutter.keysyms.z : UserEvent.PLAYER_PREVIOUS,
142 clutter.keysyms.v : UserEvent.PLAYER_NEXT,153 clutter.keysyms.v : UserEvent.PLAYER_NEXT,
154 clutter.keysyms.m : UserEvent.PLAYER_VOLUME_UP,
155 clutter.keysyms.l : UserEvent.PLAYER_VOLUME_DOWN,
143 clutter.keysyms.q : UserEvent.QUIT_FRONTEND,156 clutter.keysyms.q : UserEvent.QUIT_FRONTEND,
144 clutter.keysyms.Escape : UserEvent.QUIT_FRONTEND157 clutter.keysyms.Escape : UserEvent.QUIT_FRONTEND
145 })158 })
@@ -168,6 +181,8 @@
168 UserEvent.PLAYER_SKIP_FORWARD : self._handle_player_skip_forward,181 UserEvent.PLAYER_SKIP_FORWARD : self._handle_player_skip_forward,
169 UserEvent.PLAYER_PREVIOUS : self._handle_player_previous,182 UserEvent.PLAYER_PREVIOUS : self._handle_player_previous,
170 UserEvent.PLAYER_NEXT : self._handle_player_next,183 UserEvent.PLAYER_NEXT : self._handle_player_next,
184 UserEvent.PLAYER_VOLUME_UP : self._handle_player_volume_up,
185 UserEvent.PLAYER_VOLUME_DOWN : self._handle_player_volume_down,
171 UserEvent.QUIT_FRONTEND : self._handle_quit_frontend186 UserEvent.QUIT_FRONTEND : self._handle_quit_frontend
172 }187 }
173188
@@ -394,6 +409,14 @@
394 self.player.stop()409 self.player.stop()
395 self.current.handle_user_event(event)410 self.current.handle_user_event(event)
396411
412 def _handle_player_volume_up(self, event):
413 '''Handle UserEvent.PLAYER_VOLUME_UP.'''
414 self.player.volume_up()
415
416 def _handle_player_volume_down(self, event):
417 '''Handle UserEvent.PLAYER_VOLUME_DOWN.'''
418 self.player.volume_down()
419
397 def _handle_toggle_fullscreen(self, event):420 def _handle_toggle_fullscreen(self, event):
398 '''Handle UserEvent.TOGGLE_FULLSCREEN.'''421 '''Handle UserEvent.TOGGLE_FULLSCREEN.'''
399 self._toggle_fullscreen()422 self._toggle_fullscreen()
@@ -402,3 +425,18 @@
402 '''Handle UserEvent.QUIT_FRONTEND.'''425 '''Handle UserEvent.QUIT_FRONTEND.'''
403 self.confirm_exit()426 self.confirm_exit()
404427
428 def _on_volume_changed(self, event):
429 """Show volume indicator and fade out the screen (if needed)."""
430 if not self.volume_indicator.visible:
431 if not self.fade_screen_behaviour.is_applied(self.current):
432 self.fade_screen_behaviour.apply(self.current)
433 self.fade_screen_behaviour.set_bounds(255, 50)
434 self.fade_screen_timeline.start()
435
436 self.volume_indicator.show_volume(self.player.volume)
437
438 def _on_volume_indicator_hidening(self, event):
439 """Restore previous screen opacity."""
440 self.fade_screen_behaviour.set_bounds(50, 255)
441 self.fade_screen_timeline.start()
442
405443
=== added file 'entertainerlib/frontend/gui/widgets/volume_indicator.py'
--- entertainerlib/frontend/gui/widgets/volume_indicator.py 1970-01-01 00:00:00 +0000
+++ entertainerlib/frontend/gui/widgets/volume_indicator.py 2009-06-28 09:12:14 +0000
@@ -0,0 +1,80 @@
1# Copyright (c) 2009 Entertainer Developers - See COPYING - GPLv2
2"""A volume indicator widgets."""
3
4import clutter
5import gobject
6
7from entertainerlib.frontend.gui.widgets.base import Base
8
9class VolumeIndicator(Base, clutter.Group):
10 """Volume Indicator displaying player's volume level."""
11 __gsignals__ = {
12 'hidening' : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, () ),
13 }
14
15 def __init__(self):
16 Base.__init__(self)
17 clutter.Group.__init__(self)
18
19 theme = self.config.theme
20 filled = clutter.Texture(theme.getImage("volume_filled"))
21 unfilled = clutter.Texture(theme.getImage("volume_unfilled"))
22 volume = clutter.Texture(theme.getImage("volume"))
23 self.add(volume)
24
25 self._pokes = []
26
27 poke_width = filled.get_width()
28
29 for i in range(20):
30 poke_filled = clutter.CloneTexture(filled)
31 poke_unfilled = clutter.CloneTexture(unfilled)
32 poke_filled.set_position(volume.get_width() + i * poke_width, 0)
33 poke_unfilled.set_position(volume.get_width() + i * poke_width, 0)
34 self.add(poke_filled)
35 self.add(poke_unfilled)
36 self._pokes.append([poke_filled, poke_unfilled])
37
38 self._hide_timeout_key = None
39 self.visible = False
40 self.set_opacity(0)
41
42 self.timeline = clutter.Timeline(13, 26)
43 self.alpha = clutter.Alpha(self.timeline, clutter.smoothstep_inc_func)
44 self.behaviour = clutter.BehaviourOpacity(255, 0, self.alpha)
45 self.behaviour.apply(self)
46
47 self.set_position(self.get_abs_x(0.35), self.get_abs_y(0.1))
48
49 def show_volume(self, volume):
50 """Displays volume level using filled and unfilled pokes."""
51 self.raise_top()
52
53 if self._hide_timeout_key is not None:
54 gobject.source_remove(self._hide_timeout_key)
55 self._hide_timeout_key = gobject.timeout_add(2000,
56 self.animate_out)
57
58 for index, pokes in enumerate(self._pokes):
59 if index >= volume:
60 pokes[0].set_opacity(0)
61 pokes[1].set_opacity(255)
62 else:
63 pokes[0].set_opacity(255)
64 pokes[1].set_opacity(0)
65
66 if self.visible == True:
67 return
68
69 self.visible = True
70 self.behaviour.set_bounds(0, 255)
71 self.timeline.start()
72
73 def animate_out(self):
74 """Fades out."""
75 self.behaviour.set_bounds(255, 0)
76 self.timeline.start()
77 self.visible = False
78 self.emit("hidening")
79 return False
80
081
=== modified file 'entertainerlib/frontend/media_player.py'
--- entertainerlib/frontend/media_player.py 2009-05-26 17:32:56 +0000
+++ entertainerlib/frontend/media_player.py 2009-06-27 11:00:55 +0000
@@ -32,6 +32,7 @@
32 'skip-forward' : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, () ),32 'skip-forward' : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, () ),
33 'skip-backward' : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, () ),33 'skip-backward' : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, () ),
34 'position_changed' : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, () ),34 'position_changed' : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, () ),
35 'volume_changed' : ( gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, () ),
35 }36 }
3637
37 # Ratio constants38 # Ratio constants
@@ -64,6 +65,8 @@
6465
65 self.video_texture = cluttergst.VideoTexture()66 self.video_texture = cluttergst.VideoTexture()
66 self.playbin = self.video_texture.get_playbin()67 self.playbin = self.video_texture.get_playbin()
68 self.playbin.set_property("volume", 0.5)
69 self._volume = 10
67 self.bus = self.playbin.get_bus()70 self.bus = self.playbin.get_bus()
68 self.bus.add_signal_watch()71 self.bus.add_signal_watch()
69 self.bus.connect('message', self._on_gst_message)72 self.bus.connect('message', self._on_gst_message)
@@ -91,6 +94,30 @@
91 self.logger.error("Error: %(err)s, %(debug)s" % \94 self.logger.error("Error: %(err)s, %(debug)s" % \
92 {'err': err, 'debug': debug})95 {'err': err, 'debug': debug})
9396
97 def _get_volume(self):
98 """volume property getter."""
99 return self._volume
100
101 def _set_volume(self, volume):
102 """volume property setter."""
103 self._volume = volume
104 if self._volume > 20:
105 self._volume = 20
106 if self._volume < 0:
107 self._volume = 0
108 self.playbin.set_property("volume", self._volume / 20.0)
109 self.emit("volume-changed")
110
111 volume = property(_get_volume, _set_volume)
112
113 def volume_up(self):
114 """Increase player's volume level."""
115 self.volume = self._volume + 1
116
117 def volume_down(self):
118 """Decrease player's volume level."""
119 self.volume = self._volume - 1
120
94 def set_playlist(self, playlist):121 def set_playlist(self, playlist):
95 '''Set new playlist to MediaPlayer.'''122 '''Set new playlist to MediaPlayer.'''
96 if len(playlist) == 0:123 if len(playlist) == 0:
97124
=== modified file 'entertainerlib/tests/mock.py'
--- entertainerlib/tests/mock.py 2009-06-15 03:19:46 +0000
+++ entertainerlib/tests/mock.py 2009-06-28 12:19:08 +0000
@@ -1,6 +1,7 @@
1# Copyright (c) 2009 Entertainer Developers - See COPYING - GPLv21# Copyright (c) 2009 Entertainer Developers - See COPYING - GPLv2
2'''Test mock objects'''2'''Test mock objects'''
3# pylint: disable-msg=W02313# pylint: disable-msg=W0231
4import clutter
4import gobject5import gobject
56
6from entertainerlib.frontend.backend_connection import BackendConnection7from entertainerlib.frontend.backend_connection import BackendConnection
@@ -328,3 +329,10 @@
328 self.y = 0329 self.y = 0
329 self.time = 0330 self.time = 0
330331
332
333class MockStage(clutter.Stage):
334 '''Mock a clutter Stage.'''
335
336 def __init__(self):
337 clutter.Stage.__init__(self)
338
331339
=== added file 'entertainerlib/tests/test_mediaplayer.py'
--- entertainerlib/tests/test_mediaplayer.py 1970-01-01 00:00:00 +0000
+++ entertainerlib/tests/test_mediaplayer.py 2009-06-28 12:19:08 +0000
@@ -0,0 +1,85 @@
1# Copyright (c) 2009 Entertainer Developers - See COPYING - GPLv2
2"""Tests MediaPlayer"""
3
4import os
5
6from entertainerlib.frontend.media_player import MediaPlayer
7from entertainerlib.frontend.medialibrary.videos import VideoItem
8from entertainerlib.tests import EntertainerTest
9from entertainerlib.tests.mock import MockStage
10
11THIS_DIR = os.path.dirname(__file__)
12
13class MediaPlayerTest(EntertainerTest):
14 """Test for entertainerlib.frontend.gui.widgets.volume_indicator"""
15
16 def setUp(self):
17 '''Set up the test.'''
18 EntertainerTest.setUp(self)
19
20 self.stage = MockStage()
21 self.player = MediaPlayer(self.stage, 100, 100)
22 self.video_item = VideoItem()
23 self.video_item.set_filename(
24 THIS_DIR + '/data/VideoThumbnailer/test.avi')
25 self.player.set_media(self.video_item)
26
27 def test_create(self):
28 '''Test correct MediaPlayer initialization.'''
29 self.assertTrue(isinstance(self.player, MediaPlayer))
30
31 def test_volume(self):
32 '''Test the use of the volume property.'''
33 self.player.volume = 10
34 self.assertEqual(self.player.volume, 10)
35 self.player.volume = 99
36 self.assertEqual(self.player.volume, 20)
37 self.player.volume = -10
38 self.assertEqual(self.player.volume, 0)
39
40 def test_volumedown(self):
41 '''Test the use of the volume_down method.'''
42 self.player.volume = 10
43 self.player.volume_down()
44 self.assertEqual(self.player.volume, 9)
45
46 def test_volumeup(self):
47 '''Test the use of the volume_up method.'''
48 self.player.volume = 10
49 self.player.volume_up()
50 self.assertEqual(self.player.volume, 11)
51
52 def test_setmedia(self):
53 '''Test the use of the set_media method.'''
54 # The method is called during setUp.
55 self.assertTrue(self.player.media is not None)
56
57 def test_getmedia(self):
58 '''Test the use of the get_media method.'''
59 self.assertEqual(self.player.get_media(), self.video_item)
60
61 def test_hasmedia(self):
62 '''Test the use of the has_media method.'''
63 self.assertTrue(self.player.has_media())
64
65 def test_getmediatype(self):
66 '''Test the use of the get_media_type method.'''
67 self.assertEqual(self.player.get_media_type(),
68 self.video_item.get_type())
69
70 def test_playstop(self):
71 '''Test the use of the play and stop methods.'''
72 self.player.play()
73 self.assertTrue(self.player.playing)
74 self.player.stop()
75 self.assertFalse(self.player.playing)
76
77 def test_getmediatitle(self):
78 '''Test the use of the get_media_title method.'''
79 self.assertEqual(self.player.get_media_title(),
80 THIS_DIR + '/data/VideoThumbnailer/test.avi')
81
82 def test_getmediadurationstring(self):
83 '''Test the use of the get_media_title method.'''
84 self.assertEqual(self.player.get_media_duration_string(), "00:00")
85
086
=== added file 'entertainerlib/tests/test_volumeindicator.py'
--- entertainerlib/tests/test_volumeindicator.py 1970-01-01 00:00:00 +0000
+++ entertainerlib/tests/test_volumeindicator.py 2009-06-28 12:19:08 +0000
@@ -0,0 +1,24 @@
1# Copyright (c) 2009 Entertainer Developers - See COPYING - GPLv2
2"""Tests VolumeIndicator"""
3
4from entertainerlib.frontend.gui.widgets.volume_indicator import VolumeIndicator
5from entertainerlib.tests import EntertainerTest
6
7class VolumeIndicatorTest(EntertainerTest):
8 """Test for entertainerlib.frontend.gui.widgets.volume_indicator"""
9
10 def setUp(self):
11 '''Set up the test.'''
12 EntertainerTest.setUp(self)
13
14 self.indicator = VolumeIndicator()
15
16 def test_create(self):
17 '''Test correct VolumeIndicator initialization.'''
18 self.assertTrue(isinstance(self.indicator, VolumeIndicator))
19
20 def test_show_volume(self):
21 '''Test the use of the show_volume method.'''
22 self.indicator.show_volume(5)
23 self.assertTrue(self.indicator.visible)
24

Subscribers

People subscribed via source and target branches