diff options
Diffstat (limited to 'tdehtml/test_regression.h')
-rw-r--r-- | tdehtml/test_regression.h | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/tdehtml/test_regression.h b/tdehtml/test_regression.h new file mode 100644 index 000000000..74f56cc72 --- /dev/null +++ b/tdehtml/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 <tdehtml_part.h> +#include <kurl.h> +#include <tqobject.h> +#include <kjs/ustring.h> +#include <kjs/object.h> +#include <kjs/interpreter.h> + +class RegressionTest; +class TQTimer; + +/** + * @internal + */ +class PartMonitor : public TQObject +{ + Q_OBJECT +public: + PartMonitor(KHTMLPart *_part); + ~PartMonitor(); + void waitForCompletion(); + static PartMonitor* sm_highestMonitor; + bool m_completed; + KHTMLPart *m_part; + int m_timer_waits; + TQTimer *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 TQObject +{ + Q_OBJECT +public: + + RegressionTest(KHTMLPart *part, const TQString &baseDir, const TQString &outputDir, + bool _genOutput, bool runJS, bool runHTML); + ~RegressionTest(); + + enum OutputType { DOMTree, RenderTree }; + TQString getPartOutput( OutputType type ); + void getPartDOMOutput( TQTextStream &outputStream, KHTMLPart* part, uint indent ); + void dumpRenderTree( TQTextStream &outputStream, KHTMLPart* part ); + void testStaticFile(const TQString& filename); + void testJSFile(const TQString& filename); + enum CheckResult { Failure = 0, Success = 1, Ignored = 2 }; + CheckResult checkOutput(const TQString& againstFilename); + CheckResult checkPaintdump( const TQString& againstFilename); + enum FailureType { NoFailure = 0, AllFailure = 1, RenderFailure = 2, DomFailure = 4, PaintFailure = 8, JSFailure = 16}; + bool runTests(TQString relPath = TQString::null, bool mustExist = false, int known_failure = NoFailure); + bool reportResult( bool passed, const TQString & description = TQString::null ); + bool reportResult(CheckResult result, const TQString & description = TQString::null ); + void createMissingDirs(const TQString &path); + + TQImage renderToImage(); + bool imageEqual( const TQImage &lhs, const TQImage &rhs ); + void createLink( const TQString& test, int failures ); + void doJavascriptReport( const TQString &test ); + void doFailureReport( const TQString& test, int failures ); + + KHTMLPart *m_part; + TQString m_baseDir; + TQString m_outputDir; + bool m_genOutput; + TQString m_currentBase; + + TQString m_currentOutput; + TQString m_currentCategory; + TQString m_currentTest; + TQPixmap* 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 TQString& description); + + static bool svnIgnored( const TQString &filename ); + +private: + void evalJS( KJS::ScriptInterpreter &interp, const TQString &filename, bool report ); // used by testJS + +private slots: + void slotOpenURL(const KURL &url, const KParts::URLArgs &args); + void resizeTopLevelWidget( int, int ); + +}; + +#endif |