summaryrefslogtreecommitdiffstats
path: root/khtml/test_regression.h
diff options
context:
space:
mode:
Diffstat (limited to 'khtml/test_regression.h')
-rw-r--r--khtml/test_regression.h194
1 files changed, 194 insertions, 0 deletions
diff --git a/khtml/test_regression.h b/khtml/test_regression.h
new file mode 100644
index 000000000..c75328a09
--- /dev/null
+++ b/khtml/test_regression.h
@@ -0,0 +1,194 @@
+/**
+ * This file is part of the KDE project
+ *
+ * Copyright (C) 2001,2003 Peter Kelly (pmk@post.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef TEST_REGRESSION_H
+#define TEST_REGRESSION_H
+
+#include <khtml_part.h>
+#include <kurl.h>
+#include <qobject.h>
+#include <kjs/ustring.h>
+#include <kjs/object.h>
+#include <kjs/interpreter.h>
+
+class RegressionTest;
+class QTimer;
+
+/**
+ * @internal
+ */
+class PartMonitor : public QObject
+{
+ Q_OBJECT
+public:
+ PartMonitor(KHTMLPart *_part);
+ ~PartMonitor();
+ void waitForCompletion();
+ static PartMonitor* sm_highestMonitor;
+ bool m_completed;
+ KHTMLPart *m_part;
+ int m_timer_waits;
+ QTimer *m_timeout_timer;
+public slots:
+ void partCompleted();
+ void timeout();
+ void finishTimers();
+};
+
+/**
+ * @internal
+ */
+class RegTestObject : public KJS::ObjectImp
+{
+public:
+ RegTestObject(KJS::ExecState *exec, RegressionTest *_regTest);
+
+private:
+ RegressionTest *m_regTest;
+};
+
+/**
+ * @internal
+ */
+class RegTestFunction : public KJS::ObjectImp
+{
+public:
+ RegTestFunction(KJS::ExecState *exec, RegressionTest *_regTest, int _id, int length);
+
+ bool implementsCall() const;
+ KJS::Value call(KJS::ExecState *exec, KJS::Object &thisObj, const KJS::List &args);
+
+ enum { Print, ReportResult, CheckOutput, Quit };
+
+private:
+ RegressionTest *m_regTest;
+ int id;
+};
+
+/**
+ * @internal
+ */
+class KHTMLPartObject : public KJS::ObjectImp
+{
+public:
+ KHTMLPartObject(KJS::ExecState *exec, KHTMLPart *_part);
+
+ virtual KJS::Value get(KJS::ExecState *exec, const KJS::Identifier &propertyName) const;
+
+private:
+ KHTMLPart *m_part;
+};
+
+/**
+ * @internal
+ */
+class KHTMLPartFunction : public KJS::ObjectImp
+{
+public:
+ KHTMLPartFunction(KJS::ExecState *exec, KHTMLPart *_part, int _id, int length);
+
+ bool implementsCall() const;
+ KJS::Value call(KJS::ExecState *exec, KJS::Object &thisObj, const KJS::List &args);
+
+ enum { OpenPage, OpenPageAsUrl, Begin, Write, End, ExecuteScript, ProcessEvents };
+private:
+ KHTMLPart *m_part;
+ int id;
+};
+
+namespace KJS {
+class ScriptInterpreter;
+}
+
+/**
+ * @internal
+ */
+class RegressionTest : public QObject
+{
+ Q_OBJECT
+public:
+
+ RegressionTest(KHTMLPart *part, const QString &baseDir, const QString &outputDir,
+ bool _genOutput, bool runJS, bool runHTML);
+ ~RegressionTest();
+
+ enum OutputType { DOMTree, RenderTree };
+ QString getPartOutput( OutputType type );
+ void getPartDOMOutput( QTextStream &outputStream, KHTMLPart* part, uint indent );
+ void dumpRenderTree( QTextStream &outputStream, KHTMLPart* part );
+ void testStaticFile(const QString& filename);
+ void testJSFile(const QString& filename);
+ enum CheckResult { Failure = 0, Success = 1, Ignored = 2 };
+ CheckResult checkOutput(const QString& againstFilename);
+ CheckResult checkPaintdump( const QString& againstFilename);
+ enum FailureType { NoFailure = 0, AllFailure = 1, RenderFailure = 2, DomFailure = 4, PaintFailure = 8, JSFailure = 16};
+ bool runTests(QString relPath = QString::null, bool mustExist = false, int known_failure = NoFailure);
+ bool reportResult( bool passed, const QString & description = QString::null );
+ bool reportResult(CheckResult result, const QString & description = QString::null );
+ void createMissingDirs(const QString &path);
+
+ QImage renderToImage();
+ bool imageEqual( const QImage &lhs, const QImage &rhs );
+ void createLink( const QString& test, int failures );
+ void doJavascriptReport( const QString &test );
+ void doFailureReport( const QString& test, int failures );
+
+ KHTMLPart *m_part;
+ QString m_baseDir;
+ QString m_outputDir;
+ bool m_genOutput;
+ QString m_currentBase;
+
+ QString m_currentOutput;
+ QString m_currentCategory;
+ QString m_currentTest;
+ QPixmap* m_paintBuffer;
+
+ bool m_getOutput;
+ bool m_runJS;
+ bool m_runHTML;
+ int m_passes_work;
+ int m_passes_fail;
+ int m_failures_work;
+ int m_failures_fail;
+ int m_errors;
+ bool saw_failure;
+ bool ignore_errors;
+ int m_known_failures;
+
+ static RegressionTest *curr;
+
+private:
+ void printDescription(const QString& description);
+
+ static bool svnIgnored( const QString &filename );
+
+private:
+ void evalJS( KJS::ScriptInterpreter &interp, const QString &filename, bool report ); // used by testJS
+
+private slots:
+ void slotOpenURL(const KURL &url, const KParts::URLArgs &args);
+ void resizeTopLevelWidget( int, int );
+
+};
+
+#endif