ba048ea3997276a707fb3be5c65452b1f2213288
[WebKit-https.git] / WebKitTools / WebKitTestRunner / StringFunctions.h
1 /*
2  * Copyright (C) 2010 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef StringFunctions_h
27 #define StringFunctions_h
28
29 #include <JavaScriptCore/JSRetainPtr.h>
30 #include <JavaScriptCore/JavaScript.h>
31 #include <WebKit2/WKRetainPtr.h>
32 #include <WebKit2/WKString.h>
33 #include <WebKit2/WKStringCF.h>
34 #include <WebKit2/WKStringPrivate.h>
35 #include <WebKit2/WKURL.h>
36 #include <WebKit2/WKURLCF.h>
37 #include <sstream>
38 #include <string>
39 #include <wtf/OwnArrayPtr.h>
40 #include <wtf/PassOwnArrayPtr.h>
41 #include <wtf/Platform.h>
42 #include <wtf/RetainPtr.h>
43 #include <wtf/Vector.h>
44
45 namespace WTR {
46
47 // Conversion functions
48
49 inline WKRetainPtr<WKStringRef> toWK(JSStringRef string)
50 {
51     return WKRetainPtr<WKStringRef>(AdoptWK, WKStringCreateWithJSString(string));
52 }
53
54 inline WKRetainPtr<WKStringRef> toWK(JSRetainPtr<JSStringRef> string)
55 {
56     return toWK(string.get());
57 }
58
59 inline JSRetainPtr<JSStringRef> toJS(WKStringRef string)
60 {
61     return JSRetainPtr<JSStringRef>(Adopt, WKStringCopyJSString(string));
62 }
63
64 inline JSRetainPtr<JSStringRef> toJS(const WKRetainPtr<WKStringRef>& string)
65 {
66     return toJS(string.get());
67 }
68
69 inline std::string toSTD(WKStringRef string)
70 {
71     size_t bufferSize = WKStringGetMaximumUTF8CStringSize(string);
72     OwnArrayPtr<char> buffer = adoptArrayPtr(new char[bufferSize]);
73     size_t stringLength = WKStringGetUTF8CString(string, buffer.get(), bufferSize);
74     return std::string(buffer.get(), stringLength - 1);
75 }
76
77 inline std::string toSTD(const WKRetainPtr<WKStringRef>& string)
78 {
79     return toSTD(string.get());
80 }
81
82 // Streaming functions
83
84 inline std::ostream& operator<<(std::ostream& out, WKStringRef stringRef)
85 {
86     if (!stringRef)
87         return out;
88
89     return out << toSTD(stringRef);
90 }
91
92 inline std::ostream& operator<<(std::ostream& out, const WKRetainPtr<WKStringRef>& stringRef)
93 {
94     return out << stringRef.get();
95 }
96
97 // URL Functions
98
99 inline WKURLRef createWKURL(const char* pathOrURL)
100 {
101     RetainPtr<CFStringRef> pathOrURLCFString(AdoptCF, CFStringCreateWithCString(0, pathOrURL, kCFStringEncodingUTF8));
102     RetainPtr<CFURLRef> cfURL;
103     if (CFStringHasPrefix(pathOrURLCFString.get(), CFSTR("http://")) || CFStringHasPrefix(pathOrURLCFString.get(), CFSTR("https://")))
104         cfURL.adoptCF(CFURLCreateWithString(0, pathOrURLCFString.get(), 0));
105     else
106 #if PLATFORM(WIN)
107         cfURL.adoptCF(CFURLCreateWithFileSystemPath(0, pathOrURLCFString.get(), kCFURLWindowsPathStyle, false));
108 #else
109         cfURL.adoptCF(CFURLCreateWithFileSystemPath(0, pathOrURLCFString.get(), kCFURLPOSIXPathStyle, false));
110 #endif
111     return WKURLCreateWithCFURL(cfURL.get());
112 }
113
114 inline WKStringRef copyURLString(WKURLRef url)
115 {
116     RetainPtr<CFURLRef> cfURL(AdoptCF, WKURLCopyCFURL(0, url));
117     return WKStringCreateWithCFString(CFURLGetString(cfURL.get()));
118 }
119
120 } // namespace WTR
121
122 #endif // StringFunctions_h