@@ -0,0 +1,174 @@
2+ * Copyright 2013 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 "../../../../Dash/Music"
20+import Unity.Test 0.1 as UT
21+import QtMultimedia 5.0
34+ previewData: QtObject {
35+ property string rendererName: "preview-music"
36+ property string title: "Music Preview"
37+ property string subtitle: "Subtitle"
38+ property string description: "This is the description"
39+ property string image: "../../tests/qmltests/Components/tst_LazyImage/square.png"
40+ property var actions: [
41+ { id: 123, displayName: "Play"},
42+ { id: 456, displayName: "Show in folder"}
44+ property var tracks: tracksModel2
53+ ListElement { uri: "../../tests/qmltests/Dash/Music/data/testsound1.ogg"; trackNo: 1; title: "Some track name"; length: "0:30"}
57+ ListElement { uri: "../../tests/qmltests/Dash/Music/data/testsound1.ogg"; trackNo: 1; title: "Some track name"; length: "0:30"}
58+ ListElement { uri: "../../tests/qmltests/Dash/Music/data/testsound1.ogg"; trackNo: 2; title: "Some track name"; length: "0:30"}
59+ ListElement { uri: "../../tests/qmltests/Dash/Music/data/testsound2.ogg"; trackNo: 3; title: "Some other track name"; length: "1:23"}
60+ ListElement { uri: "../../tests/qmltests/Dash/Music/data/testsound3.ogg"; trackNo: 4; title: "And another one"; length: "123:45"}
64+ name: "MusicPreviewTest"
68+ waitForRendering(musicPreview);
71+ function test_tracks_data() {
73+ {tag: "0 tracks", tracksModel: tracksModel0, dividerVisible: false},
74+ {tag: "1 track", tracksModel: tracksModel1, dividerVisible: true},
75+ {tag: "4 track", tracksModel: tracksModel2, dividerVisible: true}
79+ function test_tracks(data) {
80+ musicPreview.previewData.tracks = data.tracksModel;
81+ waitForRendering(musicPreview);
83+ var trackRepeater = findChild(musicPreview, "trackRepeater");
84+ compare(trackRepeater.count, data.tracksModel.count)
86+ var topDivider = findChild(musicPreview, "topDivider");
87+ compare(topDivider.visible, data.dividerVisible);
89+ for (var i = 0; i < data.tracksModel.count; ++i) {
90+ var trackItem = findChild(musicPreview, "trackItem" + i);
91+ var titleLabel = findChild(trackItem, "trackTitleLabel");
92+ compare(titleLabel.text, data.tracksModel.get(i).title)
93+ var timeLabel = findChild(trackItem, "timeLabel");
94+ compare(timeLabel.text, data.tracksModel.get(i).length)
98+ function checkPlayerUri(index) {
99+ var modelFilename = musicPreview.previewData.tracks.get(index).uri.replace(/^.*[\\\/]/, '');
100+ var playerFilename = findInvisibleChild(musicPreview, "audioPlayer").source.toString().replace(/^.*[\\\/]/, '');
102+ compare(modelFilename, playerFilename, "Player source is not set correctly.");
105+ function test_playback() {
106+ musicPreview.previewData.tracks = tracksModel2;
107+ waitForRendering(musicPreview);
109+ var track0Item = findChild(musicPreview, "trackItem0");
110+ var track1Item = findChild(musicPreview, "trackItem1");
111+ var track2Item = findChild(musicPreview, "trackItem2");
113+ var track0ProgressBar = findChild(track0Item, "progressBarFill");
114+ var track1ProgressBar = findChild(track1Item, "progressBarFill");
115+ var track2ProgressBar = findChild(track2Item, "progressBarFill");
117+ var track0PlayButton = findChild(track0Item, "playButton");
118+ var track1PlayButton = findChild(track1Item, "playButton");
119+ var track2PlayButton = findChild(track2Item, "playButton");
121+ var audioPlayer = findInvisibleChild(musicPreview, "audioPlayer");
123+ // All progress bars must be hidden in the beginning
124+ compare(track0ProgressBar.visible, false);
125+ compare(track1ProgressBar.visible, false);
126+ compare(track2ProgressBar.visible, false);
128+ // Playing track 0 should make progress bar 0 visible
129+ mouseClick(track0PlayButton, track0PlayButton.width / 2, track0PlayButton.height / 2);
131+ tryCompare(audioPlayer, "playbackState", Audio.PlayingState);
134+ tryCompare(track0ProgressBar, "visible", true);
135+ tryCompare(track1ProgressBar, "visible", false);
136+ tryCompare(track2ProgressBar, "visible", false);
138+ // Clicking the button again should pause it. The progress bar should stay visible
139+ mouseClick(track0PlayButton, track0PlayButton.width / 2, track0PlayButton.height / 2);
140+ tryCompare(audioPlayer, "playbackState", Audio.PausedState);
142+ tryCompare(track0ProgressBar, "visible", true);
144+ // Continue playback
145+ mouseClick(track0PlayButton, track0PlayButton.width / 2, track0PlayButton.height / 2);
146+ tryCompare(audioPlayer, "playbackState", Audio.PlayingState);
149+ // Playing track 1 should make progress bar 1 visible and hide progress bar 0 again
150+ mouseClick(track1PlayButton, track1PlayButton.width / 2, track1PlayButton.height / 2);
152+ tryCompare(audioPlayer, "playbackState", Audio.PlayingState);
155+ tryCompare(track0ProgressBar, "visible", false);
156+ tryCompare(track1ProgressBar, "visible", true);
157+ tryCompare(track2ProgressBar, "visible", false);
159+ // Playing track 2 should make progress bar 1 visible and hide progress bar 0 again
160+ mouseClick(track2PlayButton, track2PlayButton.width / 2, track2PlayButton.height / 2);
162+ tryCompare(audioPlayer, "playbackState", Audio.PlayingState);
165+ tryCompare(track0ProgressBar, "visible", false);
166+ tryCompare(track1ProgressBar, "visible", false);
167+ tryCompare(track2ProgressBar, "visible", true);
169+ // Switching away from this preview should make all players shut up!
170+ musicPreview.isCurrent = false
171+ tryCompare(audioPlayer, "playbackState", Audio.StoppedState);