2010-07-12 Maciej Stachowiak <mjs@apple.com>
[WebKit-https.git] / WebKitTools / WebKitTestRunner / TestController.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 TestController_h
27 #define TestController_h
28
29 #include <WebKit2/WKRetainPtr.h>
30 #include <string>
31 #include <vector>
32 #include <wtf/OwnPtr.h>
33
34 namespace WTR {
35
36 class TestInvocation;
37 class PlatformWebView;
38
39 class TestController {
40 public:
41     static TestController& shared();
42
43     // Initialize the TestController.
44     void initialize(int argc, const char *argv[]);
45
46     // Returns true if all the tests passed, false otherwise.
47     bool run();
48
49     bool verbose() const { return m_verbose; }
50
51     WKStringRef injectedBundlePath() { return m_injectedBundlePath.get(); }
52
53     PlatformWebView* mainWebView() { return m_mainWebView; }
54     WKPageNamespaceRef pageNamespace() { return m_pageNamespace.get(); }
55     WKContextRef context() { return m_context.get(); }
56
57 private:
58     TestController();
59     ~TestController();
60
61     void runTestingServerLoop();
62     void runTest(const char* pathOrURL);
63     
64     void initializeInjectedBundlePath();
65
66     // WKContextInjectedBundleClient
67     static void _didRecieveMessageFromInjectedBundle(WKContextRef context, WKStringRef message, const void*);
68     void didRecieveMessageFromInjectedBundle(WKStringRef message);
69
70     OwnPtr<TestInvocation> m_currentInvocation;
71
72     bool m_dumpTree;
73     bool m_dumpPixels;
74     bool m_threaded;
75     bool m_forceComplexText;
76     bool m_verbose;
77     bool m_printSeparators;
78     bool m_usingServerMode;
79     std::vector<std::string> m_paths;
80     WKRetainPtr<WKStringRef> m_injectedBundlePath;
81
82     PlatformWebView* m_mainWebView;
83     WKRetainPtr<WKContextRef> m_context;
84     WKRetainPtr<WKPageNamespaceRef> m_pageNamespace;
85 };
86
87 } // namespace WTR
88
89 #endif // TestController_h