@@ -0,0 +1,160 @@
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
30+ property var tracksModel0: [
33+ property var tracksModel1: [
34+ { title: "Some track name", length: "0:30", uri: "../../tests/qmltests/Dash/Music/data/testsound1.ogg" }
37+ property var tracksModel2: [
38+ { title: "Some track name", length: "0:30", uri: "../../tests/qmltests/Dash/Music/data/testsound1.ogg" },
39+ { title: "Some other track name", length: "1:23", uri: "../../tests/qmltests/Dash/Music/data/testsound2.ogg" },
40+ { title: "And another one", length: "123:45", uri: "../../tests/qmltests/Dash/Music/data/testsound3.ogg" }
50+ name: "AudioPlayerTest"
54+ waitForRendering(audioPlayer);
57+ function test_tracks_data() {
59+ {tag: "0 tracks", tracksModel: tracksModel0, dividerVisible: false},
60+ {tag: "1 track", tracksModel: tracksModel1, dividerVisible: true},
61+ {tag: "4 track", tracksModel: tracksModel2, dividerVisible: true}
65+ function test_tracks(data) {
66+ audioPlayer.model = data.tracksModel;
67+ waitForRendering(audioPlayer);
69+ var trackRepeater = findChild(audioPlayer, "trackRepeater");
70+ compare(trackRepeater.count, data.tracksModel.length)
72+ var topDivider = findChild(audioPlayer, "topDivider");
73+ compare(topDivider.visible, data.dividerVisible);
75+ for (var i = 0; i < data.tracksModel.count; ++i) {
76+ var trackItem = findChild(audioPlayer, "trackItem" + i);
77+ var titleLabel = findChild(trackItem, "trackTitleLabel");
78+ compare(titleLabel.text, data.tracksModel[i]["title"])
79+ var timeLabel = findChild(trackItem, "timeLabel");
80+ compare(timeLabel.text, data.tracksModel[i]["length"])
84+ function checkPlayerUri(index) {
85+ var modelFilename = audioPlayer.model[index]["uri"].replace(/^.*[\\\/]/, '');
86+ var playerFilename = findInvisibleChild(audioPlayer, "audio").source.toString().replace(/^.*[\\\/]/, '');
88+ compare(modelFilename, playerFilename, "Player source is not set correctly.");
91+ function test_playback() {
92+ audioPlayer.model = tracksModel2;
93+ waitForRendering(audioPlayer);
95+ var track0Item = findChild(audioPlayer, "trackItem0");
96+ var track1Item = findChild(audioPlayer, "trackItem1");
97+ var track2Item = findChild(audioPlayer, "trackItem2");
99+ var track0ProgressBar = findChild(track0Item, "progressBarFill");
100+ var track1ProgressBar = findChild(track1Item, "progressBarFill");
101+ var track2ProgressBar = findChild(track2Item, "progressBarFill");
103+ var track0PlayButton = findChild(track0Item, "playButton");
104+ var track1PlayButton = findChild(track1Item, "playButton");
105+ var track2PlayButton = findChild(track2Item, "playButton");
107+ var audio = findInvisibleChild(audioPlayer, "audio");
109+ // All progress bars must be hidden in the beginning
110+ compare(track0ProgressBar.visible, false);
111+ compare(track1ProgressBar.visible, false);
112+ compare(track2ProgressBar.visible, false);
114+ // Playing track 0 should make progress bar 0 visible
115+ mouseClick(track0PlayButton, track0PlayButton.width / 2, track0PlayButton.height / 2);
117+ tryCompare(audio, "playbackState", Audio.PlayingState);
120+ tryCompare(track0ProgressBar, "visible", true);
121+ tryCompare(track1ProgressBar, "visible", false);
122+ tryCompare(track2ProgressBar, "visible", false);
124+ // Clicking the button again should pause it. The progress bar should stay visible
125+ mouseClick(track0PlayButton, track0PlayButton.width / 2, track0PlayButton.height / 2);
126+ tryCompare(audio, "playbackState", Audio.PausedState);
128+ tryCompare(track0ProgressBar, "visible", true);
130+ // Continue playback
131+ mouseClick(track0PlayButton, track0PlayButton.width / 2, track0PlayButton.height / 2);
132+ tryCompare(audio, "playbackState", Audio.PlayingState);
135+ // Playing track 1 should make progress bar 1 visible and hide progress bar 0 again
136+ mouseClick(track1PlayButton, track1PlayButton.width / 2, track1PlayButton.height / 2);
138+ tryCompare(audio, "playbackState", Audio.PlayingState);
141+ tryCompare(track0ProgressBar, "visible", false);
142+ tryCompare(track1ProgressBar, "visible", true);
143+ tryCompare(track2ProgressBar, "visible", false);
145+ // Playing track 2 should make progress bar 1 visible and hide progress bar 0 again
146+ mouseClick(track2PlayButton, track2PlayButton.width / 2, track2PlayButton.height / 2);
148+ tryCompare(audio, "playbackState", Audio.PlayingState);
151+ tryCompare(track0ProgressBar, "visible", false);
152+ tryCompare(track1ProgressBar, "visible", false);
153+ tryCompare(track2ProgressBar, "visible", true);
155+ // Calling stop() should make all players shut up!
157+ tryCompare(audio, "playbackState", Audio.StoppedState);