qtmobility/tests/auto/qmediaobject/tst_qmediaobject.cpp
changeset 14 6fbed849b4f4
parent 11 06b8e2af4411
child 15 1f895d8a5b2b
equal deleted inserted replaced
11:06b8e2af4411 14:6fbed849b4f4
    43 
    43 
    44 #include <QtCore/qtimer.h>
    44 #include <QtCore/qtimer.h>
    45 
    45 
    46 #include <qmediaobject.h>
    46 #include <qmediaobject.h>
    47 #include <qmediaservice.h>
    47 #include <qmediaservice.h>
    48 #include <qmetadatacontrol.h>
    48 #include <qmetadatareadercontrol.h>
    49 
    49 
    50 QT_USE_NAMESPACE
    50 QT_USE_NAMESPACE
    51 class tst_QMediaObject : public QObject
    51 class tst_QMediaObject : public QObject
    52 {
    52 {
    53     Q_OBJECT
    53     Q_OBJECT
    59     void notifyInterval_data();
    59     void notifyInterval_data();
    60     void notifyInterval();
    60     void notifyInterval();
    61 
    61 
    62     void nullMetaDataControl();
    62     void nullMetaDataControl();
    63     void isMetaDataAvailable();
    63     void isMetaDataAvailable();
    64     void isWritable();
       
    65     void metaDataChanged();
    64     void metaDataChanged();
    66     void metaData_data();
    65     void metaData_data();
    67     void metaData();
    66     void metaData();
    68     void setMetaData_data();
       
    69     void setMetaData();
       
    70     void extendedMetaData_data() { metaData_data(); }
    67     void extendedMetaData_data() { metaData_data(); }
    71     void extendedMetaData();
    68     void extendedMetaData();
    72     void setExtendedMetaData_data() { extendedMetaData_data(); }
       
    73     void setExtendedMetaData();
       
    74 
    69 
    75 
    70 
    76 private:
    71 private:
    77     void setupNotifyTests();
    72     void setupNotifyTests();
    78 };
    73 };
    79 
    74 
    80 class QtTestMetaDataProvider : public QMetaDataControl
    75 class QtTestMetaDataProvider : public QMetaDataReaderControl
    81 {
    76 {
    82     Q_OBJECT
    77     Q_OBJECT
    83 public:
    78 public:
    84     QtTestMetaDataProvider(QObject *parent = 0)
    79     QtTestMetaDataProvider(QObject *parent = 0)
    85         : QMetaDataControl(parent)
    80         : QMetaDataReaderControl(parent)
    86         , m_available(false)
    81         , m_available(false)
    87         , m_writable(false)
       
    88     {
    82     {
    89     }
    83     }
    90 
    84 
    91     bool isMetaDataAvailable() const { return m_available; }
    85     bool isMetaDataAvailable() const { return m_available; }
    92     void setMetaDataAvailable(bool available) {
    86     void setMetaDataAvailable(bool available) {
    93         if (m_available != available)
    87         if (m_available != available)
    94             emit metaDataAvailableChanged(m_available = available);
    88             emit metaDataAvailableChanged(m_available = available);
    95     }
    89     }
    96     QList<QtMediaServices::MetaData> availableMetaData() const { return m_data.keys(); }
    90     QList<QtMultimedia::MetaData> availableMetaData() const { return m_data.keys(); }
    97 
    91 
    98     bool isWritable() const { return m_writable; }
    92 
    99     void setWritable(bool writable) { emit writableChanged(m_writable = writable); }
    93     QVariant metaData(QtMultimedia::MetaData key) const { return m_data.value(key); }
   100 
       
   101     QVariant metaData(QtMediaServices::MetaData key) const { return m_data.value(key); }
       
   102     void setMetaData(QtMediaServices::MetaData key, const QVariant &value) {
       
   103         m_data.insert(key, value); }
       
   104 
    94 
   105     QVariant extendedMetaData(const QString &key) const { return m_extendedData.value(key); }
    95     QVariant extendedMetaData(const QString &key) const { return m_extendedData.value(key); }
   106     void setExtendedMetaData(const QString &key, const QVariant &value) {
       
   107         m_extendedData.insert(key, value); }
       
   108 
    96 
   109     QStringList availableExtendedMetaData() const { return m_extendedData.keys(); }
    97     QStringList availableExtendedMetaData() const { return m_extendedData.keys(); }
   110 
    98 
   111     using QMetaDataControl::metaDataChanged;
    99     using QMetaDataReaderControl::metaDataChanged;
   112 
   100 
   113     void populateMetaData()
   101     void populateMetaData()
   114     {
   102     {
   115         m_available = true;
   103         m_available = true;
   116     }
   104     }
   117 
   105 
   118     bool m_available;
   106     bool m_available;
   119     bool m_writable;
   107     QMap<QtMultimedia::MetaData, QVariant> m_data;
   120     QMap<QtMediaServices::MetaData, QVariant> m_data;
       
   121     QMap<QString, QVariant> m_extendedData;
   108     QMap<QString, QVariant> m_extendedData;
   122 };
   109 };
   123 
   110 
   124 class QtTestMetaDataService : public QMediaService
   111 class QtTestMetaDataService : public QMediaService
   125 {
   112 {
   126     Q_OBJECT
   113     Q_OBJECT
   127 public:
   114 public:
   128     QtTestMetaDataService(QObject *parent = 0):QMediaService(parent), hasMetaData(true)
   115     QtTestMetaDataService(QObject *parent = 0):QMediaService(parent), metaDataRef(0), hasMetaData(true)
   129     {
   116     {
   130     }
   117     }
   131 
   118 
   132     QMediaControl *control(const char *iid) const
   119     QMediaControl *requestControl(const char *iid)
   133     {
   120     {
   134         if (hasMetaData && qstrcmp(iid, QMetaDataControl_iid) == 0)
   121         if (hasMetaData && qstrcmp(iid, QMetaDataReaderControl_iid) == 0)
   135             return const_cast<QtTestMetaDataProvider *>(&metaData);
   122             return &metaData;
   136         else
   123         else
   137             return 0;
   124             return 0;
   138     }
   125     }
   139 
   126 
       
   127     void releaseControl(QMediaControl *)
       
   128     {
       
   129     }
       
   130 
   140     QtTestMetaDataProvider metaData;
   131     QtTestMetaDataProvider metaData;
       
   132     int metaDataRef;
   141     bool hasMetaData;
   133     bool hasMetaData;
   142 };
   134 };
   143 
       
   144 
   135 
   145 class QtTestMediaObject : public QMediaObject
   136 class QtTestMediaObject : public QMediaObject
   146 {
   137 {
   147     Q_OBJECT
   138     Q_OBJECT
   148     Q_PROPERTY(int a READ a WRITE setA NOTIFY aChanged)
   139     Q_PROPERTY(int a READ a WRITE setA NOTIFY aChanged)
   372     QtTestMediaObject object(&service);
   363     QtTestMediaObject object(&service);
   373 
   364 
   374     QSignalSpy spy(&object, SIGNAL(metaDataChanged()));
   365     QSignalSpy spy(&object, SIGNAL(metaDataChanged()));
   375 
   366 
   376     QCOMPARE(object.isMetaDataAvailable(), false);
   367     QCOMPARE(object.isMetaDataAvailable(), false);
   377     QCOMPARE(object.isMetaDataWritable(), false);
   368 
   378 
   369     QCOMPARE(object.metaData(QtMultimedia::Title).toString(), QString());
   379     object.setMetaData(QtMediaServices::Title, title);
       
   380     object.setExtendedMetaData(titleKey, title);
       
   381 
       
   382     QCOMPARE(object.metaData(QtMediaServices::Title).toString(), QString());
       
   383     QCOMPARE(object.extendedMetaData(titleKey).toString(), QString());
   370     QCOMPARE(object.extendedMetaData(titleKey).toString(), QString());
   384     QCOMPARE(object.availableMetaData(), QList<QtMediaServices::MetaData>());
   371     QCOMPARE(object.availableMetaData(), QList<QtMultimedia::MetaData>());
   385     QCOMPARE(object.availableExtendedMetaData(), QStringList());
   372     QCOMPARE(object.availableExtendedMetaData(), QStringList());
   386     QCOMPARE(spy.count(), 0);
   373     QCOMPARE(spy.count(), 0);
   387 }
   374 }
   388 
   375 
   389 void tst_QMediaObject::isMetaDataAvailable()
   376 void tst_QMediaObject::isMetaDataAvailable()
   402     QCOMPARE(spy.at(0).at(0).toBool(), true);
   389     QCOMPARE(spy.at(0).at(0).toBool(), true);
   403 
   390 
   404     service.metaData.setMetaDataAvailable(false);
   391     service.metaData.setMetaDataAvailable(false);
   405 
   392 
   406     QCOMPARE(object.isMetaDataAvailable(), false);
   393     QCOMPARE(object.isMetaDataAvailable(), false);
   407     QCOMPARE(spy.count(), 2);
       
   408     QCOMPARE(spy.at(1).at(0).toBool(), false);
       
   409 }
       
   410 
       
   411 void tst_QMediaObject::isWritable()
       
   412 {
       
   413     QtTestMetaDataService service;
       
   414     service.metaData.setWritable(false);
       
   415 
       
   416     QtTestMediaObject object(&service);
       
   417 
       
   418     QSignalSpy spy(&object, SIGNAL(metaDataWritableChanged(bool)));
       
   419 
       
   420     QCOMPARE(object.isMetaDataWritable(), false);
       
   421 
       
   422     service.metaData.setWritable(true);
       
   423 
       
   424     QCOMPARE(object.isMetaDataWritable(), true);
       
   425     QCOMPARE(spy.count(), 1);
       
   426     QCOMPARE(spy.at(0).at(0).toBool(), true);
       
   427 
       
   428     service.metaData.setWritable(false);
       
   429 
       
   430     QCOMPARE(object.isMetaDataWritable(), false);
       
   431     QCOMPARE(spy.count(), 2);
   394     QCOMPARE(spy.count(), 2);
   432     QCOMPARE(spy.at(1).at(0).toBool(), false);
   395     QCOMPARE(spy.at(1).at(0).toBool(), false);
   433 }
   396 }
   434 
   397 
   435 void tst_QMediaObject::metaDataChanged()
   398 void tst_QMediaObject::metaDataChanged()
   468     service.metaData.populateMetaData();
   431     service.metaData.populateMetaData();
   469 
   432 
   470     QtTestMediaObject object(&service);
   433     QtTestMediaObject object(&service);
   471     QVERIFY(object.availableMetaData().isEmpty());
   434     QVERIFY(object.availableMetaData().isEmpty());
   472 
   435 
   473     service.metaData.m_data.insert(QtMediaServices::AlbumArtist, artist);
   436     service.metaData.m_data.insert(QtMultimedia::AlbumArtist, artist);
   474     service.metaData.m_data.insert(QtMediaServices::Title, title);
   437     service.metaData.m_data.insert(QtMultimedia::Title, title);
   475     service.metaData.m_data.insert(QtMediaServices::Genre, genre);
   438     service.metaData.m_data.insert(QtMultimedia::Genre, genre);
   476 
   439 
   477     QCOMPARE(object.metaData(QtMediaServices::AlbumArtist).toString(), artist);
   440     QCOMPARE(object.metaData(QtMultimedia::AlbumArtist).toString(), artist);
   478     QCOMPARE(object.metaData(QtMediaServices::Title).toString(), title);
   441     QCOMPARE(object.metaData(QtMultimedia::Title).toString(), title);
   479 
   442 
   480     QList<QtMediaServices::MetaData> metaDataKeys = object.availableMetaData();
   443     QList<QtMultimedia::MetaData> metaDataKeys = object.availableMetaData();
   481     QCOMPARE(metaDataKeys.size(), 3);
   444     QCOMPARE(metaDataKeys.size(), 3);
   482     QVERIFY(metaDataKeys.contains(QtMediaServices::AlbumArtist));
   445     QVERIFY(metaDataKeys.contains(QtMultimedia::AlbumArtist));
   483     QVERIFY(metaDataKeys.contains(QtMediaServices::Title));
   446     QVERIFY(metaDataKeys.contains(QtMultimedia::Title));
   484     QVERIFY(metaDataKeys.contains(QtMediaServices::Genre));
   447     QVERIFY(metaDataKeys.contains(QtMultimedia::Genre));
   485 }
       
   486 
       
   487 void tst_QMediaObject::setMetaData_data()
       
   488 {
       
   489     QTest::addColumn<QString>("title");
       
   490 
       
   491     QTest::newRow("")
       
   492             << QString::fromLatin1("In the Kingdom of the Blind the One eyed are Kings");
       
   493 }
       
   494 
       
   495 void tst_QMediaObject::setMetaData()
       
   496 {
       
   497     QFETCH(QString, title);
       
   498 
       
   499     QtTestMetaDataService service;
       
   500     service.metaData.populateMetaData();
       
   501 
       
   502     QtTestMediaObject object(&service);
       
   503 
       
   504     object.setMetaData(QtMediaServices::Title, title);
       
   505     QCOMPARE(object.metaData(QtMediaServices::Title).toString(), title);
       
   506     QCOMPARE(service.metaData.m_data.value(QtMediaServices::Title).toString(), title);
       
   507 }
   448 }
   508 
   449 
   509 void tst_QMediaObject::extendedMetaData()
   450 void tst_QMediaObject::extendedMetaData()
   510 {
   451 {
   511     QFETCH(QString, artist);
   452     QFETCH(QString, artist);
   528     QVERIFY(extendedKeys.contains(QLatin1String("Artist")));
   469     QVERIFY(extendedKeys.contains(QLatin1String("Artist")));
   529     QVERIFY(extendedKeys.contains(QLatin1String("Title")));
   470     QVERIFY(extendedKeys.contains(QLatin1String("Title")));
   530     QVERIFY(extendedKeys.contains(QLatin1String("Genre")));
   471     QVERIFY(extendedKeys.contains(QLatin1String("Genre")));
   531 }
   472 }
   532 
   473 
   533 void tst_QMediaObject::setExtendedMetaData()
       
   534 {
       
   535     QtTestMetaDataService service;
       
   536     service.metaData.populateMetaData();
       
   537 
       
   538     QtTestMediaObject object(&service);
       
   539 
       
   540     QString title(QLatin1String("In the Kingdom of the Blind the One eyed are Kings"));
       
   541 
       
   542     object.setExtendedMetaData(QLatin1String("Title"), title);
       
   543     QCOMPARE(object.extendedMetaData(QLatin1String("Title")).toString(), title);
       
   544     QCOMPARE(service.metaData.m_extendedData.value(QLatin1String("Title")).toString(), title);
       
   545 }
       
   546 
   474 
   547 QTEST_MAIN(tst_QMediaObject)
   475 QTEST_MAIN(tst_QMediaObject)
   548 
   476 
   549 #include "tst_qmediaobject.moc"
   477 #include "tst_qmediaobject.moc"