From 0a57b0e54203f9eaa2b8e0ca79f6198315f2fba2 Mon Sep 17 00:00:00 2001 From: Mate Barany Date: Wed, 12 Jun 2024 09:24:11 +0200 Subject: [PATCH] Refactor test cases in tst_qformdatabuilder Hide the construction details of QFormDataPartBuilder, change the verification to be QString based instead of QByteArray based, and use raw string literals (where useful) for readability. Task-number: QTBUG-114647 Change-Id: I16fb6c943cf6fd7385e78bbffe3b2780ab0a6ac8 Reviewed-by: Marc Mutz (cherry picked from commit cb8abb718da4e18232de525ef1bb611f3a5dd929) Reviewed-by: Qt Cherry-pick Bot --- .../qformdatabuilder/tst_qformdatabuilder.cpp | 183 ++++++++---------- 1 file changed, 80 insertions(+), 103 deletions(-) diff --git a/tests/auto/network/access/qformdatabuilder/tst_qformdatabuilder.cpp b/tests/auto/network/access/qformdatabuilder/tst_qformdatabuilder.cpp index b45662dc206..8bb0396ea1c 100644 --- a/tests/auto/network/access/qformdatabuilder/tst_qformdatabuilder.cpp +++ b/tests/auto/network/access/qformdatabuilder/tst_qformdatabuilder.cpp @@ -36,43 +36,42 @@ void tst_QFormDataBuilder::generateQHttpPartWithDevice_data() QTest::addColumn("name_data"); QTest::addColumn("real_file_name"); QTest::addColumn("body_name_data"); - QTest::addColumn("expected_content_type_data"); - QTest::addColumn("expected_content_disposition_data"); + QTest::addColumn("expected_content_type_data"); + QTest::addColumn("expected_content_disposition_data"); - QTest::newRow("txt-ascii") << "text"_L1 << "rfc3252.txt" << "rfc3252.txt" << "text/plain"_ba - << "form-data; name=\"text\"; filename=rfc3252.txt"_ba; - QTest::newRow("txt-latin") << "text"_L1 << "rfc3252.txt" << "szöveg.txt" << "text/plain"_ba - << "form-data; name=\"text\"; filename*=ISO-8859-1''sz%F6veg.txt"_ba; - QTest::newRow("txt-unicode") << "text"_L1 << "rfc3252.txt" << "テキスト.txt" << "text/plain"_ba - << "form-data; name=\"text\"; filename*=UTF-8''%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88.txt"_ba; + QTest::newRow("txt-ascii") << "text"_L1 << u"rfc3252.txt"_s << u"rfc3252.txt"_s << u"text/plain"_s + << uR"(form-data; name="text"; filename=rfc3252.txt)"_s; + QTest::newRow("txt-latin") << "text"_L1 << u"rfc3252.txt"_s << u"szöveg.txt"_s << u"text/plain"_s + << uR"(form-data; name="text"; filename*=ISO-8859-1''sz%F6veg.txt)"_s; + QTest::newRow("txt-unicode") << "text"_L1 << u"rfc3252.txt"_s << u"テキスト.txt"_s << u"text/plain"_s + << uR"(form-data; name="text"; filename*=UTF-8''%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88.txt)"_s; - QTest::newRow("jpg-ascii") << "image"_L1 << "image1.jpg" << "image1.jpg" << "image/jpeg"_ba - << "form-data; name=\"image\"; filename=image1.jpg"_ba; - QTest::newRow("jpg-latin") << "image"_L1 << "image1.jpg" << "kép.jpg" << "image/jpeg"_ba - << "form-data; name=\"image\"; filename*=ISO-8859-1''k%E9p.jpg"_ba; - QTest::newRow("jpg-unicode") << "image"_L1 << "image1.jpg" << "絵.jpg" << "image/jpeg"_ba - << "form-data; name=\"image\"; filename*=UTF-8''%E7%B5%B5"_ba; + QTest::newRow("jpg-ascii") << "image"_L1 << u"image1.jpg"_s << u"image1.jpg"_s << u"image/jpeg"_s + << uR"(form-data; name="image"; filename=image1.jpg)"_s; + QTest::newRow("jpg-latin") << "image"_L1 << u"image1.jpg"_s << u"kép.jpg"_s << u"image/jpeg"_s + << uR"(form-data; name="image"; filename*=ISO-8859-1''k%E9p.jpg)"_s; + QTest::newRow("jpg-unicode") << "image"_L1 << u"image1.jpg"_s << u"絵.jpg"_s << u"image/jpeg"_s + << uR"(form-data; name="image"; filename*=UTF-8''%E7%B5%B5)"_s; - QTest::newRow("doc-ascii") << "text"_L1 << "document.docx" << "word.docx" - << "application/vnd.openxmlformats-officedocument.wordprocessingml.document"_ba - << "form-data; name=\"text\"; filename=word.docx"_ba; - QTest::newRow("doc-latin") << "text"_L1 << "document.docx" << "szöveg.docx" - << "application/vnd.openxmlformats-officedocument.wordprocessingml.document"_ba - << "form-data; name=\"text\"; filename*=ISO-8859-1''sz%F6veg.docx"_ba; - QTest::newRow("doc-unicode") << "text"_L1 << "document.docx" << "テキスト.docx" - << "application/vnd.openxmlformats-officedocument.wordprocessingml.document"_ba - << "form-data; name=\"text\"; filename*=UTF-8''%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88.docx"_ba; - - QTest::newRow("xls-ascii") << "spreadsheet"_L1 << "sheet.xlsx" << "sheet.xlsx" - << "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"_ba - << "form-data; name=\"spreadsheet\"; filename=sheet.xlsx"_ba; - QTest::newRow("xls-latin") << "spreadsheet"_L1 << "sheet.xlsx" << "szöveg.xlsx" - << "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"_ba - << "form-data; name=\"spreadsheet\"; filename*=ISO-8859-1''sz%F6veg.xlsx"_ba; - QTest::newRow("xls-unicode") << "spreadsheet"_L1 << "sheet.xlsx" << "テキスト.xlsx" - << "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"_ba - << "form-data; name=\"spreadsheet\"; filename*=UTF-8''%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88.xlsx"_ba; + QTest::newRow("doc-ascii") << "text"_L1 << u"document.docx"_s << u"word.docx"_s + << u"application/vnd.openxmlformats-officedocument.wordprocessingml.document"_s + << uR"(form-data; name="text"; filename=word.docx)"_s; + QTest::newRow("doc-latin") << "text"_L1 << u"document.docx"_s << u"szöveg.docx"_s + << u"application/vnd.openxmlformats-officedocument.wordprocessingml.document"_s + << uR"(form-data; name="text"; filename*=ISO-8859-1''sz%F6veg.docx)"_s; + QTest::newRow("doc-unicode") << "text"_L1 << u"document.docx"_s << u"テキスト.docx"_s + << u"application/vnd.openxmlformats-officedocument.wordprocessingml.document"_s + << uR"(form-data; name="text"; filename*=UTF-8''%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88.docx)"_s; + QTest::newRow("xls-ascii") << "spreadsheet"_L1 << u"sheet.xlsx"_s << u"sheet.xlsx"_s + << u"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"_s + << uR"(form-data; name="spreadsheet"; filename=sheet.xlsx)"_s; + QTest::newRow("xls-latin") << "spreadsheet"_L1 << u"sheet.xlsx"_s << u"szöveg.xlsx"_s + << u"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"_s + << uR"(form-data; name="spreadsheet"; filename*=ISO-8859-1''sz%F6veg.xlsx)"_s; + QTest::newRow("xls-unicode") << "spreadsheet"_L1 << u"sheet.xlsx"_s << u"テキスト.xlsx"_s + << u"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"_s + << uR"(form-data; name="spreadsheet"; filename*=UTF-8''%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88.xlsx)"_s; } void tst_QFormDataBuilder::generateQHttpPartWithDevice() @@ -80,24 +79,17 @@ void tst_QFormDataBuilder::generateQHttpPartWithDevice() QFETCH(const QLatin1StringView, name_data); QFETCH(const QString, real_file_name); QFETCH(const QString, body_name_data); - QFETCH(const QByteArray, expected_content_type_data); - QFETCH(const QByteArray, expected_content_disposition_data); + QFETCH(const QString, expected_content_type_data); + QFETCH(const QString, expected_content_disposition_data); QString testData = QFileInfo(QFINDTESTDATA(real_file_name)).absoluteFilePath(); QFile data_file(testData); - QHttpPart httpPart = QFormDataPartBuilder(name_data, QFormDataPartBuilder::PrivateConstructor()) - .setBodyDevice(&data_file, body_name_data) - .build(); - - QByteArray msg; - { - QBuffer buf(&msg); - QVERIFY(buf.open(QIODevice::WriteOnly)); - QDebug debug(&buf); - debug << httpPart; - } + QFormDataBuilder qfdb; + QFormDataPartBuilder &qfdpb = qfdb.part(name_data).setBodyDevice(&data_file, body_name_data); + const QHttpPart httpPart = qfdpb.build(); + const auto msg = QDebug::toString(httpPart); QVERIFY(msg.contains(expected_content_type_data)); QVERIFY(msg.contains(expected_content_disposition_data)); } @@ -106,49 +98,42 @@ void tst_QFormDataBuilder::escapesBackslashAndQuotesInFilenameAndName_data() { QTest::addColumn("name_data"); QTest::addColumn("body_name_data"); - QTest::addColumn("expected_content_type_data"); - QTest::addColumn("expected_content_disposition_data"); + QTest::addColumn("expected_content_type_data"); + QTest::addColumn("expected_content_disposition_data"); - QTest::newRow("quote") << "t\"ext"_L1 << "rfc3252.txt" << "text/plain"_ba - << R"(form-data; name="t\"ext"; filename=rfc3252.txt)"_ba; + QTest::newRow("quote") << "t\"ext"_L1 << "rfc3252.txt" << u"text/plain"_s + << uR"(form-data; name="t\"ext"; filename=rfc3252.txt)"_s; - QTest::newRow("slash") << "t\\ext"_L1 << "rfc3252.txt" << "text/plain"_ba - << R"(form-data; name="t\\ext"; filename=rfc3252.txt)"_ba; + QTest::newRow("slash") << "t\\ext"_L1 << "rfc3252.txt" << u"text/plain"_s + << uR"(form-data; name="t\\ext"; filename=rfc3252.txt)"_s; - QTest::newRow("quotes") << "t\"e\"xt"_L1 << "rfc3252.txt" << "text/plain"_ba - << R"(form-data; name="t\"e\"xt"; filename=rfc3252.txt)"_ba; + QTest::newRow("quotes") << "t\"e\"xt"_L1 << "rfc3252.txt" << u"text/plain"_s + << uR"(form-data; name="t\"e\"xt"; filename=rfc3252.txt)"_s; - QTest::newRow("slashes") << "t\\\\ext"_L1 << "rfc3252.txt" << "text/plain"_ba - << R"(form-data; name="t\\\\ext"; filename=rfc3252.txt)"_ba; + QTest::newRow("slashes") << "t\\\\ext"_L1 << "rfc3252.txt" << u"text/plain"_s + << uR"(form-data; name="t\\\\ext"; filename=rfc3252.txt)"_s; - QTest::newRow("quote-slash") << "t\"ex\\t"_L1 << "rfc3252.txt" << "text/plain"_ba - << R"(form-data; name="t\"ex\\t"; filename=rfc3252.txt)"_ba; + QTest::newRow("quote-slash") << "t\"ex\\t"_L1 << "rfc3252.txt" << u"text/plain"_s + << uR"(form-data; name="t\"ex\\t"; filename=rfc3252.txt)"_s; - QTest::newRow("quotes-slashes") << "t\"e\"x\\t\\"_L1 << "rfc3252.txt" << "text/plain"_ba - << R"(form-data; name="t\"e\"x\\t\\"; filename=rfc3252.txt)"_ba; + QTest::newRow("quotes-slashes") << "t\"e\"x\\t\\"_L1 << "rfc3252.txt" << u"text/plain"_s + << uR"(form-data; name="t\"e\"x\\t\\"; filename=rfc3252.txt)"_s; } void tst_QFormDataBuilder::escapesBackslashAndQuotesInFilenameAndName() { QFETCH(const QLatin1StringView, name_data); QFETCH(const QString, body_name_data); - QFETCH(const QByteArray, expected_content_type_data); - QFETCH(const QByteArray, expected_content_disposition_data); + QFETCH(const QString, expected_content_type_data); + QFETCH(const QString, expected_content_disposition_data); QFile dummy_file(body_name_data); - QHttpPart httpPart = QFormDataPartBuilder(name_data, QFormDataPartBuilder::PrivateConstructor()) - .setBodyDevice(&dummy_file, body_name_data) - .build(); - - QByteArray msg; - { - QBuffer buf(&msg); - QVERIFY(buf.open(QIODevice::WriteOnly)); - QDebug debug(&buf); - debug << httpPart; - } + QFormDataBuilder qfdb; + QFormDataPartBuilder &qfdpb = qfdb.part(name_data).setBodyDevice(&dummy_file, body_name_data); + const QHttpPart httpPart = qfdpb.build(); + const auto msg = QDebug::toString(httpPart); QVERIFY(msg.contains(expected_content_type_data)); QVERIFY(msg.contains(expected_content_disposition_data)); } @@ -157,49 +142,41 @@ void tst_QFormDataBuilder::picksUtf8EncodingOnlyIfL1OrAsciiDontSuffice_data() { QTest::addColumn("name_data"); QTest::addColumn("body_name_data"); - QTest::addColumn("expected_content_type_data"); - QTest::addColumn("expected_content_disposition_data"); + QTest::addColumn("expected_content_type_data"); + QTest::addColumn("expected_content_disposition_data"); - QTest::newRow("latin1-ascii") << "text"_L1 << QAnyStringView("rfc3252.txt"_L1) << "text/plain"_ba - << "form-data; name=\"text\"; filename=rfc3252.txt"_ba; - QTest::newRow("u8-ascii") << "text"_L1 << QAnyStringView(u8"rfc3252.txt") << "text/plain"_ba - << "form-data; name=\"text\"; filename=rfc3252.txt"_ba; - QTest::newRow("u-ascii") << "text"_L1 << QAnyStringView(u"rfc3252.txt") << "text/plain"_ba - << "form-data; name=\"text\"; filename=rfc3252.txt"_ba; + QTest::newRow("latin1-ascii") << "text"_L1 << QAnyStringView("rfc3252.txt"_L1) << u"text/plain"_s + << uR"(form-data; name="text"; filename=rfc3252.txt)"_s; + QTest::newRow("u8-ascii") << "text"_L1 << QAnyStringView(u8"rfc3252.txt") << u"text/plain"_s + << uR"(form-data; name="text"; filename=rfc3252.txt)"_s; + QTest::newRow("u-ascii") << "text"_L1 << QAnyStringView(u"rfc3252.txt") << u"text/plain"_s + << uR"(form-data; name="text"; filename=rfc3252.txt)"_s; + QTest::newRow("latin1-latin") << "text"_L1 << QAnyStringView("sz\366veg.txt"_L1) << u"text/plain"_s + << uR"(form-data; name="text"; filename*=ISO-8859-1''sz%F6veg.txt)"_s; + QTest::newRow("u8-latin") << "text"_L1 << QAnyStringView(u8"szöveg.txt") << u"text/plain"_s + << uR"(form-data; name="text"; filename*=ISO-8859-1''sz%F6veg.txt)"_s; + QTest::newRow("u-latin") << "text"_L1 << QAnyStringView(u"szöveg.txt") << u"text/plain"_s + << uR"(form-data; name="text"; filename*=ISO-8859-1''sz%F6veg.txt)"_s; - QTest::newRow("latin1-latin") << "text"_L1 << QAnyStringView("sz\366veg.txt"_L1) << "text/plain"_ba - << "form-data; name=\"text\"; filename*=ISO-8859-1''sz%F6veg.txt"_ba; - QTest::newRow("u8-latin") << "text"_L1 << QAnyStringView(u8"szöveg.txt") << "text/plain"_ba - << "form-data; name=\"text\"; filename*=ISO-8859-1''sz%F6veg.txt"_ba; - QTest::newRow("u-latin") << "text"_L1 << QAnyStringView(u"szöveg.txt") << "text/plain"_ba - << "form-data; name=\"text\"; filename*=ISO-8859-1''sz%F6veg.txt"_ba; - - QTest::newRow("u8-u8") << "text"_L1 << QAnyStringView(u8"テキスト.txt") << "text/plain"_ba - << "form-data; name=\"text\"; filename*=UTF-8''%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88.txt"_ba; + QTest::newRow("u8-u8") << "text"_L1 << QAnyStringView(u8"テキスト.txt") << u"text/plain"_s + << uR"(form-data; name="text"; filename*=UTF-8''%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88.txt)"_s; } void tst_QFormDataBuilder::picksUtf8EncodingOnlyIfL1OrAsciiDontSuffice() { QFETCH(const QLatin1StringView, name_data); QFETCH(const QAnyStringView, body_name_data); - QFETCH(const QByteArray, expected_content_type_data); - QFETCH(const QByteArray, expected_content_disposition_data); + QFETCH(const QString, expected_content_type_data); + QFETCH(const QString, expected_content_disposition_data); QBuffer buff; - QHttpPart httpPart = QFormDataPartBuilder(name_data, QFormDataPartBuilder::PrivateConstructor()) - .setBodyDevice(&buff, body_name_data) - .build(); - - QByteArray msg; - { - QBuffer buf(&msg); - QVERIFY(buf.open(QIODevice::WriteOnly)); - QDebug debug(&buf); - debug << httpPart; - } + QFormDataBuilder qfdb; + QFormDataPartBuilder &qfdpb = qfdb.part(name_data).setBodyDevice(&buff, body_name_data); + const QHttpPart httpPart = qfdpb.build(); + const auto msg = QDebug::toString(httpPart); QVERIFY(msg.contains(expected_content_type_data)); QVERIFY(msg.contains(expected_content_disposition_data)); }