2006-03-03 Eric Seidel <eseidel@apple.com>
[WebKit-https.git] / WebKitTools / DumpRenderTree / DumpRenderTree.vcproj / DumpRenderTree / DumpRenderTree.cpp
1 /*
2  * Copyright (C) 2005, 2006 Apple Computer, 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  *
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer. 
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution. 
13  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14  *     its contributors may be used to endorse or promote products derived
15  *     from this software without specific prior written permission. 
16  *
17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 #include "config.h"
30 #include "FrameWin.h"
31 #include "FrameView.h"
32 #include "Page.h"
33 #include "render_frames.h"
34 #include "DocumentImpl.h"
35 #include "markup.h"
36 #include "KWQRenderTreeDebug.h"
37
38 #include <io.h>
39 #include <fcntl.h>
40 #include <direct.h>
41
42 using namespace WebCore;
43
44 static void localFileTest(FrameWin* frame, char* path)
45 {
46     fprintf(stderr, "Testing file: %s\n", path);
47     frame->begin();
48     FILE* file = fopen(path, "rb");
49     if (!file) {
50         fprintf(stderr, "Failed to open file: %s\n", path);
51         return;
52     }
53
54     char buffer[4000];
55     int newBytes = 0;
56     while ((newBytes = fread(buffer, 1, 4000, file)) > 0) {
57         frame->write(buffer, newBytes);
58     }
59     fclose(file);
60     frame->end();
61 }
62
63 static void dumpRenderTreeMain(FrameWin* frame)
64 {
65     char filenameBuffer[2048];
66     while (fgets(filenameBuffer, sizeof(filenameBuffer), stdin)) {
67         char *newLineCharacter = strchr(filenameBuffer, '\n');
68         if (newLineCharacter)
69             *newLineCharacter = '\0';
70         
71         if (!*filenameBuffer)
72             continue;
73             
74         localFileTest(frame, filenameBuffer);
75         QString renderDump = externalRepresentation(frame->renderer());
76         puts(renderDump.ascii());
77         puts("#EOF\n");
78
79         fflush(stdout);
80     }
81 }
82
83 static void dumpRenderTreeToStdOut(FrameWin* frame)
84 {
85     QString renderDump = externalRepresentation(frame->renderer());
86     printf("\n\nRenderTree:\n\n%s", renderDump.ascii());
87 }
88
89 static void serializeToStdOut(FrameWin* frame)
90 {
91     QString markup = createMarkup(frame->document());
92     printf("Source:\n\n%s", markup.ascii());
93 }
94
95 int main(int argc, char* argv[])
96 {
97     Page* page = new Page();
98     FrameWin* frame = new FrameWin(page, 0);
99     FrameView* frameView = new FrameView(frame);
100     frame->setView(frameView);
101     
102     if (argc == 2 && strcmp(argv[1], "-") == 0)
103         dumpRenderTreeMain(frame);
104     else {
105         // Default file for debugging in visual studio
106         char *fileToTest = "c:\\cygwin\\tmp\\test.html";
107         if (argc == 2)
108             fileToTest = argv[1];
109         localFileTest(frame, fileToTest);
110         serializeToStdOut(frame);
111         dumpRenderTreeToStdOut(frame);
112         if (argc != 2) {
113             // Keep window open for visual studio debugging.
114             fflush(stdout);
115             while(1);
116         }
117     }
118
119     return 0;
120 }