@@ -0,0 +1,179 @@
2+ * Copyright 2014 Canonical Ltd.
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
19+import Ubuntu.Components 0.1
20+import "../../../../qml/Dash/Previews"
21+import Unity.Test 0.1 as UT
22+import QtMultimedia 5.0
28+ color: Theme.palette.selected.background
30+ property var tracksModel0: {
34+ property var tracksModel1: {
35+ "tracks": [ { title: "Some track name", length: "30", source: "/not/existing/path/testsound1" } ]
38+ property var tracksModel2: {
39+ "tracks": [ { title: "Some track name", length: "30", source: "/not/existing/path/testsound1" },
40+ { title: "Some other track name", subtitle: "Subtitle", length: "83", source: "/not/existing/path/testsound2" },
41+ { title: "And another one", length: "7425", source: "/not/existing/path/testsound3" } ]
44+ PreviewAudioPlayback {
45+ id: previewAudioPlayback
47+ widgetData: tracksModel2
51+ name: "PreviewAudioPlaybackTest"
55+ waitForRendering(previewAudioPlayback);
58+ function test_time_formatter_data() {
60+ { tag: "NaN", value: "not a number", result: "" },
61+ { tag: "0", value: 0, result: "" },
62+ { tag: "-1", value: -1, result: "" },
63+ { tag: "30", value: 30, result: "0:30" },
64+ { tag: "60", value: 60, result: "1:00" },
65+ { tag: "3600", value: 3600, result: "1:00:00" }
69+ function test_time_formatter(data) {
70+ var audio = findInvisibleChild(previewAudioPlayback, "audio");
71+ compare(audio.lengthToString(data.value), data.result)
74+ function test_tracks_data() {
76+ {tag: "0 tracks", tracksModel: tracksModel0},
77+ {tag: "1 track", tracksModel: tracksModel1},
78+ {tag: "3 tracks", tracksModel: tracksModel2}
82+ function test_tracks(data) {
83+ previewAudioPlayback.widgetData = data.tracksModel;
84+ waitForRendering(previewAudioPlayback);
86+ var trackRepeater = findChild(previewAudioPlayback, "trackRepeater");
87+ compare(trackRepeater.count, data.tracksModel["tracks"].length)
89+ for (var i = 0; i < data.tracksModel["tracks"].length; ++i) {
90+ var trackItem = findChild(previewAudioPlayback, "trackItem" + i);
91+ var titleLabel = findChild(trackItem, "trackTitleLabel");
92+ compare(titleLabel.text, data.tracksModel["tracks"][i]["title"])
93+ var subtitleLabel = findChild(trackItem, "trackSubtitleLabel");
94+ if (data.tracksModel["tracks"][i]["subtitle"] !== undefined) {
95+ compare(subtitleLabel.text, data.tracksModel["tracks"][i]["subtitle"])
97+ compare(subtitleLabel.visible, false)
99+ // not checking time label because it's formatted, the model only contains seconds
103+ function checkPlayerSource(index) {
104+ var modelFilename = previewAudioPlayback.widgetData["tracks"][index]["source"].replace(/^.*[\\\/]/, '');
105+ var playerFilename = findInvisibleChild(previewAudioPlayback, "audio").source.toString().replace(/^.*[\\\/]/, '');
107+ compare(modelFilename, playerFilename, "Player source is not set correctly.");
110+ function test_playback() {
111+ previewAudioPlayback.widgetData = tracksModel2;
112+ waitForRendering(previewAudioPlayback);
114+ var track0Item = findChild(previewAudioPlayback, "trackItem0");
115+ var track1Item = findChild(previewAudioPlayback, "trackItem1");
116+ var track2Item = findChild(previewAudioPlayback, "trackItem2");
118+ var track0ProgressBar = findChild(track0Item, "progressBarFill");
119+ var track1ProgressBar = findChild(track1Item, "progressBarFill");
120+ var track2ProgressBar = findChild(track2Item, "progressBarFill");
122+ var track0PlayButton = findChild(track0Item, "playButton");
123+ var track1PlayButton = findChild(track1Item, "playButton");
124+ var track2PlayButton = findChild(track2Item, "playButton");
126+ var audio = findInvisibleChild(previewAudioPlayback, "audio");
128+ // All progress bars must be hidden in the beginning
129+ compare(track0ProgressBar.visible, false);
130+ compare(track1ProgressBar.visible, false);
131+ compare(track2ProgressBar.visible, false);
133+ // Playing track 0 should make progress bar 0 visible
134+ mouseClick(track0PlayButton, track0PlayButton.width / 2, track0PlayButton.height / 2);
136+ tryCompare(audio, "playbackState", Audio.PlayingState);
137+ checkPlayerSource(0);
139+ tryCompare(track0ProgressBar, "visible", true);
140+ tryCompare(track1ProgressBar, "visible", false);
141+ tryCompare(track2ProgressBar, "visible", false);
143+ // Clicking the button again should pause it. The progress bar should stay visible
144+ mouseClick(track0PlayButton, track0PlayButton.width / 2, track0PlayButton.height / 2);
145+ tryCompare(audio, "playbackState", Audio.PausedState);
146+ checkPlayerSource(0);
147+ tryCompare(track0ProgressBar, "visible", true);
149+ // Continue playback
150+ mouseClick(track0PlayButton, track0PlayButton.width / 2, track0PlayButton.height / 2);
151+ tryCompare(audio, "playbackState", Audio.PlayingState);
152+ checkPlayerSource(0);
154+ // Playing track 1 should make progress bar 1 visible and hide progress bar 0 again
155+ mouseClick(track1PlayButton, track1PlayButton.width / 2, track1PlayButton.height / 2);
157+ tryCompare(audio, "playbackState", Audio.PlayingState);
158+ checkPlayerSource(1);
160+ tryCompare(track0ProgressBar, "visible", false);
161+ tryCompare(track1ProgressBar, "visible", true);
162+ tryCompare(track2ProgressBar, "visible", false);
164+ // Playing track 2 should make progress bar 1 visible and hide progress bar 0 again
165+ mouseClick(track2PlayButton, track2PlayButton.width / 2, track2PlayButton.height / 2);
167+ tryCompare(audio, "playbackState", Audio.PlayingState);
168+ checkPlayerSource(2);
170+ tryCompare(track0ProgressBar, "visible", false);
171+ tryCompare(track1ProgressBar, "visible", false);
172+ tryCompare(track2ProgressBar, "visible", true);
174+ // Changing preview should make all players shut up!
175+ previewAudioPlayback.isCurrentPreview = false
176+ tryCompare(audio, "playbackState", Audio.StoppedState);