diff options
-rw-r--r-- | src/network/kernel/qdnslookup.cpp | 33 | ||||
-rw-r--r-- | src/network/kernel/qdnslookup.h | 11 | ||||
-rw-r--r-- | src/network/kernel/qdnslookup_p.h | 26 | ||||
-rw-r--r-- | tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp | 49 |
4 files changed, 101 insertions, 18 deletions
diff --git a/src/network/kernel/qdnslookup.cpp b/src/network/kernel/qdnslookup.cpp index f679f27b36..3f1618ddee 100644 --- a/src/network/kernel/qdnslookup.cpp +++ b/src/network/kernel/qdnslookup.cpp @@ -356,10 +356,13 @@ QString QDnsLookup::name() const void QDnsLookup::setName(const QString &name) { Q_D(QDnsLookup); - if (name != d->name) { - d->name = name; - emit nameChanged(name); - } + d->name = name; +} + +QBindable<QString> QDnsLookup::bindableName() +{ + Q_D(QDnsLookup); + return &d->name; } /*! @@ -375,10 +378,13 @@ QDnsLookup::Type QDnsLookup::type() const void QDnsLookup::setType(Type type) { Q_D(QDnsLookup); - if (type != d->type) { - d->type = type; - emit typeChanged(type); - } + d->type = type; +} + +QBindable<QDnsLookup::Type> QDnsLookup::bindableType() +{ + Q_D(QDnsLookup); + return &d->type; } /*! @@ -394,10 +400,13 @@ QHostAddress QDnsLookup::nameserver() const void QDnsLookup::setNameserver(const QHostAddress &nameserver) { Q_D(QDnsLookup); - if (nameserver != d->nameserver) { - d->nameserver = nameserver; - emit nameserverChanged(nameserver); - } + d->nameserver = nameserver; +} + +QBindable<QHostAddress> QDnsLookup::bindableNameserver() +{ + Q_D(QDnsLookup); + return &d->nameserver; } /*! diff --git a/src/network/kernel/qdnslookup.h b/src/network/kernel/qdnslookup.h index 110a74da44..89d617a92e 100644 --- a/src/network/kernel/qdnslookup.h +++ b/src/network/kernel/qdnslookup.h @@ -46,6 +46,7 @@ #include <QtCore/qshareddata.h> #include <QtCore/qsharedpointer.h> #include <QtCore/qstring.h> +#include <QtCore/qproperty.h> QT_REQUIRE_CONFIG(dnslookup); @@ -178,9 +179,10 @@ class Q_NETWORK_EXPORT QDnsLookup : public QObject Q_OBJECT Q_PROPERTY(Error error READ error NOTIFY finished) Q_PROPERTY(QString errorString READ errorString NOTIFY finished) - Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) - Q_PROPERTY(Type type READ type WRITE setType NOTIFY typeChanged) - Q_PROPERTY(QHostAddress nameserver READ nameserver WRITE setNameserver NOTIFY nameserverChanged) + Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged BINDABLE bindableName) + Q_PROPERTY(Type type READ type WRITE setType NOTIFY typeChanged BINDABLE bindableType) + Q_PROPERTY(QHostAddress nameserver READ nameserver WRITE setNameserver NOTIFY nameserverChanged + BINDABLE bindableNameserver) public: enum Error @@ -221,12 +223,15 @@ public: QString name() const; void setName(const QString &name); + QBindable<QString> bindableName(); Type type() const; void setType(QDnsLookup::Type); + QBindable<Type> bindableType(); QHostAddress nameserver() const; void setNameserver(const QHostAddress &nameserver); + QBindable<QHostAddress> bindableNameserver(); QList<QDnsDomainNameRecord> canonicalNameRecords() const; QList<QDnsHostAddressRecord> hostAddressRecords() const; diff --git a/src/network/kernel/qdnslookup_p.h b/src/network/kernel/qdnslookup_p.h index 8c3c2ed3e1..41901cffc8 100644 --- a/src/network/kernel/qdnslookup_p.h +++ b/src/network/kernel/qdnslookup_p.h @@ -103,9 +103,29 @@ public: static const char *msgNoIpV6NameServerAdresses; bool isFinished; - QString name; - QDnsLookup::Type type; - QHostAddress nameserver; + + void nameChanged() + { + emit q_func()->nameChanged(name); + } + Q_OBJECT_BINDABLE_PROPERTY(QDnsLookupPrivate, QString, name, + &QDnsLookupPrivate::nameChanged); + + void typeChanged() + { + emit q_func()->typeChanged(type); + } + + Q_OBJECT_BINDABLE_PROPERTY(QDnsLookupPrivate, QDnsLookup::Type, + type, &QDnsLookupPrivate::typeChanged); + + void nameserverChanged() + { + emit q_func()->nameserverChanged(nameserver); + } + Q_OBJECT_BINDABLE_PROPERTY(QDnsLookupPrivate, QHostAddress, nameserver, + &QDnsLookupPrivate::nameserverChanged); + QDnsLookupReply reply; QDnsLookupRunnable *runnable; diff --git a/tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp b/tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp index 23afb2219c..f462330fdf 100644 --- a/tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp +++ b/tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp @@ -29,6 +29,8 @@ #include <QTest> +#include <QSignalSpy> + #include <QtNetwork/QDnsLookup> #include <QtNetwork/QHostAddress> @@ -49,6 +51,7 @@ private slots: void lookup(); void lookupReuse(); void lookupAbortRetry(); + void bindingsAndProperties(); }; void tst_QDnsLookup::initTestCase() @@ -375,5 +378,51 @@ void tst_QDnsLookup::lookupAbortRetry() QCOMPARE(lookup.hostAddressRecords().first().value(), QHostAddress("2001:db8::1")); } +void tst_QDnsLookup::bindingsAndProperties() +{ + QFETCH_GLOBAL(const QString, tld); + if (tld == QStringLiteral("idn")) + return; + + QDnsLookup lookup; + + lookup.setType(QDnsLookup::A); + QProperty<QDnsLookup::Type> dnsTypeProp; + lookup.bindableType().setBinding(Qt::makePropertyBinding(dnsTypeProp)); + const QSignalSpy typeChangeSpy(&lookup, &QDnsLookup::typeChanged); + + dnsTypeProp = QDnsLookup::AAAA; + QCOMPARE(typeChangeSpy.count(), 1); + QCOMPARE(lookup.type(), QDnsLookup::AAAA); + + dnsTypeProp.setBinding(lookup.bindableType().makeBinding()); + lookup.setType(QDnsLookup::A); + QCOMPARE(dnsTypeProp.value(), QDnsLookup::A); + + QProperty<QString> nameProp; + lookup.bindableName().setBinding(Qt::makePropertyBinding(nameProp)); + const QSignalSpy nameChangeSpy(&lookup, &QDnsLookup::nameChanged); + + nameProp = QStringLiteral("a-plus-aaaa"); + QCOMPARE(nameChangeSpy.count(), 1); + QCOMPARE(lookup.name(), QStringLiteral("a-plus-aaaa")); + + nameProp.setBinding(lookup.bindableName().makeBinding()); + lookup.setName(QStringLiteral("a-single")); + QCOMPARE(nameProp.value(), QStringLiteral("a-single")); + + QProperty<QHostAddress> nameserverProp; + lookup.bindableNameserver().setBinding(Qt::makePropertyBinding(nameserverProp)); + const QSignalSpy nameserverChangeSpy(&lookup, &QDnsLookup::nameserverChanged); + + nameserverProp = QHostAddress::LocalHost; + QCOMPARE(nameserverChangeSpy.count(), 1); + QCOMPARE(lookup.nameserver(), QHostAddress::LocalHost); + + nameserverProp.setBinding(lookup.bindableNameserver().makeBinding()); + lookup.setNameserver(QHostAddress::Any); + QCOMPARE(nameserverProp.value(), QHostAddress::Any); +} + QTEST_MAIN(tst_QDnsLookup) #include "tst_qdnslookup.moc" |