summaryrefslogtreecommitdiffstats
path: root/tests/auto/jsonstream/tst_jsonstream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/jsonstream/tst_jsonstream.cpp')
-rw-r--r--tests/auto/jsonstream/tst_jsonstream.cpp106
1 files changed, 102 insertions, 4 deletions
diff --git a/tests/auto/jsonstream/tst_jsonstream.cpp b/tests/auto/jsonstream/tst_jsonstream.cpp
index e997639..4ec119b 100644
--- a/tests/auto/jsonstream/tst_jsonstream.cpp
+++ b/tests/auto/jsonstream/tst_jsonstream.cpp
@@ -170,6 +170,16 @@ private:
};
/****************************/
+class TestJsonStream : public JsonStream
+{
+public:
+ TestJsonStream(QIODevice *device)
+ : JsonStream(device) {}
+
+ bool sendRaw(const QByteArray& byteArray) { return sendInternal(byteArray); }
+};
+
+/****************************/
class BasicServer : public QObject {
Q_OBJECT
@@ -194,6 +204,10 @@ public:
return stream ? stream->send(message) : false;
}
+ bool sendRaw(const QByteArray& buffer) {
+ return stream ? stream->sendRaw(buffer) : false;
+ }
+
void waitDisconnect(int timeout=5000) {
QTime stopWatch;
stopWatch.start();
@@ -215,7 +229,7 @@ private slots:
void handleConnection() {
socket = server->nextPendingConnection();
QVERIFY(socket);
- stream = new JsonStream(socket);
+ stream = new TestJsonStream(socket);
stream->setParent(socket);
if (readBufferSize > 0)
stream->setReadBufferSize(readBufferSize);
@@ -255,7 +269,7 @@ signals:
private:
QLocalServer *server;
QLocalSocket *socket;
- JsonStream *stream;
+ TestJsonStream *stream;
qint64 readBufferSize;
bool mHandleReadBufOverflow;
public:
@@ -277,6 +291,7 @@ private slots:
void authRangeTest();
void authRangeFail();
void formatTest();
+ void BOMformatTest();
void schemaTest();
void pipeTest();
void pipeFormatTest();
@@ -397,7 +412,7 @@ void tst_JsonStream::formatTest()
{
QString socketname = "/tmp/tst_socket";
- QStringList formats = QStringList() << "qbjs" << "bson" << "utf8" << "utf16be" << "utf16le";
+ QStringList formats = QStringList() << "qbjs" << "bson" << "utf8" << "utf16be" << "utf16le" << "utf32be" << "utf32le";
foreach (const QString& format, formats) {
BasicServer server(socketname);
@@ -426,6 +441,10 @@ void tst_JsonStream::formatTest()
QVERIFY(server.format() == FormatUTF16BE);
else if (format == "utf16le")
QVERIFY(server.format() == FormatUTF16LE);
+ else if (format == "utf32be")
+ QVERIFY(server.format() == FormatUTF32BE);
+ else if (format == "utf32le")
+ QVERIFY(server.format() == FormatUTF32LE);
else
QFAIL("Unrecognized format");
@@ -453,6 +472,85 @@ void tst_JsonStream::formatTest()
}
}
+void tst_JsonStream::BOMformatTest()
+{
+ QString socketname = "/tmp/tst_socket";
+
+ QStringList formats = QStringList() << "utf8" << "utf16be" << "utf16le" << "utf32be" << "utf32le";
+
+ foreach (const QString& format, formats) {
+ BasicServer server(socketname);
+ QSignalSpy spy(&server, SIGNAL(messageReceived(const QJsonObject&)));
+ QTime stopWatch;
+
+ Child child("testClient/testClient",
+ QStringList() << "-socket" << socketname << "-format" << format);
+
+ stopWatch.start();
+ forever {
+ QTestEventLoop::instance().enterLoop(1);
+ if (stopWatch.elapsed() >= 5000)
+ QFAIL("Timed out");
+ if (spy.count())
+ break;
+ }
+
+ if (format == "utf8")
+ QVERIFY(server.format() == FormatUTF8);
+ else if (format == "utf16be")
+ QVERIFY(server.format() == FormatUTF16BE);
+ else if (format == "utf16le")
+ QVERIFY(server.format() == FormatUTF16LE);
+ else if (format == "utf32be")
+ QVERIFY(server.format() == FormatUTF32BE);
+ else if (format == "utf32le")
+ QVERIFY(server.format() == FormatUTF32LE);
+ else
+ QFAIL("Unrecognized format");
+
+ QJsonObject msg = qvariant_cast<QJsonObject>(spy.last().at(0));
+ QVERIFY(msg.value("text").isString() && msg.value("text").toString() == QLatin1String("Standard text"));
+ QVERIFY(msg.value("int").isDouble() && msg.value("int").toDouble() == 100);
+ QVERIFY(msg.value("float").isDouble() && msg.value("float").toDouble() == 100.0);
+ QVERIFY(msg.value("true").isBool() && msg.value("true").toBool() == true);
+ QVERIFY(msg.value("false").isBool() && msg.value("false").toBool() == false);
+ QVERIFY(msg.value("array").isArray());
+ QJsonArray array = msg.value("array").toArray();
+ QVERIFY(array.size() == 3);
+ QVERIFY(array.at(0).toString() == "one");
+ QVERIFY(array.at(1).toString() == "two");
+ QVERIFY(array.at(2).toString() == "three");
+ QVERIFY(msg.value("object").isObject());
+ QJsonObject object = msg.value("object").toObject();
+ QVERIFY(object.value("item1").toString() == "This is item 1");
+ QVERIFY(object.value("item2").toString() == "This is item 2");
+
+ msg.insert("command", QLatin1String("exit"));
+
+ QJsonDocument document(msg);
+ QString str(QString::fromUtf8(document.toJson()));
+ const char *codec;
+ if (format == "utf8")
+ codec = "UTF-8";
+ else if (format == "utf16be")
+ codec = "UTF-16BE";
+ else if (format == "utf16le")
+ codec = "UTF-16LE";
+ else if (format == "utf32be")
+ codec = "UTF-32BE";
+ else if (format == "utf32le")
+ codec = "UTF-32LE";
+ else
+ QFAIL("Unrecognized format");
+
+ // send data with BOM prepended
+ QTextCodec::ConverterState state(QTextCodec::DefaultConversion);
+ QVERIFY(server.sendRaw(QTextCodec::codecForName(codec)->fromUnicode(str.constData(), str.length(), &state))); // BOM added
+ server.waitDisconnect();
+ child.waitForFinished();
+ }
+}
+
void tst_JsonStream::bufferSizeTest()
{
QString socketname = "/tmp/tst_socket";
@@ -649,7 +747,7 @@ void tst_JsonStream::pipeTest()
void tst_JsonStream::pipeFormatTest()
{
- QList<EncodingFormat> formats = QList<EncodingFormat>() << FormatUTF8 << FormatBSON << FormatQBJS << FormatUTF16BE << FormatUTF16LE;
+ QList<EncodingFormat> formats = QList<EncodingFormat>() << FormatUTF8 << FormatBSON << FormatQBJS << FormatUTF16BE << FormatUTF16LE << FormatUTF32BE << FormatUTF32LE;
foreach (EncodingFormat format, formats) {
Pipes pipes;