diff options
author | Denis Shienkov <denis.shienkov@gmail.com> | 2017-10-19 16:40:12 +0300 |
---|---|---|
committer | Denis Shienkov <denis.shienkov@gmail.com> | 2017-11-07 05:49:49 +0000 |
commit | 66aa42314346a49b1219df125b730349e8051f05 (patch) | |
tree | b8c066ab804eda2db980c18c3d3dc35f3ce41acf /tests | |
parent | 583aad43f59fa52baddb720946de7e1eb6c081ec (diff) |
Add BinaryFile service to manipulate binary files
[ChangeLog] Added the BinaryFile service for reading
and writing binary data files.
Change-Id: I93378c448a367472c4dd9ad5e715f70d88d7f58e
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/blackbox/testdata/jsextensions-binaryfile/binaryfile.qbs | 48 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.cpp | 24 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.h | 1 |
3 files changed, 73 insertions, 0 deletions
diff --git a/tests/auto/blackbox/testdata/jsextensions-binaryfile/binaryfile.qbs b/tests/auto/blackbox/testdata/jsextensions-binaryfile/binaryfile.qbs new file mode 100644 index 000000000..7d3ada851 --- /dev/null +++ b/tests/auto/blackbox/testdata/jsextensions-binaryfile/binaryfile.qbs @@ -0,0 +1,48 @@ +import qbs +import qbs.BinaryFile + +Product { + type: ["dummy"] + Rule { + multiplex: true + Artifact { + filePath: "dummy.dat" + fileTags: ["dummy"] + } + prepare: { + var commands = []; + var cmd = new JavaScriptCommand(); + cmd.silent = true; + cmd.sourceCode = function() { + var source = new BinaryFile("source.dat", BinaryFile.WriteOnly); + source.write([ 0x01, 0x02 ]); // First data. + // Do not close the file to test the auto close functionality. + }; + commands.push(cmd); + cmd = new JavaScriptCommand(); + cmd.silent = true; + cmd.sourceCode = function() { + source = new BinaryFile("source.dat", BinaryFile.ReadWrite); + source.seek(source.size()); + source.write([ 0x03, 0x04 ]); // Second data. + source.close(); + source = new BinaryFile("source.dat", BinaryFile.ReadWrite); + var destination = new BinaryFile("destination.dat", BinaryFile.WriteOnly); + destination.write(source.atEof() ? [ 0xFF ] : [ 0x00 ]); + while (true) { + var data = source.read(1); + if (!data || data.length == 0) + break; + destination.write(data); + } + source.resize(0); // truncate + destination.write([ 0x05, 0x06 ]); // Third data. + destination.write(source.atEof() ? [ 0xFF ] : [ 0x00 ]); + source.close(); + destination.close(); + }; + commands.push(cmd); + return commands; + } + } +} diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 30e495c04..93b63e5dd 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -3490,6 +3490,30 @@ void TestBlackbox::jsExtensionsTextFile() QCOMPARE(lines.at(5).trimmed().constData(), "true"); } +void TestBlackbox::jsExtensionsBinaryFile() +{ + QDir::setCurrent(testDataDir + "/jsextensions-binaryfile"); + QbsRunParameters params(QStringList() << "-f" << "binaryfile.qbs"); + QCOMPARE(runQbs(params), 0); + QFile source("source.dat"); + QVERIFY(source.exists()); + QVERIFY(source.open(QIODevice::ReadOnly)); + QCOMPARE(source.size(), qint64(0)); + QFile destination("destination.dat"); + QVERIFY(destination.exists()); + QVERIFY(destination.open(QIODevice::ReadOnly)); + const QByteArray data = destination.readAll(); + QCOMPARE(data.size(), 8); + QCOMPARE(data.at(0), char(0x00)); + QCOMPARE(data.at(1), char(0x01)); + QCOMPARE(data.at(2), char(0x02)); + QCOMPARE(data.at(3), char(0x03)); + QCOMPARE(data.at(4), char(0x04)); + QCOMPARE(data.at(5), char(0x05)); + QCOMPARE(data.at(6), char(0x06)); + QCOMPARE(data.at(7), char(0xFF)); +} + void TestBlackbox::ld() { QDir::setCurrent(testDataDir + "/ld"); diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h index 0bc40289b..67c9d152a 100644 --- a/tests/auto/blackbox/tst_blackbox.h +++ b/tests/auto/blackbox/tst_blackbox.h @@ -121,6 +121,7 @@ private slots: void jsExtensionsPropertyList(); void jsExtensionsTemporaryDir(); void jsExtensionsTextFile(); + void jsExtensionsBinaryFile(); void ld(); void linkerMode(); void lexyacc(); |