From 22577e0fdc8ee773cd8f335c67efa5284c7eb74e Mon Sep 17 00:00:00 2001 From: John Bintz Date: Tue, 2 Aug 2011 10:20:18 -0400 Subject: [PATCH 1/8] qt cleanup --- .../HeadlessSpecRunner/ConsoleOutput.h | 14 ++++ ext/jasmine-webkit-specrunner/Page_test.moc | 79 ++++++++++++++++++ .../Test/Page_test.cpp | 36 ++++++++ .../Test/Page_test.h | 34 ++++++++ .../jasmine-webkit-specrunner-test | Bin 0 -> 138456 bytes .../specrunner_test.pro | 18 ++++ 6 files changed, 181 insertions(+) create mode 100644 ext/jasmine-webkit-specrunner/Page_test.moc create mode 100644 ext/jasmine-webkit-specrunner/Test/Page_test.cpp create mode 100644 ext/jasmine-webkit-specrunner/Test/Page_test.h create mode 100755 ext/jasmine-webkit-specrunner/jasmine-webkit-specrunner-test create mode 100644 ext/jasmine-webkit-specrunner/specrunner_test.pro diff --git a/ext/jasmine-webkit-specrunner/HeadlessSpecRunner/ConsoleOutput.h b/ext/jasmine-webkit-specrunner/HeadlessSpecRunner/ConsoleOutput.h index e69de29..86238e5 100644 --- a/ext/jasmine-webkit-specrunner/HeadlessSpecRunner/ConsoleOutput.h +++ b/ext/jasmine-webkit-specrunner/HeadlessSpecRunner/ConsoleOutput.h @@ -0,0 +1,14 @@ +#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/Page_test.moc b/ext/jasmine-webkit-specrunner/Page_test.moc new file mode 100644 index 0000000..e370a71 --- /dev/null +++ b/ext/jasmine-webkit-specrunner/Page_test.moc @@ -0,0 +1,79 @@ +/**************************************************************************** +** 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/Test/Page_test.cpp b/ext/jasmine-webkit-specrunner/Test/Page_test.cpp new file mode 100644 index 0000000..c4e1ff7 --- /dev/null +++ b/ext/jasmine-webkit-specrunner/Test/Page_test.cpp @@ -0,0 +1,36 @@ +#include +#include +#include + +#include "HeadlessSpecRunner/Page.h" +#include "Test/Page_test.h" + +using namespace unitpp; + +namespace HeadlessSpecRunner { + PageTestHelper::PageTestHelper() : QObject(), internalLogCalled(false) {} + + void PageTestHelper::addPage(HeadlessSpecRunner::Page &page) { + connect(&page, SIGNAL(internalLog(QString, QString)), this, SLOT(internalLog(QString, QString))); + } + + void PageTestHelper::internalLog(const QString ¬e, const QString &msg) { + internalLogCalled = true; + } + + PageTest::PageTest() : suite("suite") { + add("test", testcase(this, "test", &HeadlessSpecRunner::PageTest::testJavaScriptConfirmWithLog)); + suite::main().add("test", this); + } + + void PageTest::testJavaScriptConfirmWithLog() { + helper.addPage(page); + helper.internalLogCalled = false; + + page.mainFrame()->setHtml(""); + assert_true("internal log called", helper.internalLogCalled); + } +} + +HeadlessSpecRunner::PageTest *one = new HeadlessSpecRunner::PageTest(); + diff --git a/ext/jasmine-webkit-specrunner/Test/Page_test.h b/ext/jasmine-webkit-specrunner/Test/Page_test.h new file mode 100644 index 0000000..4d344cf --- /dev/null +++ b/ext/jasmine-webkit-specrunner/Test/Page_test.h @@ -0,0 +1,34 @@ +#ifndef JHW_TEST_PAGE +#define JHW_TEST_PAGE + +#include +#include +#include + +#include "HeadlessSpecRunner/Page.h" + +using namespace unitpp; + +namespace HeadlessSpecRunner { + class PageTestHelper : public QObject { + Q_OBJECT + public: + PageTestHelper(); + bool internalLogCalled; + void addPage(HeadlessSpecRunner::Page &page); + + public slots: + void internalLog(const QString ¬e, const QString &msg); + }; + + class PageTest : public suite { + public: + PageTest(); + HeadlessSpecRunner::Page page; + HeadlessSpecRunner::PageTestHelper helper; + + void testJavaScriptConfirmWithLog(); + }; +} + +#endif diff --git a/ext/jasmine-webkit-specrunner/jasmine-webkit-specrunner-test b/ext/jasmine-webkit-specrunner/jasmine-webkit-specrunner-test new file mode 100755 index 0000000000000000000000000000000000000000..8c4ca1ad0b2794a43b1f245318bcfafde9bd223a GIT binary patch literal 138456 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 Date: Tue, 2 Aug 2011 15:47:14 -0400 Subject: [PATCH 2/8] trying stuff --- .../Test/Page_test.cpp | 43 ++++++++++-------- .../Test/Page_test.h | 31 ++++++------- ext/jasmine-webkit-specrunner/extconf.rb | 4 +- .../jasmine-webkit-specrunner-test | Bin 138456 -> 63680 bytes .../jasmine-webkit-specrunner.pro | 19 ++++++++ .../specrunner_test.cpp | 10 ++++ .../specrunner_test.pro | 8 ++-- lib/qt/qmake.rb | 15 ++++-- 8 files changed, 83 insertions(+), 47 deletions(-) create mode 100644 ext/jasmine-webkit-specrunner/jasmine-webkit-specrunner.pro create mode 100644 ext/jasmine-webkit-specrunner/specrunner_test.cpp diff --git a/ext/jasmine-webkit-specrunner/Test/Page_test.cpp b/ext/jasmine-webkit-specrunner/Test/Page_test.cpp index c4e1ff7..fd0c288 100644 --- a/ext/jasmine-webkit-specrunner/Test/Page_test.cpp +++ b/ext/jasmine-webkit-specrunner/Test/Page_test.cpp @@ -1,36 +1,43 @@ -#include -#include -#include +#include #include "HeadlessSpecRunner/Page.h" #include "Test/Page_test.h" -using namespace unitpp; - namespace HeadlessSpecRunner { - PageTestHelper::PageTestHelper() : QObject(), internalLogCalled(false) {} - - void PageTestHelper::addPage(HeadlessSpecRunner::Page &page) { - connect(&page, SIGNAL(internalLog(QString, QString)), this, SLOT(internalLog(QString, QString))); + PageTest::PageTest() : QObject(), internalLogCalled(false) { } - void PageTestHelper::internalLog(const QString ¬e, const QString &msg) { + void PageTest::internalLog(const QString ¬e, const QString &msg) { internalLogCalled = true; } - PageTest::PageTest() : suite("suite") { - add("test", testcase(this, "test", &HeadlessSpecRunner::PageTest::testJavaScriptConfirmWithLog)); - suite::main().add("test", this); + void PageTest::consoleLog(const QString &message, int lineNumber, const QString &source) { + consoleLogCalled = true; } void PageTest::testJavaScriptConfirmWithLog() { - helper.addPage(page); - helper.internalLogCalled = false; + connect(&page, SIGNAL(internalLog(QString, QString)), this, SLOT(internalLog(QString, QString))); + internalLogCalled = false; page.mainFrame()->setHtml(""); - assert_true("internal log called", helper.internalLogCalled); + QVERIFY(internalLogCalled); + } + + void PageTest::testJavaScriptConfirmWithoutLog() { + connect(&page, SIGNAL(internalLog(QString, QString)), this, SLOT(internalLog(QString, QString))); + internalLogCalled = false; + + page.oneFalseConfirm(); + page.mainFrame()->setHtml(""); + QVERIFY(!internalLogCalled); + } + + void PageTest::testJavaScriptConsoleMessage() { + connect(&page, SIGNAL(consoleLog(QString, int, QString)), this, SLOT(consoleLog(QString, int, QString))); + consoleLogCalled = false; + + page.mainFrame()->setHtml(""); + QVERIFY(consoleLogCalled); } } -HeadlessSpecRunner::PageTest *one = new HeadlessSpecRunner::PageTest(); - diff --git a/ext/jasmine-webkit-specrunner/Test/Page_test.h b/ext/jasmine-webkit-specrunner/Test/Page_test.h index 4d344cf..7df1587 100644 --- a/ext/jasmine-webkit-specrunner/Test/Page_test.h +++ b/ext/jasmine-webkit-specrunner/Test/Page_test.h @@ -1,34 +1,29 @@ #ifndef JHW_TEST_PAGE #define JHW_TEST_PAGE -#include -#include -#include +#include #include "HeadlessSpecRunner/Page.h" -using namespace unitpp; - namespace HeadlessSpecRunner { - class PageTestHelper : public QObject { + class PageTest : public QObject { Q_OBJECT - public: - PageTestHelper(); - bool internalLogCalled; - void addPage(HeadlessSpecRunner::Page &page); - - public slots: - void internalLog(const QString ¬e, const QString &msg); - }; - - class PageTest : public suite { public: PageTest(); - HeadlessSpecRunner::Page page; - HeadlessSpecRunner::PageTestHelper helper; + private: + bool internalLogCalled; + bool consoleLogCalled; + HeadlessSpecRunner::Page page; + + private slots: + void internalLog(const QString ¬e, const QString &msg); + void consoleLog(const QString &message, int lineNumber, const QString &source); void testJavaScriptConfirmWithLog(); + void testJavaScriptConfirmWithoutLog(); + void testJavaScriptConsoleMessage(); }; } #endif + diff --git a/ext/jasmine-webkit-specrunner/extconf.rb b/ext/jasmine-webkit-specrunner/extconf.rb index df888d3..d7e6907 100644 --- a/ext/jasmine-webkit-specrunner/extconf.rb +++ b/ext/jasmine-webkit-specrunner/extconf.rb @@ -4,5 +4,7 @@ $: << File.expand_path("../../../lib", __FILE__) require 'qt/qmake' -Qt::Qmake.make!('jasmine-headless-webkit') +Qt::Qmake.make!('jasmine-headless-webkit tests', 'specrunner_test.pro') +system %{jasmine-webkit-specrunner-test} +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 index 8c4ca1ad0b2794a43b1f245318bcfafde9bd223a..897d9f445bc4e928e48802f48a58bdccc5fc1b36 100755 GIT binary patch literal 63680 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 WnR%|vJW$4vC&^;Iz`?iDxc(oB%|h4! literal 138456 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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 index f1ccd70..9a4f921 100644 --- a/ext/jasmine-webkit-specrunner/specrunner_test.pro +++ b/ext/jasmine-webkit-specrunner/specrunner_test.pro @@ -3,16 +3,14 @@ CONFIG -= app_bundle TARGET = jasmine-webkit-specrunner-test SOURCES = HeadlessSpecRunner/Page.cpp \ HeadlessSpecRunner/Runner.cpp \ - Test/Page_test.cpp + Test/Page_test.cpp \ + specrunner_test.cpp HEADERS = HeadlessSpecRunner/Page.h \ HeadlessSpecRunner/Runner.h \ Test/Page_test.h -QT += network webkit +QT += network webkit testlib QMAKE_INFO_PLIST = Info.plist QMAKESPEC = macx-gcc -LIBS += -L/Users/john/Projects/unit++/lib -lunit++ -INCLUDEPATH += /Users/john/Projects/unit++/include - diff --git a/lib/qt/qmake.rb b/lib/qt/qmake.rb index e4315ed..6f484da 100644 --- a/lib/qt/qmake.rb +++ b/lib/qt/qmake.rb @@ -16,24 +16,29 @@ module Qt make_path != nil end - def command - case platform + def command(project_file = nil) + + spec = (case platform when :linux "#{path} -spec linux-g++" when :freebsd "#{path} -spec freebsd-g++" when :mac_os_x "#{path} -spec macx-g++" - end + end) + + command = "#{path} -spec #{spec}" + command << " #{project_file}" if project_file + command end - def make!(name) + def make!(name, project_file = nil) @name = name check_make! check_qmake! - system command + system command(project_file) system %{make} end From 4fb82c2e7ce74b1903de0ef2ecb9f75d227c135f Mon Sep 17 00:00:00 2001 From: John Bintz Date: Wed, 3 Aug 2011 12:26:39 -0400 Subject: [PATCH 3/8] 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 + From 01b1fcce1667632852c4ab8e1d61115c1aac07c9 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Tue, 23 Aug 2011 18:47:15 -0400 Subject: [PATCH 4/8] fix qmake bug --- lib/qt/qmake.rb | 50 ++++++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/lib/qt/qmake.rb b/lib/qt/qmake.rb index 6f484da..ec5b951 100644 --- a/lib/qt/qmake.rb +++ b/lib/qt/qmake.rb @@ -3,7 +3,6 @@ require 'rubygems/version' module Qt class NotInstalledError < StandardError; end - class Qmake class << self QMAKES = %w{qmake-qt4 qmake} @@ -17,14 +16,13 @@ module Qt end def command(project_file = nil) - spec = (case platform when :linux - "#{path} -spec linux-g++" + "linux-g++" when :freebsd - "#{path} -spec freebsd-g++" + "freebsd-g++" when :mac_os_x - "#{path} -spec macx-g++" + "macx-g++" end) command = "#{path} -spec #{spec}" @@ -50,15 +48,15 @@ module Qt end def make_path - get_exe_path('gmake') || get_exe_path('make') + get_exe_path('gmake') || get_exe_path('make') end def platform case RbConfig::CONFIG['host_os'] when /linux/ :linux - when /freebsd/i - :freebsd + when /freebsd/i + :freebsd when /darwin/ :mac_os_x end @@ -78,7 +76,7 @@ module Qt end result end.compact.sort { |a, b| b.last <=> a.last }.first - qmake_path.first + qmake_path.first else nil end @@ -99,15 +97,15 @@ module Qt %{sudo apt-get install make or sudo yum install make} when :freebsd %{install /usr/ports/devel/gmake} - when :darwin + when :mac_os_x %{Install XCode, and/or sudo port install make} end ) $stderr.puts <<-MSG -make is not installed. You'll need to install it to build #{@name}. -#{install_method} should do it for you. -MSG + make is not installed. You'll need to install it to build #{@name}. + #{install_method} should do it for you. + MSG raise NotInstalledError end end @@ -118,26 +116,26 @@ MSG case platform when :linux <<-MSG -sudo apt-get install libqt4-dev qt4-qmake on Debian-based systems, or downloading -Nokia's prebuilt binary at http://qt.nokia.com/downloads/ -MSG + sudo apt-get install libqt4-dev qt4-qmake on Debian-based systems, or downloading + Nokia's prebuilt binary at http://qt.nokia.com/downloads/ + MSG when :freebsd <<-MSG -Install /usr/ports/www/qt4-webkit and /usr/ports/devel/qmake4. -MSG - when :darwin + Install /usr/ports/www/qt4-webkit and /usr/ports/devel/qmake4. + MSG + when :mac_os_x <<-MSG -sudo port install qt4-mac (for the patient) or downloading Nokia's pre-built binary -at http://qt.nokia.com/downloads/ -MSG + sudo port install qt4-mac (for the patient) or downloading Nokia's pre-built binary + at http://qt.nokia.com/downloads/ + MSG end ).strip $stderr.puts <<-MSG -qmake is not installed or is not the right version (#{@name} needs Qt 4.7 or above). -You'll need to install it to build #{@name}. -#{install_method} should do it for you. -MSG + qmake is not installed or is not the right version (#{@name} needs Qt 4.7 or above). + You'll need to install it to build #{@name}. + #{install_method} should do it for you. + MSG end end end From ac5b8a4c985deec74009426ba5bc96961350d48f Mon Sep 17 00:00:00 2001 From: John Bintz Date: Tue, 23 Aug 2011 18:54:23 -0400 Subject: [PATCH 5/8] add penchant --- script/gemfile | 11 +++++++++++ script/hooks/pre-commit | 15 +++++++++++++++ script/initialize-environment | 35 +++++++++++++++++++++++++++++++++++ script/install-git-hooks | 6 ++++++ 4 files changed, 67 insertions(+) create mode 100755 script/gemfile create mode 100755 script/hooks/pre-commit create mode 100755 script/initialize-environment create mode 100755 script/install-git-hooks diff --git a/script/gemfile b/script/gemfile new file mode 100755 index 0000000..eb78755 --- /dev/null +++ b/script/gemfile @@ -0,0 +1,11 @@ +#!/usr/bin/env ruby + +require 'rubygems' +require 'penchant' + +if Penchant::Gemfile.do_full_env_switch!(ARGV[0]) + puts "Gemfile switched to #{ARGV[0]}" +else + exit 0 +end + diff --git a/script/hooks/pre-commit b/script/hooks/pre-commit new file mode 100755 index 0000000..e1b1e1c --- /dev/null +++ b/script/hooks/pre-commit @@ -0,0 +1,15 @@ +#!/bin/bash + +OLD_GIT_DIR=$GIT_DIR + +if [ "$(penchant gemfile-env)" != "remote" ]; then + unset GIT_DIR + penchant gemfile remote + GIT_DIR=$OLD_GIT_DIR + git add Gemfile* +fi + +bundle exec rake +R=$? +if [ $R -ne 0 ]; then exit $R; fi + diff --git a/script/initialize-environment b/script/initialize-environment new file mode 100755 index 0000000..222c8f1 --- /dev/null +++ b/script/initialize-environment @@ -0,0 +1,35 @@ +#!/usr/bin/env ruby + +if File.file?('Gemfile.erb') + pwd = Dir.pwd + + Dir.chdir '..' do + File.readlines(File.join(pwd, 'Gemfile.erb')).find_all { |line| line[':git'] }.each do |line| + repo = line[%r{:git => (['"])(.*)\1}, 2] + + puts "Installing #{repo}" + system %{git clone #{repo}} + end + end + + puts "Bundling for local environment" + system %{script/gemfile local} +else + puts "Bundling..." + system %{bundle} +end + +puts "Installing git hooks" +system %{script/install-git-hooks} + +bundle = File.file?('Gemfile') ? 'bundle exec' : '' + +command = [ bundle, 'rake', '-s', '-T', 'bootstrap' ] + +if !(%x{#{command.join(' ')}}).empty? + puts "Trying to run rake bootstrap..." + system %{#{bundle} rake bootstrap} +end + +puts "Done!" + diff --git a/script/install-git-hooks b/script/install-git-hooks new file mode 100755 index 0000000..0644244 --- /dev/null +++ b/script/install-git-hooks @@ -0,0 +1,6 @@ +#!/bin/bash + +for hook in script/hooks/* ; do + ln -sf $PWD/$hook .git/hooks/${hook##*/} +done + From d039aba84bc71a72b5569d6c01f852912087fbdb Mon Sep 17 00:00:00 2001 From: John Bintz Date: Mon, 22 Aug 2011 13:26:48 -0400 Subject: [PATCH 6/8] start of file listing --- bin/jasmine-headless-webkit | 15 +++++++++++++-- lib/jasmine/headless/options.rb | 6 +++++- spec/bin/jasmine-headless-webkit_spec.rb | 11 +++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/bin/jasmine-headless-webkit b/bin/jasmine-headless-webkit index 98c1998..a38610d 100755 --- a/bin/jasmine-headless-webkit +++ b/bin/jasmine-headless-webkit @@ -13,8 +13,19 @@ require 'jasmine/headless/runner' require 'jasmine/headless/options' begin - puts "Running Jasmine specs...".color(:white) - exit Jasmine::Headless::Runner.run(Jasmine::Headless::Options.from_command_line) + options = Jasmine::Headless::Options.from_command_line + runner = Jasmine::Headless::Runner.new(options) + + if options[:do_list] + files_list = Jasmine::FilesList.new( + :config => runner.jasmine_config + ) + + files_list.files.each { |file| puts file } + else + puts "Running Jasmine specs...".color(:white) + exit runner.run + end rescue CoffeeScript::CompilationError exit 1 rescue StandardError => e diff --git a/lib/jasmine/headless/options.rb b/lib/jasmine/headless/options.rb index 51cf5cd..5017eb4 100644 --- a/lib/jasmine/headless/options.rb +++ b/lib/jasmine/headless/options.rb @@ -13,6 +13,7 @@ module Jasmine :remove_html_file => true, :jasmine_config => 'spec/javascripts/support/jasmine.yml', :report => false, + :do_list => false, :full_run => true, :files => [] } @@ -48,6 +49,8 @@ module Jasmine @options[:jasmine_config] = arg when '--no-full-run' @options[:full_run] = false + when '--list', '-l' + @options[:do_list] = true end end @@ -66,7 +69,8 @@ module Jasmine [ '--keep', GetoptLong::NO_ARGUMENT ], [ '--report', GetoptLong::REQUIRED_ARGUMENT ], [ '--jasmine-config', '-j', GetoptLong::REQUIRED_ARGUMENT ], - [ '--no-full-run', GetoptLong::NO_ARGUMENT ] + [ '--no-full-run', GetoptLong::NO_ARGUMENT ], + [ '--list', '-l', GetoptLong::NO_ARGUMENT ] ) command_line_args.each { |*args| process_option(*args) } diff --git a/spec/bin/jasmine-headless-webkit_spec.rb b/spec/bin/jasmine-headless-webkit_spec.rb index ebe627d..f351337 100644 --- a/spec/bin/jasmine-headless-webkit_spec.rb +++ b/spec/bin/jasmine-headless-webkit_spec.rb @@ -118,5 +118,16 @@ describe "jasmine-headless-webkit" do end end end + + describe 'files' do + it 'should list all the files that will be found' do + files = %x{bin/jasmine-headless-webkit -l -j spec/jasmine/success/success.yml} + p files + $?.exitstatus.should == 0 + + files.lines.to_a.should include("./spec/jasmine/success/success.js\n") + files.lines.to_a.should include("./spec/jasmine/success/success_spec.js\n") + end + end end From a206df590f039e910f94bd32edef7d02c2ae2223 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Thu, 4 Aug 2011 10:18:05 -0400 Subject: [PATCH 7/8] ensure bad utf-8 is handled, fixes #48 --- .gitignore | 2 +- lib/jasmine/files_list.rb | 3 +++ spec/lib/jasmine/files_list_spec.rb | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2c8800d..ef518d4 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,4 @@ specrunner.o ext/jasmine-webkit-specrunner/jasmine-webkit-specrunner *.o moc_*.* - +.DS_Store diff --git a/lib/jasmine/files_list.rb b/lib/jasmine/files_list.rb index b1313f4..38b414a 100644 --- a/lib/jasmine/files_list.rb +++ b/lib/jasmine/files_list.rb @@ -1,4 +1,5 @@ require 'jasmine-core' +require 'iconv' module Jasmine class FilesList @@ -14,7 +15,9 @@ module Jasmine def get_spec_line_numbers(file) line_numbers = {} + ic = Iconv.new('UTF-8//IGNORE', 'UTF-8') file.lines.each_with_index.each { |line, index| + line = ic.iconv(line + ' ')[0..-2] if description = line[%r{(describe|context|it)[( ]*(["'])(.*)\2}, 3] (line_numbers[description] ||= []) << (index + 1) end diff --git a/spec/lib/jasmine/files_list_spec.rb b/spec/lib/jasmine/files_list_spec.rb index 3cd8195..5f3630b 100644 --- a/spec/lib/jasmine/files_list_spec.rb +++ b/spec/lib/jasmine/files_list_spec.rb @@ -1,3 +1,5 @@ +# encoding: UTF-8 + require 'spec_helper' require 'jasmine/files_list' require 'fakefs/spec_helpers' @@ -219,6 +221,7 @@ describe 'test', -> context 'yes', -> it 'should do something', -> "yes" + "PR.registerLangHandler(PR.createSimpleLexer([[\"com\",/^#[^\\n\\r]*/,null,\"#\"],[\"pln\",/^[\\t\\n\\r \\xa0]+/,null,\"\\t\\n\\r \xC2\\xa0\"],[\"str\",/^\"(?:[^\"\\\\]|\\\\[\\S\\s])*(?:\"|$)/,null,'\"']],[[\"kwd\",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\\s/,\n" SPEC end From b54f163d3e7c460e26dfbf5a409c6a6f308dcc2e Mon Sep 17 00:00:00 2001 From: John Bintz Date: Tue, 23 Aug 2011 19:49:47 -0400 Subject: [PATCH 8/8] make cleanups and color fixes --- Gemfile | 1 + ext/jasmine-webkit-specrunner/ConsoleOutput.h | 2 +- ext/jasmine-webkit-specrunner/Runner.cpp | 1 + ext/jasmine-webkit-specrunner/jhw-test | Bin 69912 -> 69912 bytes ext/jasmine-webkit-specrunner/test.rb | 9 +++++++- lib/qt/qmake.rb | 21 +++++++++++++++++- spec/lib/qt/qmake_spec.rb | 11 +++++++++ 7 files changed, 42 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index c16218b..b2a8e50 100644 --- a/Gemfile +++ b/Gemfile @@ -12,3 +12,4 @@ gem 'guard-coffeescript' gem 'growl' gem 'rake', '0.8.7' gem 'mocha', '0.9.12' +gem 'facter' diff --git a/ext/jasmine-webkit-specrunner/ConsoleOutput.h b/ext/jasmine-webkit-specrunner/ConsoleOutput.h index d63e3ac..0861aa3 100644 --- a/ext/jasmine-webkit-specrunner/ConsoleOutput.h +++ b/ext/jasmine-webkit-specrunner/ConsoleOutput.h @@ -15,8 +15,8 @@ namespace HeadlessSpecRunner { std::ostream *outputIO; QStack successes; QStack failures; - private: bool showColors; + private: void green(); void clear(); void red(); diff --git a/ext/jasmine-webkit-specrunner/Runner.cpp b/ext/jasmine-webkit-specrunner/Runner.cpp index b5c5ee2..0c3fae2 100644 --- a/ext/jasmine-webkit-specrunner/Runner.cpp +++ b/ext/jasmine-webkit-specrunner/Runner.cpp @@ -66,6 +66,7 @@ namespace HeadlessSpecRunner { void Runner::setColors(bool colors) { showColors = colors; + consoleOutput.showColors = colors; } void Runner::reportFile(const QString &file) diff --git a/ext/jasmine-webkit-specrunner/jhw-test b/ext/jasmine-webkit-specrunner/jhw-test index ed6d28006ecd1772f00f68c55bd83e3da35f3b4c..347fe5ae741c42789bdafcac17441fd6dda4a8f4 100755 GIT binary patch delta 995 zcmXw1ZAg<*6h3z!IfI=0q2(9bBGf|hE1jC+B!};GS`ijO9~z}nD=EnSR4$70Ek?7e zWGW$I7$!P-3;iKAkrE@=DEncUIwG4Ni6ALzu+Dw=?!tTS`<&-F=bm%!ZS7LDb}1Yl zjjkAg06?b!4KCfF*R2eXnS7zWZC%Kf%hvV9rqCBAZJ0zvB zii*>sA~ugHRYSu02keSwh_m!x0!iqd3hW}B>e~xQC9P^d7YYMx0DixQ zdb?9X6JG~VF1_29LQ;jajvf_xMW?zA#3^WA4k(F^j`kWzqOjRJPKb?;_8CZ{u-TU) zkE)d3o=e(wSR@;nO(=Bs$fH;%3}UU~j=$oX6UduGT6~WAUu`7W(?mc4b7(=9ZmNer z@-(z-as{l4Oy^U^J4NfFi<4ID`{cJNRYUOQXJFDWj1E?FUcxr1Dk|Y%m7gR$C-K`7 z4pyIoxmZ4<)XgOc+a&A^U}0dUN~Q_+_&Ee`7zq#6d$sAoj&G;}-Z?3BM8fPAQ4BK@ WUgd=A-hP6e>3{lVI2rx?#)1C`l{e`C delta 980 zcmXw1Ye*DP6h3z!?kbg9C~PUZQEFkh>!aN)U*zJ9t)xUL^ui#2^wNT~{-hE@lPpZ# zqD>`448f#TCdwaCD-vcH4n2MtVv1<%YOx?_BD9@5J9A;qo$s9Qp8I|GUT=@V+hY*r zcv~3&0RYi~0f%j9ZqgWMxjo`+-SK#D$>p9qAG^1&P=Az2dZjAUWD%W>ileDzyOQ{N zfWSW|0Ov_~J{%6)*EmnX^g)2}r7g6&tTZ`z4GGU81eZqWQV0W1T2pp3xt%czBaDSN zYKt=p!>urqG8tnAwc#dh8Y4+ztk5Q|!d#OEAdCfkbb{MyZQKV?7n@QFaFP=iPH=Zu z%$%@kUkiN36`aSIMos*2OCh!k5_Kex*7FIwgSqNfIcy$Xo)$%si7&p_ls`Vo%t$lkt2%O8`cm;Bj<_W6 zxwEmvA+24l*OMlx?)v?-=wcoq(*q#WjVJ5L>_&SzFwJtfH4jD`R*^wu_DNfx<`B|N zOFA6n7RDUoBV<+5A;cWwEGl;yj0RMlO0Atmq=D9Uo{x_6F~i|-44v!Eigvz;pnTfe zVUz4#eP%LDr+OX4FU3Fi8HtUK^gD=C+UOr6M5H4F4&s$I2D0>)2KBMY>TE-a%Hxwt z2K)3D=7T|0s?7MSjF3cL9ZtdbSMark9GHDTzyKkPpv!hO!f(ADFse z$~5@x3c9ZTK4os!o;sd1Y{S)>nhPoxRaI2Qn#xZq4ypA`6>I7bVK3INQgw4l#iEJ_ zBUtjy)av3jj}s<s(5<=J=*Lk`1X#->R71A(CN6#lTB9=3WwXW}Oe~@MNru H>-+x$?5Q}n diff --git a/ext/jasmine-webkit-specrunner/test.rb b/ext/jasmine-webkit-specrunner/test.rb index 6934d3e..4585da1 100644 --- a/ext/jasmine-webkit-specrunner/test.rb +++ b/ext/jasmine-webkit-specrunner/test.rb @@ -1,7 +1,14 @@ #!/usr/bin/env ruby +system %{make clean} + Dir['*_test.pro'].each do |test| - system %{make clean && qmake #{test} && make && ./jhw-test} + $: << File.expand_path("../../../lib", __FILE__) + + require 'qt/qmake' + Qt::Qmake.make!('jasmine-headless-webkit', test) + + system %{./jhw-test} if $?.exitstatus != 0 exit 1 end diff --git a/lib/qt/qmake.rb b/lib/qt/qmake.rb index ec5b951..94ec745 100644 --- a/lib/qt/qmake.rb +++ b/lib/qt/qmake.rb @@ -1,6 +1,12 @@ require 'rbconfig' require 'rubygems/version' +begin + require 'facter' +rescue LoadError + warn 'Including Facter allows for detection of # of cpus, resulting in faster compilations.' +end + module Qt class NotInstalledError < StandardError; end class Qmake @@ -37,7 +43,12 @@ module Qt check_qmake! system command(project_file) - system %{make} + + system %{make #{make_options}} + end + + def make_options + "-j#{number_of_cpus}" end # @@ -83,6 +94,14 @@ module Qt end private + def number_of_cpus + if defined?(Facter) + Facter.sp_number_processors rescue Facter.processorcount + else + 1 + end + end + def get_exe_path(command) path = %x{which #{command}}.strip path = nil if path == '' diff --git a/spec/lib/qt/qmake_spec.rb b/spec/lib/qt/qmake_spec.rb index 64d2dd9..4cc7016 100644 --- a/spec/lib/qt/qmake_spec.rb +++ b/spec/lib/qt/qmake_spec.rb @@ -136,5 +136,16 @@ describe Qt::Qmake do end end end + + describe '.make_options' do + let(:cpu_count) { 3 } + subject { Qt::Qmake.make_options } + + before do + Qt::Qmake.stubs(:number_of_cpus).returns(cpu_count) + end + + it { should == "-j#{cpu_count}" } + end end