summaryrefslogtreecommitdiff
path: root/src/tests
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/CMakeLists.txt144
-rw-r--r--src/tests/HTTP_tests.html601
-rw-r--r--src/tests/findbar_test.cpp76
-rw-r--r--src/tests/link_test.html7
-rw-r--r--src/tests/mainview_test.cpp217
-rw-r--r--src/tests/mainwindow_test.cpp65
-rw-r--r--src/tests/networkaccessmanager_test.cpp67
-rw-r--r--src/tests/protocolhandler_test.cpp130
-rw-r--r--src/tests/sessionmanager_test.cpp69
-rw-r--r--src/tests/tabbar_test.cpp135
-rw-r--r--src/tests/urlbar_test.cpp74
-rw-r--r--src/tests/walletbar_test.cpp69
-rw-r--r--src/tests/webpage_test.cpp112
-rw-r--r--src/tests/websnap_test.cpp69
-rw-r--r--src/tests/webtab_test.cpp68
-rw-r--r--src/tests/webview_test.cpp71
16 files changed, 1783 insertions, 191 deletions
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
index 5df23e24..3bc9a27f 100644
--- a/src/tests/CMakeLists.txt
+++ b/src/tests/CMakeLists.txt
@@ -2,16 +2,34 @@
SET( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} )
-INCLUDE_DIRECTORIES ( ${CMAKE_CURRENT_BINARY_DIR}/..
+INCLUDE_DIRECTORIES ( ${CMAKE_CURRENT_BINARY_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/..
+ ${CMAKE_CURRENT_SOURCE_DIR}/../adblock
+ ${CMAKE_CURRENT_SOURCE_DIR}/../bookmarks
+ ${CMAKE_CURRENT_SOURCE_DIR}/../history
+ ${CMAKE_CURRENT_SOURCE_DIR}/../settings
+ ${CMAKE_CURRENT_SOURCE_DIR}/../urlbar
${KDE4_INCLUDES}
${QT4_INCLUDES}
)
-##### ------------- tabbar test
+##### ------------- findbar test
-kde4_add_unit_test( tabbar_test tabbar_test.cpp )
+kde4_add_unit_test( findbar_test findbar_test.cpp )
-target_link_libraries( tabbar_test
+target_link_libraries( findbar_test
+ kdeinit_rekonq
+ ${KDE4_KDECORE_LIBS}
+ ${KDE4_KDEUI_LIBS}
+ ${QT_QTGUI_LIBRARY}
+ ${QT_QTTEST_LIBRARY}
+)
+
+##### ------------- mainwindow test
+
+kde4_add_unit_test( mainwindow_test mainwindow_test.cpp )
+
+target_link_libraries( mainwindow_test
kdeinit_rekonq
${KDE4_KDECORE_LIBS}
${KDE4_KDEUI_LIBS}
@@ -29,4 +47,122 @@ target_link_libraries( mainview_test
${QT_QTTEST_LIBRARY}
)
+##### ------------- networkaccessmanager test
+
+kde4_add_unit_test( networkaccessmanager_test networkaccessmanager_test.cpp )
+
+target_link_libraries( networkaccessmanager_test
+ kdeinit_rekonq
+ ${KDE4_KDECORE_LIBS}
+ ${KDE4_KDEUI_LIBS}
+ ${QT_QTTEST_LIBRARY}
+)
+
+##### ------------- protocolhandler test
+
+kde4_add_unit_test( protocolhandler_test protocolhandler_test.cpp )
+
+target_link_libraries( protocolhandler_test
+ kdeinit_rekonq
+ ${KDE4_KDECORE_LIBS}
+ ${KDE4_KDEUI_LIBS}
+ ${KDE4_KDEWEBKIT_LIBS}
+ ${QT_QTNETWORK_LIBRARY}
+ ${QT_QTTEST_LIBRARY}
+)
+
+##### ------------- sessionmanager test
+
+kde4_add_unit_test( sessionmanager_test sessionmanager_test.cpp )
+
+target_link_libraries( sessionmanager_test
+ kdeinit_rekonq
+ ${KDE4_KDECORE_LIBS}
+ ${KDE4_KDEUI_LIBS}
+ ${QT_QTTEST_LIBRARY}
+)
+
+##### ------------- tabbar test
+
+kde4_add_unit_test( tabbar_test tabbar_test.cpp )
+
+target_link_libraries( tabbar_test
+ kdeinit_rekonq
+ ${KDE4_KDECORE_LIBS}
+ ${KDE4_KDEUI_LIBS}
+ ${QT_QTTEST_LIBRARY}
+)
+
+##### ------------- walletbar test
+
+kde4_add_unit_test( walletbar_test walletbar_test.cpp )
+
+target_link_libraries( walletbar_test
+ kdeinit_rekonq
+ ${KDE4_KDECORE_LIBS}
+ ${KDE4_KDEUI_LIBS}
+ ${KDE4_KDEWEBKIT_LIBS}
+ ${QT_QTTEST_LIBRARY}
+)
+
+##### ------------- webpage test
+
+kde4_add_unit_test( webpage_test webpage_test.cpp )
+
+target_link_libraries( webpage_test
+ kdeinit_rekonq
+ ${KDE4_KDECORE_LIBS}
+ ${KDE4_KDEUI_LIBS}
+ ${KDE4_KDEWEBKIT_LIBS}
+ ${QT_QTTEST_LIBRARY}
+)
+
+##### ------------- websnap test
+
+kde4_add_unit_test( websnap_test websnap_test.cpp )
+
+target_link_libraries( websnap_test
+ kdeinit_rekonq
+ ${KDE4_KDECORE_LIBS}
+ ${KDE4_KDEUI_LIBS}
+ ${KDE4_KDEWEBKIT_LIBS}
+ ${QT_QTTEST_LIBRARY}
+)
+
+##### ------------- webtab test
+
+kde4_add_unit_test( webtab_test webtab_test.cpp )
+
+target_link_libraries( webtab_test
+ kdeinit_rekonq
+ ${KDE4_KDECORE_LIBS}
+ ${KDE4_KDEUI_LIBS}
+ ${KDE4_KDEWEBKIT_LIBS}
+ ${QT_QTTEST_LIBRARY}
+)
+
+##### ------------- webview test
+
+kde4_add_unit_test( webview_test webview_test.cpp )
+
+target_link_libraries( webview_test
+ kdeinit_rekonq
+ ${KDE4_KDECORE_LIBS}
+ ${KDE4_KDEUI_LIBS}
+ ${KDE4_KDEWEBKIT_LIBS}
+ ${QT_QTTEST_LIBRARY}
+)
+
+##### ------------- urlbar test
+
+kde4_add_unit_test( urlbar_test urlbar_test.cpp )
+
+target_link_libraries( urlbar_test
+ kdeinit_rekonq
+ ${KDE4_KDECORE_LIBS}
+ ${KDE4_KDEUI_LIBS}
+ ${KDE4_KDEWEBKIT_LIBS}
+ ${QT_QTTEST_LIBRARY}
+)
+
############################################################
diff --git a/src/tests/HTTP_tests.html b/src/tests/HTTP_tests.html
new file mode 100644
index 00000000..7a5ac00d
--- /dev/null
+++ b/src/tests/HTTP_tests.html
@@ -0,0 +1,601 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Test Cases for HTTP Content-Disposition header and RFC 2231/2047 Encoding</title>
+
+<style type="text/css">
+a.plain {
+ color: black;
+ text-decoration: none;
+}
+body {
+ color: black;
+ font-family: verdana, helvetica, arial, sans-serif;
+ font-size: 10pt;
+ margin-left: 2em;
+}
+h1 {
+ font-size: 18pt;
+}
+h2 {
+ font-size: 14pt;
+}
+h3 {
+ font-size: 12pt;
+}
+h4 {
+ font-size: 10pt;
+}
+pre {
+ border-style: dotted;
+ border-width: 1px;
+ background-color: #f0f0f0;
+}
+pre.invalid {
+ border-style: dotted;
+ border-width: 1px;
+ background-color: #ff8080;
+}
+table {
+ font-size: 9pt;
+}
+table.aside {
+ float: right;
+ margin: 4px;
+ border-style: dotted;
+ border-width: 1px;
+ background-color: #f0f0f0;
+}
+q {
+ font-style: italic;
+}
+th {
+ text-align: right;
+ vertical-align: top;
+}
+h2, h3, h4 {
+ clear: both;
+}
+.fail {
+ background-color: #ffd0d0;
+}
+.warn {
+ background-color: #ffff80;
+}
+.pass {
+ background-color: #d0ffd0;
+}
+.unsupported {
+ background-color: #e0e0e0;
+}
+
+</style>
+
+</head>
+
+<body>
+
+<h1>Test Cases for HTTP Content-Disposition header and RFC 2231/2047 Encoding</h1>
+
+
+<h2>Test Cases</h2><div id="c-d-inline"><h3><a href="#c-d-inline" class="plain">Content-Disposition: Disposition-Type Inline</a></h3>
+ <p>
+ Various tests relating to the "inline" disposition type, see
+ <a href="http://greenbytes.de/tech/webdav/rfc2183.html#rfc.section.2.1">Section 2.1 of RFC 2183</a>.
+ </p>
+ <div id="inlonly"><h4><a href="#inlonly" class="plain">inlonly</a>
+ [<a href="http://greenbytes.de/tech/tc2231/inlonly.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>inline</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p>'inline' only</p><p><em>This should be equivalent to not including the header at all.</em></p></div><div id="inlwithasciifilename"><h4><a href="#inlwithasciifilename" class="plain">inlwithasciifilename</a>
+ [<a href="http://greenbytes.de/tech/tc2231/inlwithasciifilename.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>inline; filename="<b>foo.html</b>"</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass
+ (uses the filename in subsequent 'save' operation)
+ </td></tr><tr class="pass"><td>MSIE8</td><td>pass
+ (filename information not used)
+ </td></tr><tr class="pass"><td>Op10</td><td>pass
+ (filename information not used)
+ </td></tr><tr class="pass"><td>Saf4</td><td>pass
+ (filename information not used)
+ </td></tr><tr class="pass"><td>Konq</td><td>pass
+ (filename information not used)
+ </td></tr><tr class="pass"><td>Chrome</td><td>pass
+ (filename information not used)
+ </td></tr></tbody></table><p>
+ 'inline', specifying a filename of <code>foo.html</code>
+ </p><p><em>
+ Some UAs use this filename in a subsequent "save" operation.
+ </em></p></div><div id="inlwithasciifilenamepdf"><h4><a href="#inlwithasciifilenamepdf" class="plain">inlwithasciifilenamepdf</a>
+ [<a href="http://greenbytes.de/tech/tc2231/inlwithasciifilenamepdf.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>inline; filename="<b>foo.pdf</b>"</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass
+ (filename information not used)
+ </td></tr><tr class="pass"><td>MSIE8</td><td>pass
+ (filename information not used)
+ </td></tr><tr class="pass"><td>Op10</td><td>pass
+ (filename information not used)
+ </td></tr><tr class="pass"><td>Saf4</td><td>pass
+ (filename information not used)
+ </td></tr><tr class="pass"><td>Konq</td><td>pass
+ (filename information not used)
+ </td></tr><tr class="pass"><td>Chrome</td><td>pass
+ (filename information not used)
+ </td></tr></tbody></table><p>
+ 'inline', specifying a filename of <code>foo.pdf</code>
+ </p><p><em>
+ Some UAs use this filename in a subsequent "save" operation.
+ This variation of the test checks whether whatever handles PDF display
+ receives the filename information, and acts upon it
+ (this was tested with the latest Acrobat Reader plugin).
+ </em></p></div></div><div id="c-d-attachment"><h3><a href="#c-d-attachment" class="plain">Content-Disposition: Disposition-Type Attachment</a></h3>
+ <p>
+ Various tests relating to the "attchment" disposition type, see
+ <a href="http://greenbytes.de/tech/webdav/rfc2183.html#rfc.section.2.2">Section 2.2 of RFC 2183</a>.
+ </p>
+ <div id="attonly"><h4><a href="#attonly" class="plain">attonly</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attonly.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p>'attachment' only</p><p><em>UA should offer to download the resource.</em></p></div><div id="attonlyucase"><h4><a href="#attonlyucase" class="plain">attonlyucase</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attonlyucase.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>ATTACHMENT</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="fail"><td>Konq</td><td>fail</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p>'ATTACHMENT' only</p><p><em>UA should offer to download the resource.</em></p></div><div id="attwithasciifilename"><h4><a href="#attwithasciifilename" class="plain">attwithasciifilename</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithasciifilename.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename="<b>foo.html</b>"</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo.html</code>
+ </p><p><em>UA should offer to download the resource as "foo.html".</em></p></div><div id="attwithasciifnescapedchar"><h4><a href="#attwithasciifnescapedchar" class="plain">attwithasciifnescapedchar</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithasciifnescapedchar.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename="<b>f\oo.html</b>"</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail
+ (apparently does not treat the backslash as escape character, replaces it with '_')
+ </td></tr><tr class="fail"><td>MSIE8</td><td>fail
+ (apparently does not treat the backslash as escape character, replaces it with '_')
+ </td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="fail"><td>Saf4</td><td>fail
+ (apparently does not treat the backslash as escape character, replaces it with '-')
+ </td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="fail"><td>Chrome</td><td>fail
+ (saves "oo.html" (what's going on here?))
+ </td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>f\oo.html</code> (the first 'o' being escaped)
+ </p><p><em>UA should offer to download the resource as "foo.html".</em></p></div><div id="attwithfilenameandextparam"><h4><a href="#attwithfilenameandextparam" class="plain">attwithfilenameandextparam</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithfilenameandextparam.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; foo="bar"; filename="<b>foo.html</b>"</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo.html</code>
+ and an extension parameter "foo" which should be ignored
+ (see <a href="http://greenbytes.de/tech/webdav/rfc2183.html#rfc.section.2.8">Section 2.8 of RFC 2183</a>.).
+ </p><p><em>UA should offer to download the resource as "foo.html".</em></p></div><div id="attwithasciifilenameucase"><h4><a href="#attwithasciifilenameucase" class="plain">attwithasciifilenameucase</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithasciifilenameucase.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; FILENAME="<b>foo.html</b>"</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="fail"><td>Konq</td><td>fail
+ (filename parameter is ignored)
+ </td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo.html</code>
+ </p><p><em>UA should offer to download the resource as "foo.html".</em></p></div><div id="attwithasciifilenamenq"><h4><a href="#attwithasciifilenamenq" class="plain">attwithasciifilenamenq</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithasciifilenamenq.asis">TEST</a>]
+ </h4><pre class="invalid"><b>Content-Disposition: </b>attachment; filename=<b>foo.html</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="warn"><td>FF3</td><td>warn
+ (accepts the unquoted value)
+ </td></tr><tr class="warn"><td>MSIE8</td><td>warn
+ (accepts the unquoted value)
+ </td></tr><tr class="warn"><td>Op10</td><td>warn
+ (accepts the unquoted value)
+ </td></tr><tr class="warn"><td>Saf4</td><td>warn
+ (accepts the unquoted value)
+ </td></tr><tr class="warn"><td>Konq</td><td>warn
+ (accepts the unquoted value)
+ </td></tr><tr class="warn"><td>Chrome</td><td>warn
+ (accepts the unquoted value)
+ </td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo.html</code>, but missing
+ the quotes.
+ </p><p><em>This is invalid according to <a href="http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.19.5.1">Section 19.5.1 of RFC2616</a>, so UAs should
+ ignore it.</em></p></div><div id="attwithisofnplain"><h4><a href="#attwithisofnplain" class="plain">attwithisofnplain</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithisofnplain.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename="<b>foo-ä.html</b>"</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo-ä.html</code>, using plain ISO-8859-1
+ </p><p><em>UA should offer to download the resource as "foo-ä.html".</em></p></div><div id="attwithutf8fnplain"><h4><a href="#attwithutf8fnplain" class="plain">attwithutf8fnplain</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithutf8fnplain.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename="<b>foo-ä.html</b>"</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail
+ (decodes as UTF-8)
+ </td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="fail"><td>Chrome</td><td>fail
+ (decodes as UTF-8)
+ </td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo-ä.html</code>,
+ which happens to be <code>foo-ä.html</code> using UTF-8 encoding.
+ </p><p><em>UA should offer to download the resource as "foo-ä.html".
+ Displaying "foo-ä.html" instead indicates that the UA tried to be smart by detecting
+ something that happens to look like UTF-8.</em></p></div><div id="attwithfnrawpctenca"><h4><a href="#attwithfnrawpctenca" class="plain">attwithfnrawpctenca</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithfnrawpctenca.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename="<b>foo-%41.html</b>"</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="fail"><td>MSIE8</td><td>fail
+ (displays "foo-A.html")
+ </td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="fail"><td>Chrome</td><td>fail
+ (displays "foo-A.html" (see <a href="http://code.google.com/p/chromium/issues/detail?id=118">Chrome Issue 118</a>))
+ </td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo-%41.html</code>
+ </p><p><em>UA should offer to download the resource as "foo-%41.html".
+ Displaying "foo-A.html" instead would indicate that the UA has attempted
+ to percent-decode the parameter.
+ </em></p></div><div id="attwithfnrawpctenclong"><h4><a href="#attwithfnrawpctenclong" class="plain">attwithfnrawpctenclong</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithfnrawpctenclong.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename="<b>foo-%c3%a4-%e2%82%ac.html</b>"</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="fail"><td>MSIE8</td><td>fail
+ (displays "foo-ä-€.html")
+ </td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="fail"><td>Chrome</td><td>fail
+ (displays "foo-ä-€.html" (see <a href="http://code.google.com/p/chromium/issues/detail?id=118">Chrome Issue 118</a>))
+ </td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo-%c3%a4-%e2%82%ac.html</code>, using raw percent encoded UTF-8
+ to represent <code>foo-ä-€.html</code>
+ </p><p><em>UA should offer to download the resource as "foo-%c3%a4-%e2%82%ac.html".
+ Displaying "foo-ä-€.html" instead would indicate that the UA has attempted
+ to percent-decode the parameter (using UTF-8). Displaying something else
+ would indicate that the UA tried to percent-decode, but used a different encoding.
+ </em></p></div><div id="attwithasciifilenamews1"><h4><a href="#attwithasciifilenamews1" class="plain">attwithasciifilenamews1</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithasciifilenamews1.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename ="<b>foo.html</b>"</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo.html</code>, with one
+ blank space <em>before</em> the equals character.
+ </p><p><em>UA should offer to download the resource as "foo.html".</em></p></div><div id="attwithasciifilenamews2"><h4><a href="#attwithasciifilenamews2" class="plain">attwithasciifilenamews2</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithasciifilenamews2.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename= "<b>foo.html</b>"</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="pass"><td>MSIE8</td><td>pass</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="pass"><td>Saf4</td><td>pass</td></tr><tr class="pass"><td>Konq</td><td>pass</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo.html</code>, with one
+ blank space <em>after</em> the equals character.
+ </p><p><em>UA should offer to download the resource as "foo.html".</em></p></div><div id="attfnbrokentoken"><h4><a href="#attfnbrokentoken" class="plain">attfnbrokentoken</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attfnbrokentoken.asis">TEST</a>]
+ </h4><pre class="invalid"><b>Content-Disposition: </b>attachment; filename=<b>foo[1](2).html</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="warn"><td>FF3</td><td>warn
+ (accepts the unquoted value)
+ </td></tr><tr class="warn"><td>MSIE8</td><td>warn
+ (accepts the unquoted value)
+ </td></tr><tr class="warn"><td>Op10</td><td>warn
+ (accepts the unquoted value)
+ </td></tr><tr class="warn"><td>Saf4</td><td>warn
+ (accepts the unquoted value)
+ </td></tr><tr class="warn"><td>Konq</td><td>warn
+ (accepts the unquoted value)
+ </td></tr><tr class="warn"><td>Chrome</td><td>warn
+ (accepts the unquoted value)
+ </td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo[1](2).html</code>, but missing
+ the quotes. Also, "[", "]", "(" and ")" are not allowed in the HTTP <a href="http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p1-messaging-latest.html#rfc.section.1.2.2">token</a>
+ production.
+ </p><p><em>This is invalid according to <a href="http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.19.5.1">Section 19.5.1 of RFC2616</a>,
+ so UAs should ignore it.</em></p></div></div><div id="c-d-parms"><h3><a href="#c-d-parms" class="plain">Content-Disposition: Additional Parameters</a></h3>
+ <p>
+ Various tests relating to the additional parameters defined in
+ <a href="http://greenbytes.de/tech/webdav/rfc2183.html#rfc.section.2">Section 2 of RFC 2183</a>.
+ </p>
+ <div id="attcdate"><h4><a href="#attcdate" class="plain">attcdate</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attcdate.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; <b>creation-date="Wed, 12 Feb 1997 16:29:51 -0500"</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="unsupported"><td>FF3</td><td>unsupported
+ (seems to ignore the parameter)
+ </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported
+ (seems to ignore the parameter)
+ </td></tr><tr class="unsupported"><td>Op10</td><td>unsupported
+ (seems to ignore the parameter)
+ </td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported
+ (seems to ignore the parameter)
+ </td></tr><tr class="unsupported"><td>Konq</td><td>unsupported
+ (seems to ignore the parameter)
+ </td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported
+ (seems to ignore the parameter)
+ </td></tr></tbody></table><p>'attachment', plus creation-date (see <a href="http://greenbytes.de/tech/webdav/rfc2183.html#rfc.section.2.4">Section 2.4 of RFC 2183</a>)</p><p><em>UA should offer to download the resource. When doing so,
+ the creation date should be set to 12 Feb 1997.</em></p></div><div id="attmdate"><h4><a href="#attmdate" class="plain">attmdate</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attmdate.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; <b>modification-date="Wed, 12 Feb 1997 16:29:51 -0500"</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="unsupported"><td>FF3</td><td>unsupported
+ (seems to ignore the parameter)
+ </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported
+ (seems to ignore the parameter)
+ </td></tr><tr class="unsupported"><td>Op10</td><td>unsupported
+ (seems to ignore the parameter)
+ </td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported
+ (seems to ignore the parameter)
+ </td></tr><tr class="unsupported"><td>Konq</td><td>unsupported
+ (seems to ignore the parameter)
+ </td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported
+ (seems to ignore the parameter)
+ </td></tr></tbody></table><p>'attachment', plus modification-date (see <a href="http://greenbytes.de/tech/webdav/rfc2183.html#rfc.section.2.5">Section 2.5 of RFC 2183</a>)</p><p><em>UA should offer to download the resource. When doing so,
+ the modification date should be set to 12 Feb 1997.</em></p></div></div><div id="c-d-extension"><h3><a href="#c-d-extension" class="plain">Content-Disposition: Disposition-Type Extension</a></h3>
+ <p>
+ A test checking behavior for disposition type extensions,
+ which should be treated as "attachment", see
+ <a href="http://greenbytes.de/tech/webdav/rfc2183.html#rfc.section.2.8">Section 2.8 of RFC 2183</a>.
+ </p>
+ <div id="dispext"><h4><a href="#dispext" class="plain">dispext</a>
+ [<a href="http://greenbytes.de/tech/tc2231/dispext.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>foobar</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="fail (does not treat it as 'attachment')"><td>MSIE8</td><td>fail (does not treat it as 'attachment')</td></tr><tr class="fail (does not treat it as 'attachment')"><td>Op10</td><td>fail (does not treat it as 'attachment')</td></tr><tr class="fail (does not treat it as 'attachment')"><td>Saf4</td><td>fail (does not treat it as 'attachment')</td></tr><tr class="fail (does not treat it as 'attachment')"><td>Konq</td><td>fail (does not treat it as 'attachment')</td></tr><tr class="pass"><td>Chrome</td><td>pass</td></tr></tbody></table><p>'foobar' only</p><p><em>This should be equivalent to using "attachment".</em></p></div></div><div id="encoding-2231-char"><h3><a href="#encoding-2231-char" class="plain">RFC2231 Encoding: Character Sets</a></h3>
+ <p>
+ Various tests using the parameter value encoding defined
+ in <a href="http://greenbytes.de/tech/webdav/rfc2231.html#rfc.section.4">Section 4 of RFC 2231</a>.
+ </p>
+ <div id="attwithisofn2231iso"><h4><a href="#attwithisofn2231iso" class="plain">attwithisofn2231iso</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithisofn2231iso.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename*=<b>iso-8859-1''foo-%E4.html</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo-ä.html</code>, using RFC2231 encoded ISO-8859-1
+ </p><p><em>UA should offer to download the resource as "foo-ä.html".
+ </em></p></div><div id="attwithfn2231utf8"><h4><a href="#attwithfn2231utf8" class="plain">attwithfn2231utf8</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231utf8.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename*=<b>UTF-8''foo-%c3%a4-%e2%82%ac.html</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo-ä-€.html</code>, using RFC2231 encoded UTF-8
+ </p><p><em>UA should offer to download the resource as "foo-ä-€.html".
+ </em></p></div><div id="attwithfn2231noc"><h4><a href="#attwithfn2231noc" class="plain">attwithfn2231noc</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231noc.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename*=<b>''foo-%c3%a4-%e2%82%ac.html</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="warn"><td>FF3</td><td>warn
+ (decodes as UTF-8)
+ </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="warn"><td>Op10</td><td>warn
+ (decodes as 8bit encoding (ISO-8859-1?))
+ </td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p>
+ Behavior is undefined in RFC 2231, the charset part is missing, although UTF-8 was used.
+ </p></div><div id="attwithfn2231utf8comp"><h4><a href="#attwithfn2231utf8comp" class="plain">attwithfn2231utf8comp</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231utf8comp.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename*=<b>UTF-8''foo-a%cc%88.html</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="warn"><td>Op10</td><td>warn
+ (displays "foo-ä.html")
+ </td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo-ä.html</code>, using RFC2231 encoded UTF-8, but
+ choosing the decomposed form (lowercase a plus COMBINING DIAERESIS) --
+ on a Windows target system, this should be translated to the preferred
+ Unicode normal form (composed).
+ </p><p><em>UA should offer to download the resource as "foo-ä.html".
+ </em></p></div><div id="attwithfn2231utf8-bad"><h4><a href="#attwithfn2231utf8-bad" class="plain">attwithfn2231utf8-bad</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231utf8-bad.asis">TEST</a>]
+ </h4><pre class="invalid"><b>Content-Disposition: </b>attachment; filename*=<b>iso-8859-1''foo-%c3%a4-%e2%82%ac.html</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail
+ (falls back to UTF-8)
+ </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="warn"><td>Op10</td><td>warn
+ (displays the raw octet sequence as if it was ISO-8859-1 (which is internally
+ treated as windows-1252, which <em>does</em> allow %82))
+ </td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo-ä-€.html</code>, using RFC2231 encoded UTF-8, but declaring ISO-8859-1
+ </p><p><em>
+ The octet %82 does not represent a valid ISO-8859-1 code point, so
+ the UA should really ignore the parameter.
+ </em></p></div><div id="attwithfn2231ws1"><h4><a href="#attwithfn2231ws1" class="plain">attwithfn2231ws1</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231ws1.asis">TEST</a>]
+ </h4><pre class="invalid"><b>Content-Disposition: </b>attachment; filename<b> *=</b>UTF-8''foo-%c3%a4.html</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail
+ (displays garbage)
+ </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo-ä.html</code>, using RFC2231 encoded UTF-8, with whitespace before "*="
+ </p><p><em>
+ The parameter is invalid, thus should be ignored.
+ </em></p></div><div id="attwithfn2231ws2"><h4><a href="#attwithfn2231ws2" class="plain">attwithfn2231ws2</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231ws2.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename<b>*= </b>UTF-8''foo-%c3%a4.html</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo-ä.html</code>, using RFC2231 encoded UTF-8, with whitespace after "*="
+ </p><p><em>
+ UA should offer to download the resource as "foo-ä.html".
+ </em></p></div><div id="attwithfn2231ws3"><h4><a href="#attwithfn2231ws3" class="plain">attwithfn2231ws3</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231ws3.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename<b>* =</b>UTF-8''foo-%c3%a4.html</pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo-ä.html</code>, using RFC2231 encoded UTF-8, with whitespace inside "* ="
+ </p><p><em>
+ UA should offer to download the resource as "foo-ä.html".
+ </em></p></div><div id="attwithfn2231quot"><h4><a href="#attwithfn2231quot" class="plain">attwithfn2231quot</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231quot.asis">TEST</a>]
+ </h4><pre class="invalid"><b>Content-Disposition: </b>attachment; filename*=<b>"</b>UTF-8''foo-%c3%a4.html<b>"</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail
+ (tries to be helpful by removing the quotes)
+ </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo-ä.html</code>, using RFC2231 encoded UTF-8, with double quotes
+ around the parameter value.
+ </p><p><em>
+ The parameter is invalid, thus should be ignored.
+ </em></p></div><div id="attwithfn2231encmissing"><h4><a href="#attwithfn2231encmissing" class="plain">attwithfn2231encmissing</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attwithfn2231encmissing.asis">TEST</a>]
+ </h4><pre class="invalid"><b>Content-Disposition: </b>attachment; filename*=<b>''foo-%c3%a4.html</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail
+ (sniffs the encoding as UTF-8)
+ </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="fail"><td>Op10</td><td>fail
+ (assumes a default of ISO-8859-1)
+ </td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo-ä.html</code>, using RFC2231 encoded UTF-8, but
+ leaving out the charset field.
+ </p><p><em>
+ The parameter is invalid, thus should be ignored.
+ </em></p></div></div><div id="encoding-2231-cont"><h3><a href="#encoding-2231-cont" class="plain">RFC2231 Encoding: Continuations</a></h3>
+ <p>
+ Various tests using the parameter value continuation efined
+ in <a href="http://greenbytes.de/tech/webdav/rfc2231.html#rfc.section.3">Section 3 of RFC 2231</a>.
+ </p>
+ <div id="attfncont"><h4><a href="#attfncont" class="plain">attfncont</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attfncont.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename*0=<b>"foo."</b>; filename*1=<b>"html"</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo.html</code>, using RFC2231-style parameter continuations.
+ </p><p><em>
+ UA should offer to download the resource as "foo.html".
+ </em></p></div><div id="attfncontenc"><h4><a href="#attfncontenc" class="plain">attfncontenc</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attfncontenc.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename*0*=<b>UTF-8''foo-%c3%a4</b>; filename*1=<b>".html"</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo-ä.html</code>, using both RFC2231-style parameter continuations
+ and UTF-8 encoding.
+ </p><p><em>
+ UA should offer to download the resource as "foo-ä.html".
+ </em></p></div><div id="attfncontlz"><h4><a href="#attfncontlz" class="plain">attfncontlz</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attfncontlz.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename*0=<b>"foo"</b>; filename*01=<b>"bar"</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="warn"><td>FF3</td><td>warn
+ (accepts leading zeros)
+ </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="warn"><td>Op10</td><td>warn
+ (accepts leading zeros)
+ </td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo</code> (the parameter filename*01 should be ignored because of the leading zero)
+ </p><p><em>
+ UA should offer to download the resource as "foo".
+ </em></p></div><div id="attfncontnc"><h4><a href="#attfncontnc" class="plain">attfncontnc</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attfncontnc.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename*0=<b>"foo"</b>; filename*2=<b>"bar"</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="warn"><td>FF3</td><td>warn
+ (accepts gaps)
+ </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo</code> (the parameter filename*2 because there's no filename*1 parameter)
+ </p><p><em>
+ UA should offer to download the resource as "foo".
+ </em></p></div><div id="attfnconts1"><h4><a href="#attfnconts1" class="plain">attfnconts1</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attfnconts1.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename*1=<b>"foo."</b>; filename*2=<b>"html"</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass</td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p>
+ 'attachment' (the filename* parameters should be ignored because filename*0 is missing)
+ </p><p><em>
+ UA should offer to download, not getting the filename from the header.
+ </em></p></div><div id="attfncontord"><h4><a href="#attfncontord" class="plain">attfncontord</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attfncontord.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename*1=<b>"bar"</b>; filename*0=<b>"foo"</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail
+ (parameters are expected to be ordered)
+ </td></tr><tr class="unsupported"><td>MSIE8</td><td>unsupported</td></tr><tr class="pass"><td>Op10</td><td>pass</td></tr><tr class="unsupported"><td>Saf4</td><td>unsupported</td></tr><tr class="unsupported"><td>Konq</td><td>unsupported</td></tr><tr class="unsupported"><td>Chrome</td><td>unsupported</td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foobar</code>
+ </p><p><em>
+ UA should offer to download the resource as "foobar".
+ </em></p></div></div><div id="encoding-2231-fb"><h3><a href="#encoding-2231-fb" class="plain">RFC2231 Encoding: Fallback Behaviour</a></h3>
+ <p>
+ This tests how the UA behaves when the same parameter name appear
+ both in traditional and RFC 2231 extended format.
+ </p>
+ <div id="attfnboth"><h4><a href="#attfnboth" class="plain">attfnboth</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attfnboth.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename="<b>foo-ae.html</b>"; filename*=<b>UTF-8''foo-%c3%a4.html</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass
+ (picks the traditionally encoded value -- the first of both)
+ </td></tr><tr class="pass"><td>MSIE8</td><td>pass
+ (picks the traditionally encoded value -- the first of both)
+ </td></tr><tr class="pass"><td>Op10</td><td>pass
+ (picks the traditionally encoded value -- the first of both)
+ </td></tr><tr class="pass"><td>Saf4</td><td>pass
+ (picks the traditionally encoded value -- the first of both)
+ </td></tr><tr class="pass"><td>Konq</td><td>pass
+ (picks the traditionally encoded value -- the first of both)
+ </td></tr><tr class="pass"><td>Chrome</td><td>pass
+ (picks the traditionally encoded value -- the first of both)
+ </td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo-ae.html</code> in
+ the traditional format, and <code>foo-ä.html</code> in RFC2231 format.
+ </p><p><em>
+ The behaviour of this undefined. Thus UAs should one of the two values.
+ </em></p></div><div id="attfnboth2"><h4><a href="#attfnboth2" class="plain">attfnboth2</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attfnboth2.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename*=<b>UTF-8''foo-%c3%a4.html</b>; filename=<b>"foo-ae.html"</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="pass"><td>FF3</td><td>pass
+ (picks the RFC2231 encoded value -- the first of both)
+ </td></tr><tr class="fail"><td>MSIE8</td><td>fail
+ (ignores the parameter (this indicates a parsing bug))
+ </td></tr><tr class="pass"><td>Op10</td><td>pass
+ (picks the RFC2231 encoded value -- the first of both)
+ </td></tr><tr class="pass"><td>Saf4</td><td>pass
+ (picks the traditionally encoded value -- the one it understands)
+ </td></tr><tr class="pass"><td>Konq</td><td>pass
+ (picks the traditionally encoded value -- the one it understands)
+ </td></tr><tr class="fail"><td>Chrome</td><td>fail
+ (ignores the parameter (this indicates a parsing bug))
+ </td></tr></tbody></table><p>
+ 'attachment', specifying a filename of <code>foo-ae.html</code> in
+ the traditional format, and <code>foo-ä.html</code> in RFC2231 format.
+ </p><p><em>
+ The behaviour of this undefined. Thus UAs should one of the two values.
+ </em></p></div></div><div id="encoding-2047"><h3><a href="#encoding-2047" class="plain">RFC2047 Encoding</a></h3>
+ <p>
+ These tests RFC 2047 style encoding.
+ </p>
+ <p>
+ Note that according to <a href="http://greenbytes.de/tech/webdav/rfc2047.html#rfc.section.5">Section 5 of RFC 2047</a>,
+ this encoding does not apply here: <q cite="http://greenbytes.de/tech/webdav/rfc2047.html#rfc.section.5">An 'encoded-word' MUST NOT appear within a 'quoted-string'.</q>, and
+ <q cite="http://greenbytes.de/tech/webdav/rfc2047.html#rfc.section.5">An 'encoded-word' MUST NOT be used in parameter of a MIME
+ Content-Type or Content-Disposition field, or in any structured
+ field body except within a 'comment' or 'phrase'.</q>
+ </p>
+ <p>
+ Therefore, these tests are only be present in order to check
+ whether the UA by mistake tries to implement RFC2047.
+ </p>
+ <div id="attrfc2047token"><h4><a href="#attrfc2047token" class="plain">attrfc2047token</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attrfc2047token.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename=<b>=?ISO-8859-1?Q?foo-=E4.html?=</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail
+ (decodes it anyway to "foo-ä.html")
+ </td></tr><tr class="pass"><td>MSIE8</td><td>pass
+ (takes the whole value as filename, but does not decode it (replacing question marks by underscores))
+ </td></tr><tr class="fail"><td>Op10</td><td>fail
+ (displays garbage ("=.htm"))
+ </td></tr><tr class="pass"><td>Saf4</td><td>pass
+ (takes the whole value as filename, but does not decode it (replacing question marks by underscores))
+ </td></tr><tr class="fail"><td>Konq</td><td>fail
+ (decodes it anyway to "foo-ä.html")
+ </td></tr><tr class="fail"><td>Chrome</td><td>fail
+ (decodes it anyway to "foo-ä.html")
+ </td></tr></tbody></table><p>
+ Uses RFC 2047 style encoded word. "=" is invalid inside the <code>token</code>
+ production, so this is invalid.
+ </p></div><div id="attrfc2047quoted"><h4><a href="#attrfc2047quoted" class="plain">attrfc2047quoted</a>
+ [<a href="http://greenbytes.de/tech/tc2231/attrfc2047quoted.asis">TEST</a>]
+ </h4><pre><b>Content-Disposition: </b>attachment; filename=<b>"=?ISO-8859-1?Q?foo-=E4.html?="</b></pre><table class="aside"><thead><tr><th colspan="2">
+ Test Results
+ </th></tr></thead><tbody><tr class="fail"><td>FF3</td><td>fail
+ (decodes it anyway to "foo-ä.html")
+ </td></tr><tr class="pass"><td>MSIE8</td><td>pass
+ (takes the whole value as filename, but does not decode it)
+ </td></tr><tr class="fail"><td>Op10</td><td>fail
+ (displays garbage ("=.htm"))
+ </td></tr><tr class="pass"><td>Saf4</td><td>pass
+ (takes the whole value as filename, but does not decode it)
+ </td></tr><tr class="fail"><td>Konq</td><td>fail
+ (decodes it anyway to "foo-ä.html")
+ </td></tr><tr class="fail"><td>Chrome</td><td>fail
+ (decodes it anyway to "foo-ä.html")
+ </td></tr></tbody></table><p>
+ Uses RFC 2047 style encoded word, using the <code>quoted-string</code> production.
+ </p></div></div>
+</body></html> \ No newline at end of file
diff --git a/src/tests/findbar_test.cpp b/src/tests/findbar_test.cpp
new file mode 100644
index 00000000..a79f44a2
--- /dev/null
+++ b/src/tests/findbar_test.cpp
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2010 Andrea Diamantini <adjam7@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+
+
+#include <qtest_kde.h>
+
+#include <QtGui>
+#include <QtTest/QtTest>
+
+#include "findbar.h"
+#include "mainwindow.h"
+
+
+class FindBarTest : public QObject
+{
+ Q_OBJECT
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+private slots:
+ void matchCase();
+ void notifyMatch();
+
+private:
+ FindBar *bar;
+ MainWindow *w;
+};
+
+
+// -------------------------------------------
+
+
+void FindBarTest::initTestCase()
+{
+ w = new MainWindow;
+ bar = new FindBar(w);
+}
+
+
+void FindBarTest::cleanupTestCase()
+{
+ delete bar;
+}
+
+void FindBarTest::matchCase()
+{
+
+}
+
+void FindBarTest::notifyMatch()
+{
+}
+
+// -------------------------------------------
+
+QTEST_KDEMAIN(FindBarTest, GUI)
+#include "findbar_test.moc"
diff --git a/src/tests/link_test.html b/src/tests/link_test.html
index 7dd1470d..5ca3cd41 100644
--- a/src/tests/link_test.html
+++ b/src/tests/link_test.html
@@ -135,6 +135,13 @@
<td><a href="http://ads.cnn.com/" target="_blank">link</a></td>
</tr>
+
+<tr>
+<td>http://ja.wikipedia.org/wiki/特別:最近の更新</td>
+<td>KGet import links with particular encoding</td>
+<td><a href="http://ja.wikipedia.org/wiki/特別:最近の更新">link</a></td>
+</tr>
+
<tr>
<td></td>
<td></td>
diff --git a/src/tests/mainview_test.cpp b/src/tests/mainview_test.cpp
index f56d73ab..596ac4e1 100644
--- a/src/tests/mainview_test.cpp
+++ b/src/tests/mainview_test.cpp
@@ -27,12 +27,13 @@
#include <qtest_kde.h>
-#include <QtTest>
#include <QtCore>
#include <QtGui>
+#include <QtTest>
-#include "../mainview.h"
-#include "../webview.h"
+#include "mainwindow.h"
+#include "mainview.h"
+#include "webview.h"
class MainViewTest : public QObject
@@ -42,8 +43,6 @@ class MainViewTest : public QObject
public slots:
void initTestCase();
void cleanupTestCase();
- void init();
- void cleanup();
private slots:
void tabwidget_data();
@@ -75,38 +74,29 @@ private slots:
void currentChanged_data();
void currentChanged();
+
+private:
+ MainWindow *window;
+ MainView *view;
};
-// Subclass that exposes the protected functions.
-class SubMainView : public MainView
-{
-public:
- void call_resizeEvent(QResizeEvent *event)
- { return SubMainView::resizeEvent(event); }
-};
+// -------------------------------------------------------------------------------
// This will be called before the first test function is executed.
// It is only called once.
void MainViewTest::initTestCase()
{
+ window = new MainWindow;
+ view = window->mainView();
}
// This will be called after the last test function is executed.
// It is only called once.
void MainViewTest::cleanupTestCase()
{
-}
-
-// This will be called before each test function is executed.
-void MainViewTest::init()
-{
-}
-
-// This will be called after every test function.
-void MainViewTest::cleanup()
-{
+// delete window; // FIXME: this let the test fail. Why??
}
// -------------------------------------------
@@ -117,14 +107,16 @@ void MainViewTest::tabwidget_data()
void MainViewTest::tabwidget()
{
- SubMainView widget;
-// widget.currentWebView();
-// QCOMPARE(widget.currentIndex(), 0);
-// widget.newTab();
-// widget.nextTab();
-// QCOMPARE(widget.currentIndex(), 1);
-// widget.previousTab();
-// QCOMPARE(widget.currentIndex(), 0);
+ QCOMPARE(view->currentIndex(), -1);
+
+// view->newTab();
+// QCOMPARE(view->currentIndex(), 1);
+// view->newTab();
+// view->nextTab();
+// QCOMPARE(view->currentIndex(), 0);
+//
+// view->previousTab();
+// QCOMPARE(view->currentIndex(), 0);
}
// -------------------------------------------
@@ -135,33 +127,30 @@ void MainViewTest::closeTab_data()
QTest::newRow("null") << 0;
}
-// public void closeTab(int index = -1)
+
void MainViewTest::closeTab()
{
- QFETCH(int, index);
-
- SubMainView widget;
-/*
- QSignalSpy spy0(&widget, SIGNAL(linkHovered(const QString &)));
- QSignalSpy spy3(&widget, SIGNAL(setCurrentTitle(const QString &)));
-QSignalSpy spy5(&widget, SIGNAL(tabsChanged()));
- QSignalSpy spy6(&widget, SIGNAL(lastTabClosed()));
-
- widget.newTab();
- widget.slotCloseTab(index);
- widget.newTab();
- widget.slotCloseTab(index);
- widget.newTab();
-
- QCOMPARE(spy0.count(), 0);
- QCOMPARE(spy3.count(), 2);
- QCOMPARE(spy5.count(), 0);
- QCOMPARE(spy6.count(), 0);*/
+// QFETCH(int, index);
+//
+// QSignalSpy spy1(view, SIGNAL(linkHovered(const QString &)));
+// QSignalSpy spy2(view, SIGNAL(setCurrentTitle(const QString &)));
+// QSignalSpy spy3(view, SIGNAL(tabsChanged()));
+// QSignalSpy spy4(view, SIGNAL(lastTabClosed()));
+//
+// view->newTab();
+// view->closeTab(index);
+// view->newTab();
+// view->closeTab(index);
+// view->newTab();
+//
+// QCOMPARE(spy1.count(), 0);
+// QCOMPARE(spy2.count(), 2);
+// QCOMPARE(spy3.count(), 0);
+// QCOMPARE(spy4.count(), 0);
}
// -------------------------------------------
-Q_DECLARE_METATYPE(WebView*)
void MainViewTest::currentWebView_data()
{
/*
@@ -170,7 +159,6 @@ void MainViewTest::currentWebView_data()
*/
}
-// public WebView *currentWebView() const
void MainViewTest::currentWebView()
{
/*
@@ -178,12 +166,12 @@ void MainViewTest::currentWebView()
SubMainView widget;
- QSignalSpy spy0(&widget, SIGNAL(linkHovered(const QString &)));
- QSignalSpy spy2(&widget, SIGNAL(loadProgress(int)));
- QSignalSpy spy3(&widget, SIGNAL(setCurrentTitle(const QString &)));
- QSignalSpy spy4(&widget, SIGNAL(showStatusBarMessage(const QString &)));
- QSignalSpy spy5(&widget, SIGNAL(tabsChanged()));
- QSignalSpy spy6(&widget, SIGNAL(lastTabClosed()));
+ QSignalSpy spy0(view, SIGNAL(linkHovered(const QString &)));
+ QSignalSpy spy2(view, SIGNAL(loadProgress(int)));
+ QSignalSpy spy3(view, SIGNAL(setCurrentTitle(const QString &)));
+ QSignalSpy spy4(view, SIGNAL(showStatusBarMessage(const QString &)));
+ QSignalSpy spy5(view, SIGNAL(tabsChanged()));
+ QSignalSpy spy6(view, SIGNAL(lastTabClosed()));
QCOMPARE(widget.currentWebView(), currentWebView);
@@ -205,31 +193,24 @@ void MainViewTest::newTab_data()
QTest::newRow("null") << 0;
}
-// public void newTab()
+
void MainViewTest::newTab()
{
- /*
- QFETCH(int, foo);
-
- SubMainView widget;
-
- QSignalSpy spy0(&widget, SIGNAL(linkHovered(const QString &)));
- QSignalSpy spy2(&widget, SIGNAL(loadProgress(int)));
- QSignalSpy spy3(&widget, SIGNAL(setCurrentTitle(const QString &)));
- QSignalSpy spy4(&widget, SIGNAL(showStatusBarMessage(const QString &)));
- QSignalSpy spy5(&widget, SIGNAL(tabsChanged()));
- QSignalSpy spy6(&widget, SIGNAL(lastTabClosed()));
-
- widget.newTab();
-
- QCOMPARE(spy0.count(), 0);
- QCOMPARE(spy2.count(), 0);
- QCOMPARE(spy3.count(), 0);
- QCOMPARE(spy4.count(), 0);
- QCOMPARE(spy5.count(), 0);
- QCOMPARE(spy6.count(), 0);
- */
- QSKIP("Test is not implemented.", SkipAll);
+// QFETCH(int, foo);
+//
+// QSignalSpy spy0(view, SIGNAL(linkHovered(const QString &)));
+// QSignalSpy spy1(view, SIGNAL(setCurrentTitle(const QString &)));
+// QSignalSpy spy2(view, SIGNAL(showStatusBarMessage(const QString &)));
+// QSignalSpy spy3(view, SIGNAL(tabsChanged()));
+// QSignalSpy spy4(view, SIGNAL(lastTabClosed()));
+//
+// view->newTab();
+//
+// QCOMPARE(spy0.count(), 0);
+// QCOMPARE(spy1.count(), 0);
+// QCOMPARE(spy2.count(), 0);
+// QCOMPARE(spy3.count(), 0);
+// QCOMPARE(spy4.count(), 0);
}
// -------------------------------------------
@@ -248,12 +229,12 @@ void MainViewTest::nextTab()
SubMainView widget;
- QSignalSpy spy0(&widget, SIGNAL(linkHovered(const QString &)));
- QSignalSpy spy2(&widget, SIGNAL(loadProgress(int)));
- QSignalSpy spy3(&widget, SIGNAL(setCurrentTitle(const QString &)));
- QSignalSpy spy4(&widget, SIGNAL(showStatusBarMessage(const QString &)));
- QSignalSpy spy5(&widget, SIGNAL(tabsChanged()));
- QSignalSpy spy6(&widget, SIGNAL(lastTabClosed()));
+ QSignalSpy spy0(view, SIGNAL(linkHovered(const QString &)));
+ QSignalSpy spy2(view, SIGNAL(loadProgress(int)));
+ QSignalSpy spy3(view, SIGNAL(setCurrentTitle(const QString &)));
+ QSignalSpy spy4(view, SIGNAL(showStatusBarMessage(const QString &)));
+ QSignalSpy spy5(view, SIGNAL(tabsChanged()));
+ QSignalSpy spy6(view, SIGNAL(lastTabClosed()));
widget.nextTab();
@@ -284,12 +265,12 @@ void MainViewTest::previousTab()
SubMainView widget;
- QSignalSpy spy0(&widget, SIGNAL(linkHovered(const QString &)));
- QSignalSpy spy2(&widget, SIGNAL(loadProgress(int)));
- QSignalSpy spy3(&widget, SIGNAL(setCurrentTitle(const QString &)));
- QSignalSpy spy4(&widget, SIGNAL(showStatusBarMessage(const QString &)));
- QSignalSpy spy5(&widget, SIGNAL(tabsChanged()));
- QSignalSpy spy6(&widget, SIGNAL(lastTabClosed()));
+ QSignalSpy spy0(view, SIGNAL(linkHovered(const QString &)));
+ QSignalSpy spy2(view, SIGNAL(loadProgress(int)));
+ QSignalSpy spy3(view, SIGNAL(setCurrentTitle(const QString &)));
+ QSignalSpy spy4(view, SIGNAL(showStatusBarMessage(const QString &)));
+ QSignalSpy spy5(view, SIGNAL(tabsChanged()));
+ QSignalSpy spy6(view, SIGNAL(lastTabClosed()));
widget.previousTab();
@@ -314,12 +295,12 @@ void MainViewTest::recentlyClosedTabs()
/*
SubMainView widget;
- QSignalSpy spy0(&widget, SIGNAL(linkHovered(const QString &)));
- QSignalSpy spy2(&widget, SIGNAL(loadProgress(int)));
- QSignalSpy spy3(&widget, SIGNAL(setCurrentTitle(const QString &)));
- QSignalSpy spy4(&widget, SIGNAL(showStatusBarMessage(const QString &)));
- QSignalSpy spy5(&widget, SIGNAL(tabsChanged()));
- QSignalSpy spy6(&widget, SIGNAL(lastTabClosed()));
+ QSignalSpy spy0(view, SIGNAL(linkHovered(const QString &)));
+ QSignalSpy spy2(view, SIGNAL(loadProgress(int)));
+ QSignalSpy spy3(view, SIGNAL(setCurrentTitle(const QString &)));
+ QSignalSpy spy4(view, SIGNAL(showStatusBarMessage(const QString &)));
+ QSignalSpy spy5(view, SIGNAL(tabsChanged()));
+ QSignalSpy spy6(view, SIGNAL(lastTabClosed()));
QCOMPARE(spy0.count(), 0);
QCOMPARE(spy2.count(), 0);
@@ -347,12 +328,12 @@ void MainViewTest::setCurrentTitle(const QString &)
SubMainView widget;
- QSignalSpy spy0(&widget, SIGNAL(linkHovered(const QString &)));
- QSignalSpy spy2(&widget, SIGNAL(loadProgress(int)));
- QSignalSpy spy3(&widget, SIGNAL(setCurrentTitle(const QString &)));
- QSignalSpy spy4(&widget, SIGNAL(showStatusBarMessage(const QString &)));
- QSignalSpy spy5(&widget, SIGNAL(tabsChanged()));
- QSignalSpy spy6(&widget, SIGNAL(lastTabClosed()));
+ QSignalSpy spy0(view, SIGNAL(linkHovered(const QString &)));
+ QSignalSpy spy2(view, SIGNAL(loadProgress(int)));
+ QSignalSpy spy3(view, SIGNAL(setCurrentTitle(const QString &)));
+ QSignalSpy spy4(view, SIGNAL(showStatusBarMessage(const QString &)));
+ QSignalSpy spy5(view, SIGNAL(tabsChanged()));
+ QSignalSpy spy6(view, SIGNAL(lastTabClosed()));
widget.call_setCurrentTitle(url);
@@ -382,12 +363,12 @@ void MainViewTest::showStatusBarMessage(const QString &)
SubMainView widget;
- QSignalSpy spy0(&widget, SIGNAL(linkHovered(const QString &)));
- QSignalSpy spy2(&widget, SIGNAL(loadProgress(int)));
- QSignalSpy spy3(&widget, SIGNAL(setCurrentTitle(const QString &)));
- QSignalSpy spy4(&widget, SIGNAL(showStatusBarMessage(const QString &)));
- QSignalSpy spy5(&widget, SIGNAL(tabsChanged()));
- QSignalSpy spy6(&widget, SIGNAL(lastTabClosed()));
+ QSignalSpy spy0(view, SIGNAL(linkHovered(const QString &)));
+ QSignalSpy spy2(view, SIGNAL(loadProgress(int)));
+ QSignalSpy spy3(view, SIGNAL(setCurrentTitle(const QString &)));
+ QSignalSpy spy4(view, SIGNAL(showStatusBarMessage(const QString &)));
+ QSignalSpy spy5(view, SIGNAL(tabsChanged()));
+ QSignalSpy spy6(view, SIGNAL(lastTabClosed()));
widget.call_showStatusBarMessage(message);
@@ -403,14 +384,12 @@ void MainViewTest::showStatusBarMessage(const QString &)
// -------------------------------------------
-// void slotCurrentChanged(int index);
void MainViewTest::currentChanged_data()
{
QTest::addColumn<int>("foo");
QTest::newRow("null") << 0;
}
-// private slotCurrentChanged
void MainViewTest::currentChanged()
{
/*
@@ -418,12 +397,12 @@ void MainViewTest::currentChanged()
SubMainView widget;
- QSignalSpy spy0(&widget, SIGNAL(linkHovered(const QString &)));
- QSignalSpy spy2(&widget, SIGNAL(loadProgress(int)));
- QSignalSpy spy3(&widget, SIGNAL(setCurrentTitle(const QString &)));
- QSignalSpy spy4(&widget, SIGNAL(showStatusBarMessage(const QString &)));
- QSignalSpy spy5(&widget, SIGNAL(tabsChanged()));
- QSignalSpy spy6(&widget, SIGNAL(lastTabClosed()));
+ QSignalSpy spy0(view, SIGNAL(linkHovered(const QString &)));
+ QSignalSpy spy2(view, SIGNAL(loadProgress(int)));
+ QSignalSpy spy3(view, SIGNAL(setCurrentTitle(const QString &)));
+ QSignalSpy spy4(view, SIGNAL(showStatusBarMessage(const QString &)));
+ QSignalSpy spy5(view, SIGNAL(tabsChanged()));
+ QSignalSpy spy6(view, SIGNAL(lastTabClosed()));
widget.call_tabsChanged();
diff --git a/src/tests/mainwindow_test.cpp b/src/tests/mainwindow_test.cpp
new file mode 100644
index 00000000..d3ab6bef
--- /dev/null
+++ b/src/tests/mainwindow_test.cpp
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2010 Andrea Diamantini <adjam7@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+
+
+#include <qtest_kde.h>
+
+#include <QtCore>
+#include <QtGui>
+#include <QtTest>
+
+#include "mainwindow.h"
+#include "application.h"
+
+
+class MainWindowTest : public QObject
+{
+ Q_OBJECT
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+private slots:
+
+
+private:
+ MainWindow *window;
+};
+
+
+// -------------------------------------------
+
+
+void MainWindowTest::initTestCase()
+{
+ window = new MainWindow;
+}
+
+
+void MainWindowTest::cleanupTestCase()
+{
+// delete window;
+}
+
+// -------------------------------------------
+
+QTEST_KDEMAIN(MainWindowTest,GUI)
+#include "mainwindow_test.moc"
diff --git a/src/tests/networkaccessmanager_test.cpp b/src/tests/networkaccessmanager_test.cpp
new file mode 100644
index 00000000..ac6cf89e
--- /dev/null
+++ b/src/tests/networkaccessmanager_test.cpp
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2010 Andrea Diamantini <adjam7@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+
+
+#include <qtest_kde.h>
+
+#include <QtCore>
+#include <QtGui>
+#include <QtTest>
+
+#include "networkaccessmanager.h"
+
+
+class NetworkAccessManagerTest : public QObject
+{
+ Q_OBJECT
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+private slots:
+
+private:
+ NetworkAccessManager *manager;
+};
+
+
+// -------------------------------------------
+
+void NetworkAccessManagerTest::initTestCase()
+{
+ manager = new NetworkAccessManager(this);
+}
+
+
+void NetworkAccessManagerTest::cleanupTestCase()
+{
+ delete manager;
+}
+
+
+// -------------------------------------------
+
+
+
+// -------------------------------------------
+
+QTEST_KDEMAIN(NetworkAccessManagerTest,GUI)
+#include "networkaccessmanager_test.moc"
diff --git a/src/tests/protocolhandler_test.cpp b/src/tests/protocolhandler_test.cpp
new file mode 100644
index 00000000..a3c78c2f
--- /dev/null
+++ b/src/tests/protocolhandler_test.cpp
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2010 Andrea Diamantini <adjam7@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+
+
+#include <qtest_kde.h>
+
+#include <QtCore>
+#include <QtGui>
+#include <QtTest>
+#include <QtNetwork>
+#include <QtWebKit>
+
+#include "protocolhandler.h"
+
+
+class ProtocolhandlerTest : public QObject
+{
+ Q_OBJECT
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+private slots:
+ void preHandling_data();
+ void preHandling();
+
+ void postHandling_data();
+ void postHandling();
+
+private:
+ ProtocolHandler *handler;
+};
+
+
+// -------------------------------------------
+
+void ProtocolhandlerTest::initTestCase()
+{
+ handler = new ProtocolHandler;
+}
+
+
+void ProtocolhandlerTest::cleanupTestCase()
+{
+ delete handler;
+}
+
+
+// -------------------------------------------
+
+
+void ProtocolhandlerTest::preHandling_data()
+{
+ QTest::addColumn<QString>("urlString");
+ QTest::addColumn<bool>("result");
+
+ QTest::newRow("mailto") << "mailto:me@here.com" << true ;
+ QTest::newRow("relative") << "google.it" << false ;
+ QTest::newRow("javascript") << "javascript:alertbox('hello')" << true ;
+ QTest::newRow("aboutblank") << "about:blank" << false ;
+ QTest::newRow("abouthome") << "about:home" << true ;
+ QTest::newRow("ftp") << "ftp://ftp.kde.org" << false ;
+ QTest::newRow("file") << "file:///home" << false ;
+}
+
+
+void ProtocolhandlerTest::preHandling()
+{
+ QFETCH( QString, urlString );
+ QFETCH( bool , result );
+
+ QWebView *view = new QWebView;
+ QWebFrame *frame = view->page()->mainFrame();
+
+ QNetworkRequest request = QNetworkRequest( QUrl(urlString) );
+
+ QCOMPARE( handler->preHandling( request, frame ) , result );
+}
+
+
+void ProtocolhandlerTest::postHandling_data()
+{
+ QTest::addColumn<QString>("urlString");
+ QTest::addColumn<bool>("result");
+
+ QTest::newRow("mailto") << "mailto:me@here.com" << true ;
+ QTest::newRow("relative") << "google.it" << false ;
+ QTest::newRow("javascript") << "javascript:alertbox('hello')" << false ;
+ QTest::newRow("aboutblank") << "about:blank" << false ;
+ QTest::newRow("abouthome") << "about:home" << false ;
+ QTest::newRow("ftp") << "ftp://ftp.kde.org" << true ;
+ QTest::newRow("file") << "file:///home" << true ;
+}
+
+
+void ProtocolhandlerTest::postHandling()
+{
+ QFETCH( QString, urlString );
+ QFETCH( bool , result );
+
+ QWebView *view = new QWebView;
+ QWebFrame *frame = view->page()->mainFrame();
+
+ QNetworkRequest request = QNetworkRequest( QUrl(urlString) );
+
+ QCOMPARE( handler->postHandling( request, frame ) , result );
+}
+
+// -------------------------------------------
+
+QTEST_KDEMAIN(ProtocolhandlerTest,GUI)
+#include "protocolhandler_test.moc"
diff --git a/src/tests/sessionmanager_test.cpp b/src/tests/sessionmanager_test.cpp
new file mode 100644
index 00000000..e3e1b329
--- /dev/null
+++ b/src/tests/sessionmanager_test.cpp
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2010 Andrea Diamantini <adjam7@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+
+
+#include <qtest_kde.h>
+
+#include <QtCore>
+#include <QtGui>
+#include <QtTest>
+
+
+#include "sessionmanager.h"
+
+
+class SessionManagerTest : public QObject
+{
+ Q_OBJECT
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+private slots:
+
+private:
+ SessionManager *sessman;
+};
+
+
+// -------------------------------------------
+
+
+void SessionManagerTest::initTestCase()
+{
+ sessman = new SessionManager;
+}
+
+
+void SessionManagerTest::cleanupTestCase()
+{
+ delete sessman;
+}
+
+
+// -------------------------------------------
+
+
+
+// -------------------------------------------
+
+QTEST_KDEMAIN(SessionManagerTest,GUI)
+#include "sessionmanager_test.moc"
diff --git a/src/tests/tabbar_test.cpp b/src/tests/tabbar_test.cpp
index 08f295d1..560f2c9b 100644
--- a/src/tests/tabbar_test.cpp
+++ b/src/tests/tabbar_test.cpp
@@ -24,116 +24,115 @@
#include <QtCore>
#include <QtGui>
-#include "../tabbar.h"
+#include "mainwindow.h"
+#include "mainview.h"
+#include "tabbar.h"
-class TabBarTest : public QObject
-{
- Q_OBJECT
-
-public slots:
- void initTestCase();
- void cleanupTestCase();
- void init();
- void cleanup();
-
-private slots:
- void tabbar_data();
- void tabbar();
-
- void tabSizeHint_data();
- void tabSizeHint();
-};
-
-
-// Subclass that exposes the protected functions.
+/**
+ * Subclass that exposes the protected functions.
+ */
class SubTabBar : public TabBar
{
public:
- void call_cloneTab(int index)
- { return SubTabBar::cloneTab(index); }
-
- void call_closeOtherTabs(int index)
- { return SubTabBar::closeOtherTabs(index); }
-
- void call_closeTab(int index)
- { return SubTabBar::closeTab(index); }
+
+ SubTabBar(QWidget *parent) : TabBar(parent) {};
+ QSize call_tabSizeHint(int index) const
+ { return SubTabBar::tabSizeHint(index); }
+
void call_mouseMoveEvent(QMouseEvent* event)
{ return SubTabBar::mouseMoveEvent(event); }
-
+
+ void call_leaveEvent(QEvent* event)
+ { return SubTabBar::leaveEvent(event); }
+
void call_mousePressEvent(QMouseEvent* event)
{ return SubTabBar::mousePressEvent(event); }
+
+ void call_mouseReleaseEvent(QMouseEvent* event)
+ { return SubTabBar::mouseReleaseEvent(event); }
+};
- void call_reloadAllTabs()
- { return SubTabBar::reloadAllTabs(); }
- void call_reloadTab(int index)
- { return SubTabBar::reloadTab(index); }
+// ------------------------------------------------------------------
- QSize call_tabSizeHint(int index) const
- { return SubTabBar::tabSizeHint(index); }
- void call_showTabPreview(int tab)
- { return SubTabBar::showTabPreview(tab); }
+class TabBarTest : public QObject
+{
+ Q_OBJECT
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+private slots:
+ void tabSizeHint_data();
+ void tabSizeHint();
+
+ void mousePress_data();
+ void mousePress();
+
+private:
+ SubTabBar *_bar;
};
-// This will be called before the first test function is executed.
-// It is only called once.
+// -------------------------------------------
+
void TabBarTest::initTestCase()
{
+ MainWindow *w = new MainWindow;
+ MainView *mv = new MainView(w);
+ _bar = new SubTabBar(mv);
}
-
-// This will be called after the last test function is executed.
-// It is only called once.
void TabBarTest::cleanupTestCase()
{
+ delete _bar;
}
+// -------------------------------------------
-// This will be called before each test function is executed.
-void TabBarTest::init()
+void TabBarTest::tabSizeHint_data()
{
+ QTest::addColumn<int>("index");
+
+ QTest::newRow("1th") << 0;
+ QTest::newRow("2nd") << 1;
+ QTest::newRow("3rd") << 2;
+ QTest::newRow("4th") << 3;
+ QTest::newRow("5th") << 4;
+ QTest::newRow("6th") << 5;
+ QTest::newRow("7th") << 6;
+ QTest::newRow("8th") << 7;
+ QTest::newRow("9th") << 8;
+ QTest::newRow("10th") << 9;
}
-// This will be called after every test function.
-void TabBarTest::cleanup()
+void TabBarTest::tabSizeHint()
{
-}
+ QFETCH(int, index);
-// -------------------------------------------
-
-void TabBarTest::tabbar_data()
-{
+ QVERIFY(_bar->call_tabSizeHint(index).width() > 0);
}
-void TabBarTest::tabbar()
+void TabBarTest::mousePress_data()
{
- SubTabBar widget;
}
-// -------------------------------------------
-void TabBarTest::tabSizeHint_data()
+void TabBarTest::mousePress()
{
-// QTest::addColumn<int>("index");
-// QTest::newRow("0") << 0;
+// QTest::mousePress(_bar, Qt::MidButton);
+// // QCOMPARE(); ?
+//
+// QTest::mousePress(_bar, Qt::LeftButton);
+// // QCOMPARE(); ?
}
-
-// protected QSize tabSizeHint(int index) const
-void TabBarTest::tabSizeHint()
-{
- // Need fixes as our function uses MainView methods to determine size
-// QFETCH(int, index);
-// SubTabBar bar;
-// QVERIFY(bar.call_tabSizeHint(index).width() <= 250);
-}
-
// -------------------------------------------
QTEST_KDEMAIN(TabBarTest, GUI)
diff --git a/src/tests/urlbar_test.cpp b/src/tests/urlbar_test.cpp
new file mode 100644
index 00000000..7a1fb40b
--- /dev/null
+++ b/src/tests/urlbar_test.cpp
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2010 Andrea Diamantini <adjam7@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+
+
+#include <qtest_kde.h>
+
+#include <QtCore>
+#include <QtGui>
+#include <QtTest>
+
+#include "webpage.h"
+#include "webview.h"
+#include "webtab.h"
+
+#include "urlbar.h"
+
+
+class UrlBarTest : public QObject
+{
+ Q_OBJECT
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+private slots:
+
+private:
+ UrlBar *bar;
+ WebTab *tab;
+};
+
+
+// -------------------------------------------
+
+void UrlBarTest::initTestCase()
+{
+ tab = new WebTab;
+ bar = new UrlBar(tab);
+}
+
+
+void UrlBarTest::cleanupTestCase()
+{
+ delete bar;
+ delete tab;
+}
+
+
+// -------------------------------------------
+
+
+
+// -------------------------------------------
+
+QTEST_KDEMAIN(UrlBarTest,GUI)
+#include "urlbar_test.moc"
diff --git a/src/tests/walletbar_test.cpp b/src/tests/walletbar_test.cpp
new file mode 100644
index 00000000..ec9c3559
--- /dev/null
+++ b/src/tests/walletbar_test.cpp
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2010 Andrea Diamantini <adjam7@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+
+
+#include <qtest_kde.h>
+
+#include <QtCore>
+#include <QtGui>
+#include <QtTest>
+
+#include "walletbar.h"
+
+
+class WalletBarTest : public QObject
+{
+ Q_OBJECT
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+private slots:
+
+private:
+ WalletBar *bar;
+};
+
+
+// -------------------------------------------
+
+
+void WalletBarTest::initTestCase()
+{
+ QWidget *w = new QWidget;
+ bar = new WalletBar(w);
+}
+
+
+void WalletBarTest::cleanupTestCase()
+{
+ delete bar;
+}
+
+
+// -------------------------------------------
+
+
+
+// -------------------------------------------
+
+QTEST_KDEMAIN(WalletBarTest,GUI)
+#include "walletbar_test.moc"
diff --git a/src/tests/webpage_test.cpp b/src/tests/webpage_test.cpp
new file mode 100644
index 00000000..3051b8bf
--- /dev/null
+++ b/src/tests/webpage_test.cpp
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2010 Andrea Diamantini <adjam7@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+
+
+#include <qtest_kde.h>
+
+#include <QtCore>
+#include <QtGui>
+#include <QtTest>
+#include <QtWebKit>
+
+#include "webpage.h"
+#include "webview.h"
+#include "webtab.h"
+
+
+class WebPageTest : public QObject
+{
+ Q_OBJECT
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+private slots:
+ void manageNetworkErrors();
+ void downloadRequest();
+ void downloadAllContentsWithKGet();
+
+ void createWindow();
+ void acceptNavigationRequest();
+
+ void handleUnsupportedContent();
+
+ void loadFinished();
+
+private:
+ WebTab *tab;
+ WebPage *page;
+ WebView *view;
+};
+
+
+// -------------------------------------------
+
+
+void WebPageTest::initTestCase()
+{
+ tab = new WebTab;
+ view = tab->view();
+ page = tab->page();
+}
+
+
+void WebPageTest::cleanupTestCase()
+{
+ delete tab;
+}
+
+
+// -------------------------------------------
+
+
+void WebPageTest::manageNetworkErrors()
+{
+}
+
+void WebPageTest::downloadRequest()
+{
+}
+
+void WebPageTest::downloadAllContentsWithKGet()
+{
+}
+
+void WebPageTest::createWindow()
+{
+}
+
+void WebPageTest::acceptNavigationRequest()
+{
+}
+
+void WebPageTest::handleUnsupportedContent()
+{
+}
+
+void WebPageTest::loadFinished()
+{
+}
+
+// -------------------------------------------
+
+QTEST_KDEMAIN(WebPageTest,GUI)
+#include "webpage_test.moc"
diff --git a/src/tests/websnap_test.cpp b/src/tests/websnap_test.cpp
new file mode 100644
index 00000000..53fc1d4f
--- /dev/null
+++ b/src/tests/websnap_test.cpp
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2010 Andrea Diamantini <adjam7@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+
+
+#include <qtest_kde.h>
+
+#include <QtCore>
+#include <QtGui>
+#include <QtTest>
+#include <QtWebKit>
+
+#include "websnap.h"
+
+
+class WebSnapTest : public QObject
+{
+ Q_OBJECT
+
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+private slots:
+
+private:
+ WebSnap *snap;
+};
+
+
+// -------------------------------------------
+
+
+void WebSnapTest::initTestCase()
+{
+}
+
+
+void WebSnapTest::cleanupTestCase()
+{
+ delete snap;
+}
+
+
+// -------------------------------------------
+
+
+
+// -------------------------------------------
+
+QTEST_KDEMAIN(WebSnapTest,GUI)
+#include "websnap_test.moc"
diff --git a/src/tests/webtab_test.cpp b/src/tests/webtab_test.cpp
new file mode 100644
index 00000000..2c6edf35
--- /dev/null
+++ b/src/tests/webtab_test.cpp
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2010 Andrea Diamantini <adjam7@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+
+
+#include <qtest_kde.h>
+
+#include <QtCore>
+#include <QtGui>
+#include <QtTest>
+#include <QtWebKit>
+
+#include "webpage.h"
+#include "webview.h"
+#include "webtab.h"
+
+
+class WebTabTest : public QObject
+{
+ Q_OBJECT
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+private:
+ WebTab *tab;
+};
+
+
+// -------------------------------------------
+
+
+void WebTabTest::initTestCase()
+{
+ tab = new WebTab;
+}
+
+
+void WebTabTest::cleanupTestCase()
+{
+ delete tab;
+}
+
+
+// -------------------------------------------
+
+
+// -------------------------------------------
+
+QTEST_KDEMAIN(WebTabTest,GUI)
+#include "webtab_test.moc"
diff --git a/src/tests/webview_test.cpp b/src/tests/webview_test.cpp
new file mode 100644
index 00000000..11d1a46c
--- /dev/null
+++ b/src/tests/webview_test.cpp
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2010 Andrea Diamantini <adjam7@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+
+
+#include <qtest_kde.h>
+
+#include <QtCore>
+#include <QtGui>
+#include <QtTest>
+#include <QtWebKit>
+
+#include "webview.h"
+#include "webtab.h"
+
+
+class WebViewTest : public QObject
+{
+ Q_OBJECT
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+private slots:
+
+private:
+ WebView *view;
+ WebTab *tab;
+};
+
+
+// -------------------------------------------
+
+
+void WebViewTest::initTestCase()
+{
+ tab = new WebTab;
+ view = tab->view();
+}
+
+
+void WebViewTest::cleanupTestCase()
+{
+ delete tab;
+}
+
+
+// -------------------------------------------
+
+
+// -------------------------------------------
+
+QTEST_KDEMAIN(WebViewTest,GUI)
+#include "webview_test.moc"