Warning, /frameworks/bluez-qt/autotests/qml/tst_mediaplayer.qml is written in an unsupported language. File is not indexed.

0001 /*
0002  * SPDX-FileCopyrightText: 2015 David Rosca <nowrep@gmail.com>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005  */
0006 
0007 import QtTest 1.0
0008 import QtQuick 2.2
0009 import org.kde.bluezqt.fakebluez 1.0
0010 import org.kde.bluezqt 1.0 as BluezQt
0011 
0012 TestCase {
0013     name: "MediaPlayer"
0014     property QtObject manager : BluezQt.Manager;
0015     property var mediaPlayer1props;
0016     property var mediaPlayer2props;
0017 
0018     function initTestCase()
0019     {
0020         FakeBluez.start();
0021         FakeBluez.runTest("bluez-standard");
0022 
0023         // Create adapter
0024         var adapter1path = "/org/bluez/hci0";
0025         var adapter1props = {
0026             Path: adapter1path,
0027             Address: "1C:E5:C3:BC:94:7E",
0028             Name: "TestAdapter",
0029             _toDBusObjectPath: [ "Path" ]
0030         }
0031         FakeBluez.runAction("devicemanager", "create-adapter", adapter1props);
0032 
0033         // Create devices
0034         mediaPlayer1props = {
0035             Path: "/org/bluez/hci0/dev_40_79_6A_0C_39_75/player0",
0036             Name: "Player1",
0037             Equalizer: "on",
0038             Repeat: "singletrack",
0039             Shuffle: "group",
0040             Status: "stopped",
0041             Position: 150,
0042             Device: "/org/bluez/hci0/dev_40_79_6A_0C_39_75",
0043             Track: {
0044                 Title: "Song1",
0045                 Artist: "Band1",
0046                 Album: "First Album",
0047                 Genre: "Rock",
0048                 NumberOfTracks: 24,
0049                 TrackNumber: 4,
0050                 Duration: 12403
0051             },
0052             _toDBusObjectPath: [ "Path", "Device" ]
0053         }
0054         var device1props = {
0055             Path: "/org/bluez/hci0/dev_40_79_6A_0C_39_75",
0056             Adapter: adapter1path,
0057             Address: "40:79:6A:0C:39:75",
0058             Name: "TestDevice",
0059             UUIDs: [ "0000110E-0000-1000-8000-00805F9B34FB" ],
0060             MediaPlayer: mediaPlayer1props,
0061             _toDBusObjectPath: [ "Path", "Adapter" ]
0062         }
0063         FakeBluez.runAction("devicemanager", "create-device", device1props);
0064 
0065         mediaPlayer2props = {
0066             Path: "/org/bluez/hci0/dev_50_79_6A_0C_39_75/player0",
0067             Name: "Player2",
0068             Equalizer: "off",
0069             Repeat: "alltracks",
0070             Shuffle: "off",
0071             Status: "paused",
0072             Position: 2500,
0073             Device: "/org/bluez/hci0/dev_50_79_6A_0C_39_75",
0074             Track: {
0075                 Title: "Song2",
0076                 Artist: "Band2",
0077                 Album: "Second Album",
0078                 Genre: "Heavy Metal",
0079                 NumberOfTracks: 666,
0080                 TrackNumber: 22,
0081                 Duration: 22403
0082             },
0083             _toDBusObjectPath: [ "Path", "Device" ]
0084         }
0085         var device2props = {
0086             Path: "/org/bluez/hci0/dev_50_79_6A_0C_39_75",
0087             Adapter: adapter1path,
0088             Address: "50:79:6A:0C:39:75",
0089             Name: "TestDevice2",
0090             UUIDs: [ "0000110E-0000-1000-8000-00805F9B34FB" ],
0091             MediaPlayer: mediaPlayer2props,
0092             _toDBusObjectPath: [ "Path", "Adapter" ]
0093         }
0094         FakeBluez.runAction("devicemanager", "create-device", device2props);
0095 
0096         tryCompare(manager, "operational", true);
0097         compare(manager.adapters.length, 1, "adapters-length");
0098         compare(manager.devices.length, 2, "devices-length");
0099     }
0100 
0101     function cleanupTestCase()
0102     {
0103         FakeBluez.stop();
0104     }
0105 
0106     SignalSpy {
0107         id: mediaPlayerChangedSpy
0108         signalName: "mediaPlayerChanged"
0109     }
0110 
0111     function test_a_connect()
0112     {
0113         for (var i = 0; i < manager.devices.length; ++i) {
0114             var device = manager.devices[i];
0115             verify(!device.mediaPlayer);
0116 
0117             mediaPlayerChangedSpy.clear();
0118             mediaPlayerChangedSpy.target = device;
0119 
0120             device.connectToDevice();
0121 
0122             tryCompare(mediaPlayerChangedSpy, "count", 1, 100 * 1000);
0123             verify(device.mediaPlayer);
0124         }
0125     }
0126 
0127     function compareProperties(mediaPlayer, props)
0128     {
0129         compare(mediaPlayer.name, props.Name, "name");
0130         compare(equalizerString(mediaPlayer), props.Equalizer, "equalizer");
0131         compare(repeatString(mediaPlayer), props.Repeat, "repeat");
0132         compare(shuffleString(mediaPlayer), props.Shuffle, "shuffle");
0133         compare(statusString(mediaPlayer), props.Status, "status");
0134         compare(mediaPlayer.position, props.Position, "position");
0135 
0136         compare(mediaPlayer.track.title, props.Track.Title, "track-title");
0137         compare(mediaPlayer.track.artist, props.Track.Artist, "track-artist");
0138         compare(mediaPlayer.track.album, props.Track.Album, "track-album");
0139         compare(mediaPlayer.track.genre, props.Track.Genre, "track-genre");
0140         compare(mediaPlayer.track.numberOfTracks, props.Track.NumberOfTracks, "track-#tracks");
0141         compare(mediaPlayer.track.trackNumber, props.Track.TrackNumber, "track-trackNumber");
0142         compare(mediaPlayer.track.duration, props.Track.Duration, "track-duration");
0143     }
0144 
0145     function test_getProperties()
0146     {
0147         var mediaPlayer1 = manager.deviceForUbi(mediaPlayer1props.Device).mediaPlayer;
0148         var mediaPlayer2 = manager.deviceForUbi(mediaPlayer2props.Device).mediaPlayer;
0149         compareProperties(mediaPlayer1, mediaPlayer1props);
0150         compareProperties(mediaPlayer2, mediaPlayer2props);
0151     }
0152 
0153     SignalSpy {
0154         id: equalizerChangedSpy
0155         signalName: "equalizerChanged"
0156     }
0157 
0158     function test_setEqualizer()
0159     {
0160         for (var i = 0; i < manager.devices.length; ++i) {
0161             var mediaPlayer = manager.devices[i].mediaPlayer;
0162             var value = mediaPlayer.equalizer === BluezQt.MediaPlayer.EqualizerOff ?
0163                 BluezQt.MediaPlayer.EqualizerOn : BluezQt.MediaPlayer.EqualizerOff;
0164 
0165             equalizerChangedSpy.clear();
0166             equalizerChangedSpy.target = mediaPlayer;
0167 
0168             mediaPlayer.equalizer = value;
0169 
0170             tryCompare(equalizerChangedSpy, "count", 1);
0171             compare(mediaPlayer.equalizer, value);
0172         }
0173     }
0174 
0175     SignalSpy {
0176         id: repeatChangedSpy
0177         signalName: "repeatChanged"
0178     }
0179 
0180     function test_setRepeat()
0181     {
0182         for (var i = 0; i < manager.devices.length; ++i) {
0183             var mediaPlayer = manager.devices[i].mediaPlayer;
0184             var value = mediaPlayer.repeat === BluezQt.MediaPlayer.RepeatGroup ?
0185                 BluezQt.MediaPlayer.RepeatSingleTrack : BluezQt.MediaPlayer.RepeatGroup;
0186 
0187             repeatChangedSpy.clear();
0188             repeatChangedSpy.target = mediaPlayer;
0189 
0190             mediaPlayer.repeat = value;
0191 
0192             tryCompare(repeatChangedSpy, "count", 1);
0193             compare(mediaPlayer.repeat, value);
0194         }
0195     }
0196 
0197     SignalSpy {
0198         id: shuffleChangedSpy
0199         signalName: "shuffleChanged"
0200     }
0201 
0202     function test_setShuffle()
0203     {
0204         for (var i = 0; i < manager.devices.length; ++i) {
0205             var mediaPlayer = manager.devices[i].mediaPlayer;
0206             var value = mediaPlayer.shuffle === BluezQt.MediaPlayer.ShuffleAllTracks ?
0207                 BluezQt.MediaPlayer.ShuffleOff : BluezQt.MediaPlayer.ShuffleAllTracks;
0208 
0209             shuffleChangedSpy.clear();
0210             shuffleChangedSpy.target = mediaPlayer;
0211 
0212             mediaPlayer.shuffle = value;
0213 
0214             tryCompare(shuffleChangedSpy, "count", 1);
0215             compare(mediaPlayer.shuffle, value);
0216         }
0217     }
0218 
0219     SignalSpy {
0220         id: trackChangedSpy
0221         signalName: "trackChanged"
0222     }
0223 
0224     function test_za_changeTrack()
0225     {
0226         for (var i = 0; i < manager.devices.length; ++i) {
0227             var mediaPlayer = manager.devices[i].mediaPlayer;
0228 
0229             trackChangedSpy.target = mediaPlayer;
0230 
0231             trackChangedSpy.clear();
0232             mediaPlayer.next();
0233             tryCompare(trackChangedSpy, "count", 1);
0234             compare(mediaPlayer.track.valid, true);
0235 
0236             trackChangedSpy.clear();
0237             mediaPlayer.previous();
0238             tryCompare(trackChangedSpy, "count", 1);
0239             compare(mediaPlayer.track.valid, true);
0240         }
0241     }
0242 
0243     SignalSpy {
0244         id: statusChangedSpy
0245         signalName: "statusChanged"
0246     }
0247 
0248     function test_zb_changeStatus()
0249     {
0250         for (var i = 0; i < manager.devices.length; ++i) {
0251             var mediaPlayer = manager.devices[i].mediaPlayer;
0252 
0253             statusChangedSpy.clear();
0254             statusChangedSpy.target = mediaPlayer;
0255 
0256             if (mediaPlayer.status !== BluezQt.MediaPlayer.Stopped) {
0257                 mediaPlayer.stop();
0258                 tryCompare(statusChangedSpy, "count", 1);
0259                 compare(mediaPlayer.status, BluezQt.MediaPlayer.Stopped);
0260             }
0261 
0262             statusChangedSpy.clear();
0263             mediaPlayer.play();
0264             tryCompare(statusChangedSpy, "count", 1);
0265             compare(mediaPlayer.status, BluezQt.MediaPlayer.Playing);
0266 
0267             statusChangedSpy.clear();
0268             mediaPlayer.pause();
0269             tryCompare(statusChangedSpy, "count", 1);
0270             compare(mediaPlayer.status, BluezQt.MediaPlayer.Paused);
0271 
0272             statusChangedSpy.clear();
0273             mediaPlayer.fastForward();
0274             tryCompare(statusChangedSpy, "count", 1);
0275             compare(mediaPlayer.status, BluezQt.MediaPlayer.ForwardSeek);
0276 
0277             statusChangedSpy.clear();
0278             mediaPlayer.rewind();
0279             tryCompare(statusChangedSpy, "count", 1);
0280             compare(mediaPlayer.status, BluezQt.MediaPlayer.ReverseSeek);
0281 
0282             statusChangedSpy.clear();
0283             mediaPlayer.stop();
0284             tryCompare(statusChangedSpy, "count", 1);
0285             compare(mediaPlayer.status, BluezQt.MediaPlayer.Stopped);
0286         }
0287     }
0288 
0289     function test_zz_disconnect()
0290     {
0291         for (var i = 0; i < manager.devices.length; ++i) {
0292             var device = manager.devices[i];
0293             verify(device.mediaPlayer);
0294 
0295             mediaPlayerChangedSpy.clear();
0296             mediaPlayerChangedSpy.target = device;
0297 
0298             device.disconnectFromDevice();
0299 
0300             tryCompare(mediaPlayerChangedSpy, "count", 1, 100 * 1000);
0301             verify(!device.mediaPlayer);
0302         }
0303     }
0304 
0305 
0306     function equalizerString(mediaPlayer)
0307     {
0308         switch (mediaPlayer.equalizer) {
0309         case BluezQt.MediaPlayer.EqualizerOn:
0310             return "on";
0311         default:
0312             return "off";
0313         }
0314     }
0315 
0316     function repeatString(mediaPlayer)
0317     {
0318         switch (mediaPlayer.repeat) {
0319         case BluezQt.MediaPlayer.RepeatSingleTrack:
0320             return "singletrack";
0321         case BluezQt.MediaPlayer.RepeatAllTracks:
0322             return "alltracks";
0323         case BluezQt.MediaPlayer.RepeatGroup:
0324             return "group";
0325         default:
0326             return "off";
0327         }
0328     }
0329 
0330     function shuffleString(mediaPlayer)
0331     {
0332         switch (mediaPlayer.shuffle) {
0333         case BluezQt.MediaPlayer.ShuffleAllTracks:
0334             return "alltracks";
0335         case BluezQt.MediaPlayer.ShuffleGroup:
0336             return "group";
0337         default:
0338             return "off";
0339         }
0340     }
0341 
0342     function statusString(mediaPlayer)
0343     {
0344         switch (mediaPlayer.status) {
0345         case BluezQt.MediaPlayer.Playing:
0346             return "playing";
0347         case BluezQt.MediaPlayer.Stopped:
0348             return "stopped";
0349         case BluezQt.MediaPlayer.Paused:
0350             return "paused";
0351         case BluezQt.MediaPlayer.ForwardSeek:
0352             return "forward-seek";
0353         case BluezQt.MediaPlayer.ReverseSeek:
0354             return "reverse-seek";
0355         default:
0356             return "error";
0357         }
0358     }
0359 }
0360