32a35df070168c3af672cd0708266567e49582ea
[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 "Document.h"
34 #include "markup.h"
35 #include "RenderTreeAsText.h"
36
37 #include <io.h>
38 #include <fcntl.h>
39 #include <direct.h>
40
41 using namespace WebCore;
42
43 static void localFileTest(FrameWin* frame, char* path)
44 {
45     frame->begin();
46     FILE* file = fopen(path, "rb");
47     if (!file) {
48         fprintf(stderr, "Failed to open file: %s\n", path);
49         return;
50     }
51
52     char buffer[4000];
53     int newBytes = 0;
54     while ((newBytes = fread(buffer, 1, 4000, file)) > 0) {
55         frame->write(buffer, newBytes);
56     }
57     fclose(file);
58     frame->end();
59 }
60
61 static void dumpRenderTreeMain(FrameWin* frame)
62 {
63     char filenameBuffer[2048];
64     while (fgets(filenameBuffer, sizeof(filenameBuffer), stdin)) {
65         char *newLineCharacter = strchr(filenameBuffer, '\n');
66         if (newLineCharacter)
67             *newLineCharacter = '\0';
68         
69         if (!*filenameBuffer)
70             continue;
71             
72         localFileTest(frame, filenameBuffer);
73         DeprecatedString renderDump = externalRepresentation(frame->renderer());
74         puts(renderDump.ascii());
75         puts("#EOF\n");
76
77         fflush(stdout);
78     }
79 }
80
81 static void dumpRenderTreeToStdOut(FrameWin* frame)
82 {
83     DeprecatedString renderDump = externalRepresentation(frame->renderer());
84     printf("\n\nRenderTree:\n\n%s", renderDump.ascii());
85 }
86
87 static void serializeToStdOut(FrameWin* frame)
88 {
89     DeprecatedString markup = createMarkup(frame->document());
90     printf("Source:\n\n%s", markup.ascii());
91 }
92
93 int main(int argc, char* argv[])
94 {
95     Page* page = new Page();
96     FrameWin* frame = new FrameWin(page, 0, 0);
97     FrameView* frameView = new FrameView(frame);
98     frame->setView(frameView);
99     
100     if (argc == 2 && strcmp(argv[1], "-") == 0)
101         dumpRenderTreeMain(frame);
102     else {
103         // Default file for debugging in visual studio
104         char *fileToTest = "c:\\cygwin\\tmp\\test.html";
105         if (argc == 2)
106             fileToTest = argv[1];
107         localFileTest(frame, fileToTest);
108         serializeToStdOut(frame);
109         dumpRenderTreeToStdOut(frame);
110         if (argc != 2) {
111             // Keep window open for visual studio debugging.
112             fflush(stdout);
113             while(1);
114         }
115     }
116
117     return 0;
118 }