From 4fb82c2e7ce74b1903de0ef2ecb9f75d227c135f Mon Sep 17 00:00:00 2001 From: John Bintz Date: Wed, 3 Aug 2011 12:26:39 -0400 Subject: [PATCH] more qt testing work --- Guardfile | 8 +- .../ConsoleOutput.cpp | 39 +++++++++ ext/jasmine-webkit-specrunner/ConsoleOutput.h | 26 ++++++ .../ConsoleOutput_test.cpp | 36 ++++++++ .../ConsoleOutput_test.h | 25 ++++++ .../ConsoleOutput_test.pro | 7 ++ .../HeadlessSpecRunner/ConsoleOutput.cpp | 0 .../HeadlessSpecRunner/ConsoleOutput.h | 14 ---- .../{HeadlessSpecRunner => }/Page.cpp | 0 .../{HeadlessSpecRunner => }/Page.h | 0 .../{Test => }/Page_test.cpp | 6 +- .../{Test => }/Page_test.h | 2 +- ext/jasmine-webkit-specrunner/Page_test.moc | 79 ------------------ ext/jasmine-webkit-specrunner/Page_test.pro | 6 ++ .../{HeadlessSpecRunner => }/Runner.cpp | 10 +-- .../{HeadlessSpecRunner => }/Runner.h | 3 + ext/jasmine-webkit-specrunner/common.pri | 9 ++ ext/jasmine-webkit-specrunner/extconf.rb | 3 +- .../jasmine-webkit-specrunner-test | Bin 63680 -> 0 bytes ext/jasmine-webkit-specrunner/jhw-test | Bin 0 -> 69912 bytes ext/jasmine-webkit-specrunner/specrunner.cpp | 4 +- ext/jasmine-webkit-specrunner/specrunner.pro | 10 +-- .../specrunner_test.cpp | 10 --- .../specrunner_test.pro | 16 ---- ext/jasmine-webkit-specrunner/test.pri | 3 + ext/jasmine-webkit-specrunner/test.rb | 9 ++ 26 files changed, 182 insertions(+), 143 deletions(-) create mode 100644 ext/jasmine-webkit-specrunner/ConsoleOutput.cpp create mode 100644 ext/jasmine-webkit-specrunner/ConsoleOutput.h create mode 100644 ext/jasmine-webkit-specrunner/ConsoleOutput_test.cpp create mode 100644 ext/jasmine-webkit-specrunner/ConsoleOutput_test.h create mode 100644 ext/jasmine-webkit-specrunner/ConsoleOutput_test.pro delete mode 100644 ext/jasmine-webkit-specrunner/HeadlessSpecRunner/ConsoleOutput.cpp delete mode 100644 ext/jasmine-webkit-specrunner/HeadlessSpecRunner/ConsoleOutput.h rename ext/jasmine-webkit-specrunner/{HeadlessSpecRunner => }/Page.cpp (100%) rename ext/jasmine-webkit-specrunner/{HeadlessSpecRunner => }/Page.h (100%) rename ext/jasmine-webkit-specrunner/{Test => }/Page_test.cpp (93%) rename ext/jasmine-webkit-specrunner/{Test => }/Page_test.h (94%) delete mode 100644 ext/jasmine-webkit-specrunner/Page_test.moc create mode 100644 ext/jasmine-webkit-specrunner/Page_test.pro rename ext/jasmine-webkit-specrunner/{HeadlessSpecRunner => }/Runner.cpp (97%) rename ext/jasmine-webkit-specrunner/{HeadlessSpecRunner => }/Runner.h (94%) create mode 100644 ext/jasmine-webkit-specrunner/common.pri delete mode 100755 ext/jasmine-webkit-specrunner/jasmine-webkit-specrunner-test create mode 100755 ext/jasmine-webkit-specrunner/jhw-test delete mode 100644 ext/jasmine-webkit-specrunner/specrunner_test.cpp delete mode 100644 ext/jasmine-webkit-specrunner/specrunner_test.pro create mode 100644 ext/jasmine-webkit-specrunner/test.pri create mode 100644 ext/jasmine-webkit-specrunner/test.rb diff --git a/Guardfile b/Guardfile index f0c26ca..1488233 100644 --- a/Guardfile +++ b/Guardfile @@ -4,7 +4,11 @@ # guard 'shell' do - watch(%r{ext/jasmine-webkit-specrunner/.*\.(cpp|h)}) { compile } + watch(%r{ext/jasmine-webkit-specrunner/.*\.(cpp|h|pro|pri)}) { |m| + if !m[0]['moc_'] + compile + end + } end # A sample Guardfile # More info at https://github.com/guard/guard#readme @@ -22,7 +26,7 @@ guard 'jasmine-headless-webkit', :all_on_start => false do end def compile - system %{cd ext/jasmine-webkit-specrunner && ruby extconf.rb} + system %{cd ext/jasmine-webkit-specrunner && ruby test.rb && ruby extconf.rb} end compile diff --git a/ext/jasmine-webkit-specrunner/ConsoleOutput.cpp b/ext/jasmine-webkit-specrunner/ConsoleOutput.cpp new file mode 100644 index 0000000..431aacd --- /dev/null +++ b/ext/jasmine-webkit-specrunner/ConsoleOutput.cpp @@ -0,0 +1,39 @@ +#include "ConsoleOutput.h" + +namespace HeadlessSpecRunner { + ConsoleOutput::ConsoleOutput() : QObject(), + showColors(false) { + outputIO = &std::cout; + } + + void ConsoleOutput::passed(const QString &specDetail) { + green(); + *outputIO << '.'; + clear(); + fflush(stdout); + + successes.push(specDetail); + } + + void ConsoleOutput::failed(const QString &specDetail) + { + red(); + *outputIO << 'F'; + clear(); + fflush(stdout); + + failures.push(specDetail); + } + + void ConsoleOutput::green() { + if (showColors) std::cout << "\033[0;32m"; + } + + void ConsoleOutput::clear() { + if (showColors) std::cout << "\033[m"; + } + + void ConsoleOutput::red() { + if (showColors) std::cout << "\033[0;31m"; + } +} diff --git a/ext/jasmine-webkit-specrunner/ConsoleOutput.h b/ext/jasmine-webkit-specrunner/ConsoleOutput.h new file mode 100644 index 0000000..d63e3ac --- /dev/null +++ b/ext/jasmine-webkit-specrunner/ConsoleOutput.h @@ -0,0 +1,26 @@ +#ifndef JHW_CONSOLE_OUTPUT +#define JHW_CONSOLE_OUTPUT + +#include +#include +#include + +namespace HeadlessSpecRunner { + class ConsoleOutput : public QObject { + Q_OBJECT + public: + ConsoleOutput(); + void passed(const QString &specDetail); + void failed(const QString &specDetail); + std::ostream *outputIO; + QStack successes; + QStack failures; + private: + bool showColors; + void green(); + void clear(); + void red(); + }; +} + +#endif diff --git a/ext/jasmine-webkit-specrunner/ConsoleOutput_test.cpp b/ext/jasmine-webkit-specrunner/ConsoleOutput_test.cpp new file mode 100644 index 0000000..6917615 --- /dev/null +++ b/ext/jasmine-webkit-specrunner/ConsoleOutput_test.cpp @@ -0,0 +1,36 @@ +#include + +#include "ConsoleOutput.h" +#include "ConsoleOutput_test.h" + +using namespace std; + +namespace HeadlessSpecRunner { + ConsoleOutputTest::ConsoleOutputTest() : QObject() { + } + + void ConsoleOutputTest::testPassed() { + stringstream buffer; + HeadlessSpecRunner::ConsoleOutput output; + + output.outputIO = &buffer; + output.passed("test"); + QVERIFY(buffer.str() == "."); + QVERIFY(output.successes.size() == 1); + QVERIFY(output.failures.size() == 0); + } + + void ConsoleOutputTest::testFailed() { + stringstream buffer; + HeadlessSpecRunner::ConsoleOutput output; + + output.outputIO = &buffer; + output.failed("test"); + QVERIFY(buffer.str() == "F"); + QVERIFY(output.successes.size() == 0); + QVERIFY(output.failures.size() == 1); + } +} + +QTEST_MAIN(HeadlessSpecRunner::ConsoleOutputTest); + diff --git a/ext/jasmine-webkit-specrunner/ConsoleOutput_test.h b/ext/jasmine-webkit-specrunner/ConsoleOutput_test.h new file mode 100644 index 0000000..455113a --- /dev/null +++ b/ext/jasmine-webkit-specrunner/ConsoleOutput_test.h @@ -0,0 +1,25 @@ +#ifndef JHW_TEST_PAGE +#define JHW_TEST_PAGE + +#include +#include +#include +#include + +#include "ConsoleOutput.h" + +namespace HeadlessSpecRunner { + class ConsoleOutputTest : public QObject { + Q_OBJECT + public: + ConsoleOutputTest(); + + private slots: + void testPassed(); + void testFailed(); + }; +} + +#endif + + diff --git a/ext/jasmine-webkit-specrunner/ConsoleOutput_test.pro b/ext/jasmine-webkit-specrunner/ConsoleOutput_test.pro new file mode 100644 index 0000000..7b09285 --- /dev/null +++ b/ext/jasmine-webkit-specrunner/ConsoleOutput_test.pro @@ -0,0 +1,7 @@ +include(common.pri) +include(test.pri) + +SOURCES += ConsoleOutput_test.cpp +HEADERS += ConsoleOutput_test.h + + diff --git a/ext/jasmine-webkit-specrunner/HeadlessSpecRunner/ConsoleOutput.cpp b/ext/jasmine-webkit-specrunner/HeadlessSpecRunner/ConsoleOutput.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/ext/jasmine-webkit-specrunner/HeadlessSpecRunner/ConsoleOutput.h b/ext/jasmine-webkit-specrunner/HeadlessSpecRunner/ConsoleOutput.h deleted file mode 100644 index 86238e5..0000000 --- a/ext/jasmine-webkit-specrunner/HeadlessSpecRunner/ConsoleOutput.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef JHW_CONSOLE_REPORTER -#define JHW_CONSOLE_REPORTER - -namespace HeadlessSpecRunner { - class ConsoleReporter : public QObject { - Q_OBJECT - public: - ConsoleReporter(); - void passed(const QString &specDetail); - void failed(const QString &specDetail); - } -} - -#endif diff --git a/ext/jasmine-webkit-specrunner/HeadlessSpecRunner/Page.cpp b/ext/jasmine-webkit-specrunner/Page.cpp similarity index 100% rename from ext/jasmine-webkit-specrunner/HeadlessSpecRunner/Page.cpp rename to ext/jasmine-webkit-specrunner/Page.cpp diff --git a/ext/jasmine-webkit-specrunner/HeadlessSpecRunner/Page.h b/ext/jasmine-webkit-specrunner/Page.h similarity index 100% rename from ext/jasmine-webkit-specrunner/HeadlessSpecRunner/Page.h rename to ext/jasmine-webkit-specrunner/Page.h diff --git a/ext/jasmine-webkit-specrunner/Test/Page_test.cpp b/ext/jasmine-webkit-specrunner/Page_test.cpp similarity index 93% rename from ext/jasmine-webkit-specrunner/Test/Page_test.cpp rename to ext/jasmine-webkit-specrunner/Page_test.cpp index fd0c288..a184d26 100644 --- a/ext/jasmine-webkit-specrunner/Test/Page_test.cpp +++ b/ext/jasmine-webkit-specrunner/Page_test.cpp @@ -1,7 +1,7 @@ #include -#include "HeadlessSpecRunner/Page.h" -#include "Test/Page_test.h" +#include "Page.h" +#include "Page_test.h" namespace HeadlessSpecRunner { PageTest::PageTest() : QObject(), internalLogCalled(false) { @@ -41,3 +41,5 @@ namespace HeadlessSpecRunner { } } +QTEST_MAIN(HeadlessSpecRunner::PageTest); + diff --git a/ext/jasmine-webkit-specrunner/Test/Page_test.h b/ext/jasmine-webkit-specrunner/Page_test.h similarity index 94% rename from ext/jasmine-webkit-specrunner/Test/Page_test.h rename to ext/jasmine-webkit-specrunner/Page_test.h index 7df1587..7d500b1 100644 --- a/ext/jasmine-webkit-specrunner/Test/Page_test.h +++ b/ext/jasmine-webkit-specrunner/Page_test.h @@ -3,7 +3,7 @@ #include -#include "HeadlessSpecRunner/Page.h" +#include "Page.h" namespace HeadlessSpecRunner { class PageTest : public QObject { diff --git a/ext/jasmine-webkit-specrunner/Page_test.moc b/ext/jasmine-webkit-specrunner/Page_test.moc deleted file mode 100644 index e370a71..0000000 --- a/ext/jasmine-webkit-specrunner/Page_test.moc +++ /dev/null @@ -1,79 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'Page_test.cpp' -** -** Created: Tue Aug 2 10:10:26 2011 -** by: The Qt Meta Object Compiler version 62 (Qt 4.7.3) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'Page_test.cpp' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 62 -#error "This file was generated using the moc from 4.7.3. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -static const uint qt_meta_data_HeadlessSpecRunner__PageTestHelper[] = { - - // content: - 5, // revision - 0, // classname - 0, 0, // classinfo - 1, 14, // methods - 0, 0, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - // slots: signature, parameters, type, tag, flags - 45, 36, 35, 35, 0x0a, - - 0 // eod -}; - -static const char qt_meta_stringdata_HeadlessSpecRunner__PageTestHelper[] = { - "HeadlessSpecRunner::PageTestHelper\0\0" - "note,msg\0internalLog(QString,QString)\0" -}; - -const QMetaObject HeadlessSpecRunner::PageTestHelper::staticMetaObject = { - { &QObject::staticMetaObject, qt_meta_stringdata_HeadlessSpecRunner__PageTestHelper, - qt_meta_data_HeadlessSpecRunner__PageTestHelper, 0 } -}; - -#ifdef Q_NO_DATA_RELOCATION -const QMetaObject &HeadlessSpecRunner::PageTestHelper::getStaticMetaObject() { return staticMetaObject; } -#endif //Q_NO_DATA_RELOCATION - -const QMetaObject *HeadlessSpecRunner::PageTestHelper::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; -} - -void *HeadlessSpecRunner::PageTestHelper::qt_metacast(const char *_clname) -{ - if (!_clname) return 0; - if (!strcmp(_clname, qt_meta_stringdata_HeadlessSpecRunner__PageTestHelper)) - return static_cast(const_cast< PageTestHelper*>(this)); - return QObject::qt_metacast(_clname); -} - -int HeadlessSpecRunner::PageTestHelper::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QObject::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - if (_c == QMetaObject::InvokeMetaMethod) { - switch (_id) { - case 0: internalLog((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; - default: ; - } - _id -= 1; - } - return _id; -} -QT_END_MOC_NAMESPACE diff --git a/ext/jasmine-webkit-specrunner/Page_test.pro b/ext/jasmine-webkit-specrunner/Page_test.pro new file mode 100644 index 0000000..9482e83 --- /dev/null +++ b/ext/jasmine-webkit-specrunner/Page_test.pro @@ -0,0 +1,6 @@ +include(common.pri) +include(test.pri) + +SOURCES += Page_test.cpp +HEADERS += Page_test.h + diff --git a/ext/jasmine-webkit-specrunner/HeadlessSpecRunner/Runner.cpp b/ext/jasmine-webkit-specrunner/Runner.cpp similarity index 97% rename from ext/jasmine-webkit-specrunner/HeadlessSpecRunner/Runner.cpp rename to ext/jasmine-webkit-specrunner/Runner.cpp index 2ec04d1..b5c5ee2 100644 --- a/ext/jasmine-webkit-specrunner/HeadlessSpecRunner/Runner.cpp +++ b/ext/jasmine-webkit-specrunner/Runner.cpp @@ -96,21 +96,15 @@ namespace HeadlessSpecRunner { void Runner::specPassed() { consoleNotUsedThisRun = true; - green(); - std::cout << '.'; - clear(); - fflush(stdout); + consoleOutput.passed(""); } void Runner::specFailed(const QString &specDetail) { consoleNotUsedThisRun = true; + consoleOutput.failed(""); didFail = true; - red(); - std::cout << 'F'; failedSpecs.push(specDetail); - clear(); - fflush(stdout); } void Runner::errorLog(const QString &msg, int lineNumber, const QString &sourceID) diff --git a/ext/jasmine-webkit-specrunner/HeadlessSpecRunner/Runner.h b/ext/jasmine-webkit-specrunner/Runner.h similarity index 94% rename from ext/jasmine-webkit-specrunner/HeadlessSpecRunner/Runner.h rename to ext/jasmine-webkit-specrunner/Runner.h index 46d3bf7..8f416e7 100644 --- a/ext/jasmine-webkit-specrunner/HeadlessSpecRunner/Runner.h +++ b/ext/jasmine-webkit-specrunner/Runner.h @@ -9,6 +9,7 @@ #include #include "Page.h" +#include "ConsoleOutput.h" namespace HeadlessSpecRunner { class Runner: public QObject { @@ -49,6 +50,8 @@ namespace HeadlessSpecRunner { QString reportFilename; QStack failedSpecs; + HeadlessSpecRunner::ConsoleOutput consoleOutput; + void red(); void green(); void yellow(); diff --git a/ext/jasmine-webkit-specrunner/common.pri b/ext/jasmine-webkit-specrunner/common.pri new file mode 100644 index 0000000..e19d607 --- /dev/null +++ b/ext/jasmine-webkit-specrunner/common.pri @@ -0,0 +1,9 @@ +TEMPLATE = app +CONFIG -= app_bundle +QMAKE_INFO_PLIST = Info.plist +QMAKESPEC = macx-g++ +QT += network webkit + +SOURCES = Page.cpp Runner.cpp ConsoleOutput.cpp +HEADERS = Page.h Runner.h ConsoleOutput.h + diff --git a/ext/jasmine-webkit-specrunner/extconf.rb b/ext/jasmine-webkit-specrunner/extconf.rb index d7e6907..d950511 100644 --- a/ext/jasmine-webkit-specrunner/extconf.rb +++ b/ext/jasmine-webkit-specrunner/extconf.rb @@ -4,7 +4,6 @@ $: << File.expand_path("../../../lib", __FILE__) require 'qt/qmake' -Qt::Qmake.make!('jasmine-headless-webkit tests', 'specrunner_test.pro') -system %{jasmine-webkit-specrunner-test} +system %{make clean} Qt::Qmake.make!('jasmine-headless-webkit', 'specrunner.pro') diff --git a/ext/jasmine-webkit-specrunner/jasmine-webkit-specrunner-test b/ext/jasmine-webkit-specrunner/jasmine-webkit-specrunner-test deleted file mode 100755 index 897d9f445bc4e928e48802f48a58bdccc5fc1b36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63680 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 WnR%|vJW$4vC&^;Iz`?iDxc(oB%|h4! diff --git a/ext/jasmine-webkit-specrunner/jhw-test b/ext/jasmine-webkit-specrunner/jhw-test new file mode 100755 index 0000000000000000000000000000000000000000..ed6d28006ecd1772f00f68c55bd83e3da35f3b4c GIT binary patch literal 69912 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 RtrzNAq-|Z>3$L;?awjNkc3Yir<{8>o)}Ae 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 - -QTEST_MAIN -int main(int argc, char *argv[]) { - QCoreApplication app(argc, argv); - HeadlessSpecRunner::PageTest pageTest; - QTest::qExec(&pageTest); -} - diff --git a/ext/jasmine-webkit-specrunner/specrunner_test.pro b/ext/jasmine-webkit-specrunner/specrunner_test.pro deleted file mode 100644 index 9a4f921..0000000 --- a/ext/jasmine-webkit-specrunner/specrunner_test.pro +++ /dev/null @@ -1,16 +0,0 @@ -TEMPLATE = app -CONFIG -= app_bundle -TARGET = jasmine-webkit-specrunner-test -SOURCES = HeadlessSpecRunner/Page.cpp \ - HeadlessSpecRunner/Runner.cpp \ - Test/Page_test.cpp \ - specrunner_test.cpp - -HEADERS = HeadlessSpecRunner/Page.h \ - HeadlessSpecRunner/Runner.h \ - Test/Page_test.h - -QT += network webkit testlib -QMAKE_INFO_PLIST = Info.plist -QMAKESPEC = macx-gcc - diff --git a/ext/jasmine-webkit-specrunner/test.pri b/ext/jasmine-webkit-specrunner/test.pri new file mode 100644 index 0000000..4804421 --- /dev/null +++ b/ext/jasmine-webkit-specrunner/test.pri @@ -0,0 +1,3 @@ +TARGET = jhw-test +QT += testlib + diff --git a/ext/jasmine-webkit-specrunner/test.rb b/ext/jasmine-webkit-specrunner/test.rb new file mode 100644 index 0000000..6934d3e --- /dev/null +++ b/ext/jasmine-webkit-specrunner/test.rb @@ -0,0 +1,9 @@ +#!/usr/bin/env ruby + +Dir['*_test.pro'].each do |test| + system %{make clean && qmake #{test} && make && ./jhw-test} + if $?.exitstatus != 0 + exit 1 + end +end +