diff options
author | Konstantin Tokarev <annulen@yandex.ru> | 2017-10-18 16:01:48 +0300 |
---|---|---|
committer | Konstantin Tokarev <annulen@yandex.ru> | 2017-10-20 09:53:13 +0000 |
commit | f5345badaeefac7c03c8a26dea6b89706871c3fe (patch) | |
tree | bc863fadf9ec8869690fa51f7e7e63ec2ad60294 /Tools | |
parent | 778e0c7c940f8a22f9a43290aef378fb707ca088 (diff) |
Import WebKit commit e89cea5f01479652674d3c24b2f387eb0987d0a1
Change-Id: Ifc00865ceeb5b83b7990f91af7dbbd1a05df1c30
Reviewed-by: Konstantin Tokarev <annulen@yandex.ru>
Diffstat (limited to 'Tools')
-rw-r--r-- | Tools/QtTestBrowser/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Tools/QtTestBrowser/launcherwindow.cpp | 2 | ||||
-rw-r--r-- | Tools/QtTestBrowser/qttestbrowser.cpp | 4 | ||||
-rw-r--r-- | Tools/TestWebKitAPI/PlatformQt.cmake | 1 | ||||
-rw-r--r-- | Tools/TestWebKitAPI/Tests/WTF/HashSet.cpp | 1 | ||||
-rw-r--r-- | Tools/TestWebKitAPI/Tests/WebCore/TextCodec.cpp | 236 |
6 files changed, 241 insertions, 4 deletions
diff --git a/Tools/QtTestBrowser/CMakeLists.txt b/Tools/QtTestBrowser/CMakeLists.txt index a091c9541..ccd8e0ff2 100644 --- a/Tools/QtTestBrowser/CMakeLists.txt +++ b/Tools/QtTestBrowser/CMakeLists.txt @@ -55,7 +55,6 @@ if (Qt5OpenGL_FOUND) list(APPEND QtTestBrowser_LIBRARIES ${Qt5OpenGL_LIBRARIES} ) - add_definitions(-DQT_CONFIGURED_WITH_OPENGL) endif () if (ENABLE_TEST_SUPPORT) diff --git a/Tools/QtTestBrowser/launcherwindow.cpp b/Tools/QtTestBrowser/launcherwindow.cpp index 59851883e..716a6e3e8 100644 --- a/Tools/QtTestBrowser/launcherwindow.cpp +++ b/Tools/QtTestBrowser/launcherwindow.cpp @@ -168,9 +168,9 @@ void LauncherWindow::initializeView() } else { WebViewGraphicsBased* view = new WebViewGraphicsBased(splitter); m_view = view; -#ifndef QT_NO_OPENGL if (!m_windowOptions.useQOpenGLWidgetViewport) toggleQGLWidgetViewport(m_windowOptions.useQGLWidgetViewport); +#ifdef QT_OPENGL_LIB if (!m_windowOptions.useQGLWidgetViewport) toggleQOpenGLWidgetViewport(m_windowOptions.useQOpenGLWidgetViewport); #endif diff --git a/Tools/QtTestBrowser/qttestbrowser.cpp b/Tools/QtTestBrowser/qttestbrowser.cpp index 24ca97a7a..52d9066b0 100644 --- a/Tools/QtTestBrowser/qttestbrowser.cpp +++ b/Tools/QtTestBrowser/qttestbrowser.cpp @@ -135,7 +135,7 @@ void LauncherApplication::handleUserOptions() qDebug() << "Usage:" << programName.toLatin1().data() << "[-graphicsbased]" << "[-no-compositing]" -#if defined(QT_CONFIGURED_WITH_OPENGL) +#ifdef QT_OPENGL_LIB << "[-gl-viewport]" #endif << "[-opengl-viewport]" @@ -240,7 +240,7 @@ void LauncherApplication::handleUserOptions() windowOptions.viewportUpdateMode = static_cast<QGraphicsView::ViewportUpdateMode>(idx); } -#ifdef QT_CONFIGURED_WITH_OPENGL +#ifdef QT_OPENGL_LIB if (args.contains("-gl-viewport") || defaultForAnimations) { requiresGraphicsView("-gl-viewport"); windowOptions.useQGLWidgetViewport = true; diff --git a/Tools/TestWebKitAPI/PlatformQt.cmake b/Tools/TestWebKitAPI/PlatformQt.cmake index fe3808685..c054c661b 100644 --- a/Tools/TestWebKitAPI/PlatformQt.cmake +++ b/Tools/TestWebKitAPI/PlatformQt.cmake @@ -46,6 +46,7 @@ add_executable(TestWebCore ${TESTWEBKITAPI_DIR}/Tests/WebCore/SharedBuffer.cpp ${TESTWEBKITAPI_DIR}/Tests/WebCore/FileSystem.cpp ${TESTWEBKITAPI_DIR}/Tests/WebCore/PublicSuffix.cpp + ${TESTWEBKITAPI_DIR}/Tests/WebCore/TextCodec.cpp ) target_link_libraries(TestWebCore ${test_webcore_LIBRARIES}) diff --git a/Tools/TestWebKitAPI/Tests/WTF/HashSet.cpp b/Tools/TestWebKitAPI/Tests/WTF/HashSet.cpp index 1d6ffc039..b7dda8691 100644 --- a/Tools/TestWebKitAPI/Tests/WTF/HashSet.cpp +++ b/Tools/TestWebKitAPI/Tests/WTF/HashSet.cpp @@ -27,6 +27,7 @@ #include "Counters.h" #include "MoveOnly.h" +#include <functional> #include <wtf/HashSet.h> #include <wtf/RefPtr.h> diff --git a/Tools/TestWebKitAPI/Tests/WebCore/TextCodec.cpp b/Tools/TestWebKitAPI/Tests/WebCore/TextCodec.cpp new file mode 100644 index 000000000..e33d76027 --- /dev/null +++ b/Tools/TestWebKitAPI/Tests/WebCore/TextCodec.cpp @@ -0,0 +1,236 @@ +/* + * Copyright (C) 2017 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" + +#include <WebCore/TextEncoding.h> +#include <WebCore/TextEncodingRegistry.h> +#include <wtf/text/StringBuilder.h> + +namespace TestWebKitAPI { + +// Expects hex bytes with optional spaces between them. +// Returns an empty vector if it encounters non-hex-digit characters. +static Vector<char> decodeHexTestBytes(const char* input) +{ + Vector<char> result; + for (size_t i = 0; input[i]; ) { + if (!isASCIIHexDigit(input[i])) + return { }; + if (!isASCIIHexDigit(input[i + 1])) + return { }; + result.append(toASCIIHexValue(input[i], input[i + 1])); + i += 2; + if (input[i] == ' ') + ++i; + } + return result; +} + +// The word "escape" here just means a format easy to read in test results. +// It doesn't have to be a format suitable for other users or even one +// that is completely unambiguous. +static const char* escapeNonASCIIPrintableCharacters(StringView string) +{ + static char resultBuffer[100]; + size_t i = 0; + auto append = [&i] (char character) { + if (i < sizeof(resultBuffer)) + resultBuffer[i++] = character; + }; + auto appendNibble = [append] (char nibble) { + if (nibble) + append(lowerNibbleToASCIIHexDigit(nibble)); + }; + auto appendLastNibble = [append] (char nibble) { + append(lowerNibbleToASCIIHexDigit(nibble)); + }; + for (auto character : string.codePoints()) { + if (isASCIIPrintable(character)) + append(character); + else { + append('{'); + for (unsigned i = 32 - 4; i; i -= 4) + appendNibble(character >> i); + appendLastNibble(character); + append('}'); + } + } + if (i == sizeof(resultBuffer)) + return ""; + resultBuffer[i] = '\0'; + return resultBuffer; +} + +static const char* testDecode(const char* encodingName, std::initializer_list<const char*> inputs) +{ + StringBuilder resultBuilder; + auto codec = newTextCodec(WebCore::TextEncoding { encodingName }); + size_t size = inputs.size(); + for (size_t i = 0; i < size; ++i) { + auto vector = decodeHexTestBytes(inputs.begin()[i]); + bool last = i == size - 1; + resultBuilder.append(escapeNonASCIIPrintableCharacters(codec->decode(vector.data(), vector.size(), last))); + } + return escapeNonASCIIPrintableCharacters(resultBuilder.toString()); +} + +TEST(TextCodec, UTF8) +{ + EXPECT_STREQ("", testDecode("UTF-8", { "" })); + + EXPECT_STREQ("{0}", testDecode("UTF-8", { "00" })); + + EXPECT_STREQ("a", testDecode("UTF-8", { "61" })); + EXPECT_STREQ("a", testDecode("UTF-8", { "", "61" })); + EXPECT_STREQ("a", testDecode("UTF-8", { "61", "" })); + EXPECT_STREQ("a", testDecode("UTF-8", { "", "61", "" })); + + EXPECT_STREQ("{B6}", testDecode("UTF-8", { "C2 B6" })); + EXPECT_STREQ("{B6}", testDecode("UTF-8", { "C2", "B6" })); + EXPECT_STREQ("{B6}", testDecode("UTF-8", { "", "C2", "", "B6", "" })); + EXPECT_STREQ("x{B6}", testDecode("UTF-8", { "78 C2 B6" })); + EXPECT_STREQ("{B6}x", testDecode("UTF-8", { "C2 B6 78" })); + + EXPECT_STREQ("{2603}", testDecode("UTF-8", { "E2 98 83" })); + EXPECT_STREQ("{2603}", testDecode("UTF-8", { "E2", "98", "83" })); + EXPECT_STREQ("{2603}", testDecode("UTF-8", { "", "E2", "", "98", "83" })); + EXPECT_STREQ("{2603}", testDecode("UTF-8", { "E2 98", "83" })); + EXPECT_STREQ("{2603}", testDecode("UTF-8", { "", "E2 98", "", "83", "" })); + EXPECT_STREQ("{2603}", testDecode("UTF-8", { "E2", "9883" })); + EXPECT_STREQ("{2603}", testDecode("UTF-8", { "", "E2", "", "9883", "" })); + EXPECT_STREQ("x{2603}", testDecode("UTF-8", { "78 E2 98 83" })); + EXPECT_STREQ("{2603}x", testDecode("UTF-8", { "E2 98 83 78" })); + + EXPECT_STREQ("{1F4A9}", testDecode("UTF-8", { "F0 9F 92 A9" })); + EXPECT_STREQ("{1F4A9}", testDecode("UTF-8", { "F0", "9F", "92", "A9" })); + EXPECT_STREQ("{1F4A9}", testDecode("UTF-8", { "", "F0", "", "9F", "", "92", "" , "A9", "" })); + EXPECT_STREQ("{1F4A9}", testDecode("UTF-8", { "F09F92", "A9" })); + EXPECT_STREQ("x{1F4A9}", testDecode("UTF-8", { "78 F0 9F 92 A9" })); + EXPECT_STREQ("{1F4A9}x", testDecode("UTF-8", { "F0 9F 92 A9 78" })); +} + +TEST(TextCodec, UTF8InvalidSequences) +{ + EXPECT_STREQ("{FFFD}?", testDecode("UTF-8", { "E0 A5 3F" })); + EXPECT_STREQ("{FFFD}?", testDecode("UTF-8", { "E0 A5", "3F" })); + EXPECT_STREQ("{FFFD}?", testDecode("UTF-8", { "E0", "A5 3F" })); + EXPECT_STREQ("{FFFD}?", testDecode("UTF-8", { "E0", "A5", "3F" })); + EXPECT_STREQ("{FFFD}?", testDecode("UTF-8", { "E0", "", "A5", "", "3F" })); + EXPECT_STREQ("{FFFD}?", testDecode("UTF-8", { "E0", "", "A5", "", "3F", "" })); + EXPECT_STREQ("{FFFD}?", testDecode("UTF-8", { "", "E0", "", "A5", "", "3F", "" })); + + EXPECT_STREQ("a{FFFD}?", testDecode("UTF-8", { "61 E0 A5 3F" })); + EXPECT_STREQ("a{FFFD}?", testDecode("UTF-8", { "61 E0 A5", "3F" })); + EXPECT_STREQ("a{FFFD}?", testDecode("UTF-8", { "61 E0", "A5 3F" })); + EXPECT_STREQ("a{FFFD}?", testDecode("UTF-8", { "61 E0", "A5", "3F" })); + + EXPECT_STREQ("{B6}{FFFD}?", testDecode("UTF-8", { "C2 B6 E0 A5 3F" })); + EXPECT_STREQ("{B6}{FFFD}?", testDecode("UTF-8", { "C2 B6 E0 A5", "3F" })); + EXPECT_STREQ("{B6}{FFFD}?", testDecode("UTF-8", { "C2 B6 E0", "A5 3F" })); + EXPECT_STREQ("{B6}{FFFD}?", testDecode("UTF-8", { "C2 B6 E0", "A5", "3F" })); + + EXPECT_STREQ("{FFFD}", testDecode("UTF-8", { "C2" })); + EXPECT_STREQ("{FFFD}", testDecode("UTF-8", { "E2" })); + EXPECT_STREQ("{FFFD}", testDecode("UTF-8", { "E2 98" })); + EXPECT_STREQ("{FFFD}", testDecode("UTF-8", { "F0" })); + EXPECT_STREQ("{FFFD}", testDecode("UTF-8", { "F0 9F" })); + EXPECT_STREQ("{FFFD}", testDecode("UTF-8", { "F0 9F 92" })); + + EXPECT_STREQ("{FFFD}", testDecode("UTF-8", { "E2", "98" })); + EXPECT_STREQ("{FFFD}", testDecode("UTF-8", { "F0", "9F" })); + EXPECT_STREQ("{FFFD}", testDecode("UTF-8", { "F0 9F", "92" })); + EXPECT_STREQ("{FFFD}", testDecode("UTF-8", { "F0", "9F92" })); + EXPECT_STREQ("{FFFD}", testDecode("UTF-8", { "F0", "9F", "92" })); + + EXPECT_STREQ("{FFFD}{FFFD}", testDecode("UTF-8", { "C0 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "E0 80 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F0 80 80 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F8 80 80 80 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "FC 80 80 80 80 80" })); + + EXPECT_STREQ("{FFFD}{FFFD}", testDecode("UTF-8", { "C1 BF" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "E0 81 BF" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F0 80 81 BF" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F8 80 80 81 BF" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "FC 80 80 80 81 BF" })); + + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "E0 82 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F0 80 82 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F8 80 80 82 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "FC 80 80 80 82 80" })); + + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "E0 9F BF" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F0 80 9F BF" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F8 80 80 9F BF" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "FC 80 80 80 9F BF" })); + + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F0 80 A0 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F8 80 80 A0 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "FC 80 80 80 A0 80" })); + + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F0 8F BF BF" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F8 80 8F BF BF" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "FC 80 80 8F BF BF" })); + + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F8 80 90 80 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "FC 80 80 90 80 80" })); + + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F8 84 8F BF BF" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "FC 80 84 8F BF BF" })); + + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F4 90 80 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "FB BF BF BF BF" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "FD BF BF BF BF BF" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "ED A0 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "ED BF BF" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "ED A0 BD ED B2 A9" })); + + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F8 84 90 80 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "FC 80 84 90 80 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F0 8D A0 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F0 8D BF BF" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "F0 8D A0 BD F0 8D B2 A9" })); + + EXPECT_STREQ("{FFFD}", testDecode("UTF-8", { "80" })); + EXPECT_STREQ("{FFFD}{FFFD}", testDecode("UTF-8", { "80 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "80 80 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "80 80 80 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "80 80 80 80 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "80 80 80 80 80 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "80 80 80 80 80 80 80" })); + EXPECT_STREQ("{B6}{FFFD}", testDecode("UTF-8", { "C2 B6 80" })); + EXPECT_STREQ("{2603}{FFFD}", testDecode("UTF-8", { "E2 98 83 80" })); + EXPECT_STREQ("{1F4A9}{FFFD}", testDecode("UTF-8", { "F0 9F 92 A9 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "FB BF BF BF BF 80" })); + EXPECT_STREQ("{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}{FFFD}", testDecode("UTF-8", { "FD BF BF BF BF BF 80" })); + + EXPECT_STREQ("{FFFD}", testDecode("UTF-8", { "FE" })); + EXPECT_STREQ("{FFFD}{FFFD}", testDecode("UTF-8", { "FE 80" })); + EXPECT_STREQ("{FFFD}", testDecode("UTF-8", { "FF" })); + EXPECT_STREQ("{FFFD}{FFFD}", testDecode("UTF-8", { "FF 80" })); +} + +} |