diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,7 +62,7 @@ set(KSIEVE_LIB_VERSION "5.1.42") set(LIBKDEPIM_LIB_VERSION "5.1.42") set(MAILIMPORTER_LIB_VERSION "5.1.42") -set(MESSAGELIB_LIB_VERSION "5.1.64") +set(MESSAGELIB_LIB_VERSION "5.1.65") set(KDEPIM_APPS_LIB_VERSION "5.1.42") set(LIBKLEO_LIB_VERSION "5.1.42") set(KDEPIMLIBS_LIB_VERSION "5.1.42") diff --git a/plugins/messageviewer/bodypartformatter/CMakeLists.txt b/plugins/messageviewer/bodypartformatter/CMakeLists.txt --- a/plugins/messageviewer/bodypartformatter/CMakeLists.txt +++ b/plugins/messageviewer/bodypartformatter/CMakeLists.txt @@ -1,4 +1,5 @@ + add_subdirectory(autotests) add_subdirectory(ms-tnef) add_subdirectory(vcard) add_subdirectory(xdiff) diff --git a/plugins/messageviewer/bodypartformatter/autotests/CMakeLists.txt b/plugins/messageviewer/bodypartformatter/autotests/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/plugins/messageviewer/bodypartformatter/autotests/CMakeLists.txt @@ -0,0 +1,17 @@ +set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}) +add_definitions( -DMAIL_DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/data" ) + +macro(add_kdepimaddons_unittest _source) + set(_test ${_source}) + get_filename_component(_name ${_source} NAME_WE) + ecm_add_test(${_source} + TEST_NAME ${_name} + NAME_PREFIX "messageviewerplugins-" + LINK_LIBRARIES + KF5::MessageViewer + Qt5::Test + KF5::IconThemes + ) +endmacro () + +add_kdepimaddons_unittest(rendertest.cpp) diff --git a/plugins/messageviewer/bodypartformatter/autotests/data/tnef-one-file.mbox b/plugins/messageviewer/bodypartformatter/autotests/data/tnef-one-file.mbox new file mode 100644 --- /dev/null +++ b/plugins/messageviewer/bodypartformatter/autotests/data/tnef-one-file.mbox @@ -0,0 +1,66 @@ +From: sender@example.com +To: receiver@example.com +Subject: one file TNEF attachment +Date: Wed, 5 Aug 2009 10:58:27 +0200 +MIME-Version: 1.0 +Content-Type: Multipart/Mixed; + boundary="Boundary-00=_zmUeKB+A8hGfCVZ" + + +--Boundary-00=_zmUeKB+A8hGfCVZ +Content-Type: text/plain; + charset="iso-8859-15" +Content-Transfer-Encoding: 7bit +Content-Disposition: inline + +some body text + +--Boundary-00=_zmUeKB+A8hGfCVZ +Content-Type: application/ms-tnef; + name="winmail.dat" +Content-Transfer-Encoding: base64 +Content-Description: TNEF file containing a single message +Content-Disposition: inline + +eJ8+IjcCAQaQCAAEAAAAAAABAAEAAQeQBgAIAAAA5AQAAAAAAADoAAEIgAcAGAAAAElQTS5NaWNy +b3NvZnQgTWFpbC5Ob3RlADEIAQmAAQAhAAAAMjAwMTdGQ0ZEMDgxRDMxMUE3QTUwMDA4QzcxQkNB +OEQAIgcBBgAHABgAAABJUE0uTWljcm9zb2Z0IE1haWwuTm90ZQAxCAEggAMADgAAAM8HCgANABYA +MQA0AAMAawEBBYADAA4AAADPBwoADQAWAC8ALAADAGEBAQSAAQAJAAAAb25lLWZpbGUADwMBDYAE +AAIAAAACAAIAAQOQBgC4BQAAOAAAAAMA/T/kBAAAQAA5AACIZ33uFb8BHgAxQAEAAAAWAAAAc2lt +cHNvbkB3b3JsZC5zdGQuY29tAAAAAwAaQAAAAQAeADBAAQAAABYAAABzaW1wc29uQHdvcmxkLnN0 +ZC5jb20AAAADABlAAAABAAMA3j+vbwAAHgBwAAEAAAAJAAAAb25lLWZpbGUAAAAAAgFxAAEAAAAW +AAAAAb8V7saQz38BIYHQEdOnpQAIxxvKjQAAHgD+VwEAAAAVAAAATkFJU0NBTk5FRFBPU1RPRkZJ +Q0UAAAAACwDyEAEAAAACAfM/AQAAAAAAAAACAfQ/AQAAAAAAAAACAT8AAQAAAFEAAAAAAAAA3KdA +yMBCEBq0uQgAKy/hggEAAAAAAAAAL089Q09NUFVXQVJFL09VPU5VTUVHQSBMQUIvQ049UkVDSVBJ +RU5UUy9DTj1NU0lNUFNPTgAAAAAeAHUAAQAAAAUAAABTTVRQAAAAAB4AdgABAAAAGAAAAG1hcmsu +c2ltcHNvbkBudW1lZ2EuY29tAB4AQAABAAAADgAAAFNpbXBzb24sIE1hcmsAAAAeADRAAQAAAAkA +AABNU0lNUFNPTgAAAAACAVEAAQAAADgAAABFWDovTz1DT01QVVdBUkUvT1U9TlVNRUdBIExBQi9D +Tj1SRUNJUElFTlRTL0NOPU1TSU1QU09OAAMAG0AAAAAAAgFDAAEAAABRAAAAAAAAANynQMjAQhAa +tLkIACsv4YIBAAAAAAAAAC9PPUNPTVBVV0FSRS9PVT1OVU1FR0EgTEFCL0NOPVJFQ0lQSUVOVFMv +Q049TVNJTVBTT04AAAAAHgB3AAEAAAAFAAAAU01UUAAAAAAeAHgAAQAAABgAAABtYXJrLnNpbXBz +b25AbnVtZWdhLmNvbQAeAEQAAQAAAA4AAABTaW1wc29uLCBNYXJrAAAAHgA1QAEAAAAJAAAATVNJ +TVBTT04AAAAAAgFSAAEAAAA4AAAARVg6L089Q09NUFVXQVJFL09VPU5VTUVHQSBMQUIvQ049UkVD +SVBJRU5UUy9DTj1NU0lNUFNPTgADABxAAAAAAAsAVwABAAAACwBYAAAAAAALAFkAAQAAAAIBRwAB +AAAAAAAAAAIB+T8BAAAAQAAAAAAAAACBKx+kvqMQGZ1uAN0BD1QCAAABAE1hcmsgU2ltcHNvbgBT +TVRQAHNpbXBzb25Ad29ybGQuc3RkLmNvbQAeAPg/AQAAAA0AAABNYXJrIFNpbXBzb24AAAAAHgA4 +QAEAAAAWAAAAc2ltcHNvbkB3b3JsZC5zdGQuY29tAAAAAgH7PwEAAABRAAAAAAAAANynQMjAQhAa +tLkIACsv4YIBAAAAAAAAAC9PPUNPTVBVV0FSRS9PVT1OVU1FR0EgTEFCL0NOPVJFQ0lQSUVOVFMv +Q049TVNJTVBTT04AAAAAHgD6PwEAAAAOAAAAU2ltcHNvbiwgTWFyawAAAB4AOUABAAAACQAAAE1T +SU1QU09OAAAAAEAABzCqQ5DG7hW/AUAACDCiG/TJ7hW/AR4APQABAAAAAQAAAAAAAAAeAB0OAQAA +AAkAAABvbmUtZmlsZQAAAAACAdQ/AQAAAAAAAAAeADUQAQAAADIAAAA8MTQzNDEuMTc0ODguNjMx +MDUzLjY5NTQ1NEBsb2NhbGhvc3QubG9jYWxkb21haW4+AAAAHgA5EAEAAAABAAAAAAAAAB4ANhAB +AAAAAQAAAAAAAAACAWhAAQAAAAAAAAACAWlAAQAAAAAAAAADADYAAAAAAAsAKQAAAAAACwAjAAAA +AAADAAYQAAAAAAMABxAAAAAAAwAQEAAAAAADABEQAAAAAB4ACBABAAAAAQAAAAAAAAACAX8AAQAA +ADIAAAA8MTQzNDEuMTc0ODguNjMxMDUzLjY5NTQ1NEBsb2NhbGhvc3QubG9jYWxkb21haW4+AAAA +nx0CApAGAA4AAAABAP////8gACAAAAAAAD0EAhKAAwAOAAAAzwcKAA0AFgAxAC4AAwBlAQITgAMA +DgAAAM8HCgANABYAMQAuAAMAZQECEIABAAgAAABBVVRIT1JTACYCAg+ABgD0AAAACiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIEF1dGhvcnMgb2YgdG5lZgogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICA9PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIAoqIE1hcmsgU2ltcHNvbiAgICAgICAgICAgIGRhbW5lZEB3b3JsZC5zdGQuY29tCgpN +YW55IHRoYW5rIGdvIHRvIHRoZSBvcmlnaW5hbCBhdXRob3I6IFRob21hcyBCb2xsICh0YkBib2xs +LmNoKS4KCtM5AgWQBgDIAAAADAAAAAMAIQ4AAAAAAwALN/////8DACAONAEAAAMA9w8AAAAAQAAH +MFDhjcbuFb8BQAAIMFDhjcbuFb8BAwAFNwEAAAAeAAc3AQAAAAgAAABBVVRIT1JTAB4AATABAAAA +FgAAAEFVVEhPUlMgZmlsZSBmb3IgdG5lZgAAAB4ADjcBAAAAGQAAAGFwcGxpY2F0aW9uL29jdGV0 +LXN0cmVhbQAAAAADABA3AAAAAAIB+Q8BAAAAEAAAAB8Bf8/QgdMRp6UACMcbyo1kLA== + +--Boundary-00=_zmUeKB+A8hGfCVZ-- diff --git a/plugins/messageviewer/bodypartformatter/autotests/data/tnef-one-file.mbox.html b/plugins/messageviewer/bodypartformatter/autotests/data/tnef-one-file.mbox.html new file mode 100644 --- /dev/null +++ b/plugins/messageviewer/bodypartformatter/autotests/data/tnef-one-file.mbox.html @@ -0,0 +1,51 @@ + + + + + + + + + + + +
winmail.dat
TNEF file containing a single message
+
+ AUTHORS file for tnef +
+
+
+ + + + + + + +
winmail.dat
TNEF file containing a single message
+
+ AUTHORS file for tnef +
+
+
+
+ +
+ +
+
+
some body text
+
+
+
+
+
+
+ winmail.dat +
+
TNEF file containing a single message
+
+
+
+ + diff --git a/plugins/messageviewer/bodypartformatter/autotests/data/tnef-two-files.mbox b/plugins/messageviewer/bodypartformatter/autotests/data/tnef-two-files.mbox new file mode 100644 --- /dev/null +++ b/plugins/messageviewer/bodypartformatter/autotests/data/tnef-two-files.mbox @@ -0,0 +1,88 @@ +From: sender@example.com +To: receiver@example.com +Subject: two file TNEF attachment +Date: Wed, 5 Aug 2009 10:58:27 +0200 +MIME-Version: 1.0 +Content-Type: Multipart/Mixed; + boundary="Boundary-00=_zmUeKB+A8hGfCVZ" + + +--Boundary-00=_zmUeKB+A8hGfCVZ +Content-Type: text/plain; + charset="iso-8859-15" +Content-Transfer-Encoding: 7bit +Content-Disposition: inline + +some body text + +--Boundary-00=_zmUeKB+A8hGfCVZ +Content-Type: application/ms-tnef; + name="winmail.dat" +Content-Transfer-Encoding: base64 +Content-Description: TNEF file containing a two attachments +Content-Disposition: inline + +eJ8+IjcCAQaQCAAEAAAAAAABAAEAAQeQBgAIAAAA5AQAAAAAAADoAAEIgAcAGAAAAElQTS5NaWNy +b3NvZnQgTWFpbC5Ob3RlADEIAQmAAQAhAAAANDAwMTdGQ0ZEMDgxRDMxMUE3QTUwMDA4QzcxQkNB +OEQAJAcBBgAHABgAAABJUE0uTWljcm9zb2Z0IE1haWwuTm90ZQAxCAEggAMADgAAAM8HCgANABYA +MwAzAAMAbAEBBYADAA4AAADPBwoADQAWADEACQADAEABAQSAAQAKAAAAdHdvIGZpbGVzAI0DAQ2A +BAACAAAAAgACAAEDkAYAuAUAADgAAAADAP0/5AQAAEAAOQCAgBGw7hW/AR4AMUABAAAAFgAAAHNp +bXBzb25Ad29ybGQuc3RkLmNvbQAAAAMAGkAAAAEAHgAwQAEAAAAWAAAAc2ltcHNvbkB3b3JsZC5z +dGQuY29tAAAAAwAZQAAAAQADAN4/r28AAB4AcAABAAAACgAAAHR3byBmaWxlcwAAAAIBcQABAAAA +FgAAAAG/Fe8OHc9/AUGB0BHTp6UACMcbyo0AAB4A/lcBAAAAFQAAAE5BSVNDQU5ORURQT1NUT0ZG +SUNFAAAAAAsA8hABAAAAAgHzPwEAAAAAAAAAAgH0PwEAAAAAAAAAAgE/AAEAAABRAAAAAAAAANyn +QMjAQhAatLkIACsv4YIBAAAAAAAAAC9PPUNPTVBVV0FSRS9PVT1OVU1FR0EgTEFCL0NOPVJFQ0lQ +SUVOVFMvQ049TVNJTVBTT04AAAAAHgB1AAEAAAAFAAAAU01UUAAAAAAeAHYAAQAAABgAAABtYXJr +LnNpbXBzb25AbnVtZWdhLmNvbQAeAEAAAQAAAA4AAABTaW1wc29uLCBNYXJrAAAAHgA0QAEAAAAJ +AAAATVNJTVBTT04AAAAAAgFRAAEAAAA4AAAARVg6L089Q09NUFVXQVJFL09VPU5VTUVHQSBMQUIv +Q049UkVDSVBJRU5UUy9DTj1NU0lNUFNPTgADABtAAAAAAAIBQwABAAAAUQAAAAAAAADcp0DIwEIQ +GrS5CAArL+GCAQAAAAAAAAAvTz1DT01QVVdBUkUvT1U9TlVNRUdBIExBQi9DTj1SRUNJUElFTlRT +L0NOPU1TSU1QU09OAAAAAB4AdwABAAAABQAAAFNNVFAAAAAAHgB4AAEAAAAYAAAAbWFyay5zaW1w +c29uQG51bWVnYS5jb20AHgBEAAEAAAAOAAAAU2ltcHNvbiwgTWFyawAAAB4ANUABAAAACQAAAE1T +SU1QU09OAAAAAAIBUgABAAAAOAAAAEVYOi9PPUNPTVBVV0FSRS9PVT1OVU1FR0EgTEFCL0NOPVJF +Q0lQSUVOVFMvQ049TVNJTVBTT04AAwAcQAAAAAALAFcAAQAAAAsAWAAAAAAACwBZAAEAAAACAUcA +AQAAAAAAAAACAfk/AQAAAEAAAAAAAAAAgSsfpL6jEBmdbgDdAQ9UAgAAAQBNYXJrIFNpbXBzb24A +U01UUABzaW1wc29uQHdvcmxkLnN0ZC5jb20AHgD4PwEAAAANAAAATWFyayBTaW1wc29uAAAAAB4A +OEABAAAAFgAAAHNpbXBzb25Ad29ybGQuc3RkLmNvbQAAAAIB+z8BAAAAUQAAAAAAAADcp0DIwEIQ +GrS5CAArL+GCAQAAAAAAAAAvTz1DT01QVVdBUkUvT1U9TlVNRUdBIExBQi9DTj1SRUNJUElFTlRT +L0NOPU1TSU1QU09OAAAAAB4A+j8BAAAADgAAAFNpbXBzb24sIE1hcmsAAAAeADlAAQAAAAkAAABN +U0lNUFNPTgAAAABAAAcwuPYdDu8VvwFAAAgwmMHyEO8VvwEeAD0AAQAAAAEAAAAAAAAAHgAdDgEA +AAAKAAAAdHdvIGZpbGVzAAAAAgHUPwEAAAAAAAAAHgA1EAEAAAAyAAAAPDE0MzQxLjE3NTczLjU2 +MDc2MS4zNjg1MTJAbG9jYWxob3N0LmxvY2FsZG9tYWluPgAAAB4AORABAAAAAQAAAAAAAAAeADYQ +AQAAAAEAAAAAAAAAAgFoQAEAAAAAAAAAAgFpQAEAAAAAAAAAAwA2AAAAAAALACkAAAAAAAsAIwAA +AAAAAwAGEAAAAAADAAcQAAAAAAMAEBAAAAAAAwAREAAAAAAeAAgQAQAAAAEAAAAAAAAAAgF/AAEA +AAAyAAAAPDE0MzQxLjE3NTczLjU2MDc2MS4zNjg1MTJAbG9jYWxob3N0LmxvY2FsZG9tYWluPgAA +AFUdAgKQBgAOAAAAAQD/////IAAgAAAAAAA9BAISgAMADgAAAM8HCgANABYAMwAuAAMAZwECE4AD +AA4AAADPBwoADQAWADMALgADAGcBAhCAAQAIAAAAQVVUSE9SUwAmAgIPgAYA9AAAAAogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICBBdXRob3JzIG9mIHRuZWYKICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgPT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAKKiBNYXJrIFNpbXBzb24gICAgICAgICAgICBkYW1uZWRAd29ybGQuc3RkLmNvbQoK +TWFueSB0aGFuayBnbyB0byB0aGUgb3JpZ2luYWwgYXV0aG9yOiBUaG9tYXMgQm9sbCAodGJAYm9s +bC5jaCkuCgrTOQIFkAYAyAAAAAwAAAADACEOAAAAAAMACzf/////AwAgDjQBAAADAPcPAAAAAEAA +BzAwchsO7xW/AUAACDAwchsO7xW/AQMABTcBAAAAHgAHNwEAAAAIAAAAQVVUSE9SUwAeAAEwAQAA +ABYAAABBVVRIT1JTIGZpbGUgZm9yIHRuZWYAAAAeAA43AQAAABkAAABhcHBsaWNhdGlvbi9vY3Rl +dC1zdHJlYW0AAAAAAwAQNwAAAAACAfkPAQAAABAAAAA+AX/P0IHTEaelAAjHG8qNEykCApAGAA4A +AAABAP////8gACAAAAAAAD0EAhKAAwAOAAAAzwcKAA0AFgAzAC4AAwBnAQITgAMADgAAAM8HCgAN +ABYAMwAuAAMAZwECEIABAAcAAABSRUFETUUArgECD4AGAH0DAAAKICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBUTkVGCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +PT09PQoKVE5FRiBpcyBhIHByb2dyYW0gZm9yIHVucGFja2luZyBNSU1FIGF0dGFjaG1lbnRzIG9m +IHR5cGUKImFwcGxpY2F0aW9uL21zLXRuZWYiLiBUaGlzIGlzIGEgTWljcm9zb2Z0IG9ubHkgYXR0 +YWNobWVudC4KCkR1ZSB0byB0aGUgcHJvbGlmZXJhdGlvbiBvZiBNaWNyb3NvZnQgT3V0bG9vayBh +bmQgRXhjaGFuZ2UgbWFpbCBzZXJ2ZXJzLAptb3JlIGFuZCBtb3JlIG1haWwgaXMgZW5jYXBzdWxh +dGVkIGludG8gdGhpcyBmb3JtYXQuCgpUaGUgVE5FRiBwcm9ncmFtIGFsbG93cyBvbmUgdG8gdW5h +cGNrIHRoZSBhdHRhY2htZW50cyB3aGljaCB3ZXJlCmVuY2Fwc3VsYXRlZCBpbnRvIHRlaCBUTkVG +IGF0dGFjaG1lbnQuICBUaHVzIGFsbGV2aWF0aW5nIHRoZSBuZWVkIHRvIHVzZQpNaWNyb3NvZnQg +T3V0bG9vayB0byB2aWV3IHRoZSBhdHRhY2htZW50LgoKVE5FRiBpcyBtYWlubHkgdGVzdHNlZCBh +bmQgdXNlZCBvbiBHTlUvTGludXggYW5kIENZR1dJTiBzeXN0ZW1zLiAgSXQKJ3Nob3VsZCcgd29y +ayBvbiBvdGhlciBVTklYIGFuZCBVTklYLWxpa2Ugc3lzdGVtcy4KClNlZSB0aGUgZmlsZSBDT1BZ +SU5HIGZvciBjb3B5cmlnaHQgYW5kIHdhcnJhbnR5IGluZm9ybWF0aW9uLgoKU2VlIHRoZSBmaWxl +IElOU1RBTEwgZm9yIGluc3RydWN0aW9ucyBvbiBpbnN0YWxsaW5nIFRORUYuICBUaGUgc2hvcnQg +Zm9ybQpmb3IgaW5zdGFsbGF0aW9uIGlzIHRoZSBzdGFuZGFyZDogCgogICAgdGFyIHh6dmYgdG5l +Zi14LnkudGFyLmd6CiAgICBjZCB0bmVmLXgueQogICAgLi9jb25maWd1cmUgCiAgICBtYWtlCiAg +ICBtYWtlIGluc3RhbGwKCgoKChMiAgWQBgDIAAAADAAAAAMAIQ4BAAAAAwALN/////8DACAOvQMA +AAMA9w8AAAAAQAAHMDDjHQ7vFb8BQAAIMDDjHQ7vFb8BAwAFNwEAAAAeAAc3AQAAAAcAAABSRUFE +TUUAAB4AATABAAAAFQAAAFJFQURNRSBmaWxlIGZvciB0bmVmAAAAAB4ADjcBAAAAGQAAAGFwcGxp +Y2F0aW9uL29jdGV0LXN0cmVhbQAAAAADABA3AQAAAAIB+Q8BAAAAEAAAAD8Bf8/QgdMRp6UACMcb +yo2VKQ== + +--Boundary-00=_zmUeKB+A8hGfCVZ-- diff --git a/plugins/messageviewer/bodypartformatter/autotests/data/tnef-two-files.mbox.html b/plugins/messageviewer/bodypartformatter/autotests/data/tnef-two-files.mbox.html new file mode 100644 --- /dev/null +++ b/plugins/messageviewer/bodypartformatter/autotests/data/tnef-two-files.mbox.html @@ -0,0 +1,59 @@ + + + + + + + + + + + +
winmail.dat
TNEF file containing a two attachments
+
+ AUTHORS file for tnef +
+
+
+ README file for tnef +
+
+
+ + + + + + + +
winmail.dat
TNEF file containing a two attachments
+
+ AUTHORS file for tnef +
+
+
+ README file for tnef +
+
+
+
+ +
+ +
+
+
some body text
+
+
+
+
+
+
+ winmail.dat +
+
TNEF file containing a two attachments
+
+
+
+ + diff --git a/plugins/messageviewer/bodypartformatter/autotests/rendertest.h b/plugins/messageviewer/bodypartformatter/autotests/rendertest.h new file mode 100644 --- /dev/null +++ b/plugins/messageviewer/bodypartformatter/autotests/rendertest.h @@ -0,0 +1,34 @@ +/* + Copyright (c) 2010 Volker Krause + Copyright (c) 2016 Sandro Knauß + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + This library is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public + License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. +*/ +#ifndef RENDERTEST_H +#define RENDERTEST_H + +#include + +class RenderTest : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void testRender_data(); + void testRender(); +}; + +#endif \ No newline at end of file diff --git a/plugins/messageviewer/bodypartformatter/autotests/rendertest.cpp b/plugins/messageviewer/bodypartformatter/autotests/rendertest.cpp new file mode 100644 --- /dev/null +++ b/plugins/messageviewer/bodypartformatter/autotests/rendertest.cpp @@ -0,0 +1,123 @@ +/* + Copyright (c) 2010 Volker Krause + Copyright (c) 2016 Sandro Knauß + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + This library is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public + License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. +*/ + +#include "rendertest.h" + +#include "testobjecttreesource.h" + +#include +#include +#include + +#include +#include +#include +#include + +void RenderTest::testRender_data() +{ + QTest::addColumn("mailFileName"); + QTest::addColumn("referenceFileName"); + QTest::addColumn("outFileName"); + + QDir dir(QStringLiteral(MAIL_DATA_DIR)); + foreach (const QString &file, dir.entryList(QStringList(QLatin1String("*.mbox")), QDir::Files | QDir::Readable | QDir::NoSymLinks)) { + if (!QFile::exists(dir.path() + QLatin1Char('/') + file + QLatin1String(".html"))) { + continue; + } + QTest::newRow(file.toLatin1()) << QString(dir.path() + QLatin1Char('/') + file) << QString(dir.path() + QLatin1Char('/') + file + QLatin1String(".html")) << QString(file + QLatin1String(".out")); + } +} + +void RenderTest::testRender() +{ + QFETCH(QString, mailFileName); + QFETCH(QString, referenceFileName); + QFETCH(QString, outFileName); + + const QString htmlFileName = outFileName + QLatin1String(".html"); + + // load input mail + QFile mailFile(mailFileName); + QVERIFY(mailFile.open(QIODevice::ReadOnly)); + const QByteArray mailData = KMime::CRLFtoLF(mailFile.readAll()); + QVERIFY(!mailData.isEmpty()); + KMime::Message::Ptr msg(new KMime::Message); + msg->setContent(mailData); + msg->parse(); + + // render the mail + MessageViewer::FileHtmlWriter fileWriter(outFileName); + QImage paintDevice; + MessageViewer::CSSHelperBase cssHelper(&paintDevice); + MessageViewer::NodeHelper nodeHelper; + TestObjectTreeSource testSource(&fileWriter, &cssHelper); + MessageViewer::ObjectTreeParser otp(&testSource, &nodeHelper); + + fileWriter.begin(QString()); + fileWriter.queue(QStringLiteral("\n" + "\n" + "\n")); + + otp.parseObjectTree(msg.data()); + + fileWriter.queue(QStringLiteral("")); + fileWriter.flush(); + fileWriter.end(); + + QVERIFY(QFile::exists(outFileName)); + + // validate xml and pretty-print for comparisson + // TODO add proper cmake check for xmllint and diff + QStringList args = QStringList() + << QStringLiteral("--format") + << QStringLiteral("--encode") + << QStringLiteral("UTF8") + << QStringLiteral("--output") + << htmlFileName + << outFileName; + QCOMPARE(QProcess::execute(QLatin1String("xmllint"), args), 0); + + // get rid of system dependent or random paths + { + QFile f(htmlFileName); + QVERIFY(f.open(QIODevice::ReadOnly)); + QString content = QString::fromUtf8(f.readAll()); + f.close(); + content.replace(QRegExp(QLatin1String("\"file:[^\"]*[/(?:%2F)]([^\"/(?:%2F)]*)\"")), QStringLiteral("\"file:\\1\"")); + QVERIFY(f.open(QIODevice::WriteOnly | QIODevice::Truncate)); + f.write(content.toUtf8()); + f.close(); + } + + // compare to reference file + args = QStringList() + << QStringLiteral("-u") + << referenceFileName + << htmlFileName; + QProcess proc; + proc.setProcessChannelMode(QProcess::ForwardedChannels); + proc.start(QStringLiteral("diff"), args); + QVERIFY(proc.waitForFinished()); + + QCOMPARE(proc.exitCode(), 0); +} + +QTEST_MAIN(RenderTest) \ No newline at end of file diff --git a/plugins/messageviewer/bodypartformatter/autotests/testobjecttreesource.h b/plugins/messageviewer/bodypartformatter/autotests/testobjecttreesource.h new file mode 100644 --- /dev/null +++ b/plugins/messageviewer/bodypartformatter/autotests/testobjecttreesource.h @@ -0,0 +1,124 @@ +/* + Copyright (C) 2010 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com + Copyright (c) 2010 Leo Franchi + + This library is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published by + the Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + This library is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public + License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. +*/ + +#ifndef MESSAGECORE_TESTS_UTIL_H +#define MESSAGECORE_TESTS_UTIL_H + +#include +#include +#include + +class TestObjectTreeSource : public MessageViewer::ObjectTreeSourceIf +{ +public: + TestObjectTreeSource(MessageViewer::HtmlWriter *writer, + MessageViewer::CSSHelperBase *cssHelper) + : mWriter(writer) + , mCSSHelper(cssHelper) + , mHtmlLoadExternal(false) + , mHtmlMail(true) + { + } + + MessageViewer::HtmlWriter *htmlWriter() Q_DECL_OVERRIDE + { + return mWriter; + } + + MessageViewer::CSSHelperBase *cssHelper() Q_DECL_OVERRIDE + { + return mCSSHelper; + } + + bool htmlLoadExternal() const Q_DECL_OVERRIDE + { + return mHtmlLoadExternal; + } + + void setHtmlLoadExternal(bool loadExternal) + { + mHtmlLoadExternal = loadExternal; + } + + bool htmlMail() const Q_DECL_OVERRIDE + { + return mHtmlMail; + } + + void setHtmlMail(bool htmlMail) + { + mHtmlMail = htmlMail; + } + + bool decryptMessage() const Q_DECL_OVERRIDE + { + return false; + } + bool showSignatureDetails() const Q_DECL_OVERRIDE + { + return false; + } + void setHtmlMode(MessageViewer::Util::HtmlMode mode) Q_DECL_OVERRIDE + { + Q_UNUSED(mode) + } + int levelQuote() const Q_DECL_OVERRIDE + { + return false; + } + const QTextCodec *overrideCodec() Q_DECL_OVERRIDE + { + return 0; + } + QString createMessageHeader(KMime::Message *message) Q_DECL_OVERRIDE + { + Q_UNUSED(message); + return QString(); + } + const MessageViewer::AttachmentStrategy *attachmentStrategy() Q_DECL_OVERRIDE + { + return MessageViewer::AttachmentStrategy::smart(); + } + QObject *sourceObject() Q_DECL_OVERRIDE + { + return 0; + } + + bool autoImportKeys() const Q_DECL_OVERRIDE + { + return false; + } + bool showEmoticons() const Q_DECL_OVERRIDE + { + return false; + } + bool showExpandQuotesMark() const Q_DECL_OVERRIDE + { + return false; + } + +private: + MessageViewer::HtmlWriter *mWriter; + MessageViewer::CSSHelperBase *mCSSHelper; + bool mHtmlLoadExternal; + bool mHtmlMail; +}; + +#endif