jasmine-headless-webkit 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +9 -0
- data/.gitignore +4 -0
- data/.rspec +1 -0
- data/Gemfile +4 -0
- data/README.md +12 -6
- data/autotest/discover.rb +1 -0
- data/bin/jasmine-headless-webkit +1 -1
- data/ext/jasmine-webkit-specrunner/specrunner.cpp +60 -22
- data/lib/jasmine-headless-webkit/version.rb +1 -1
- data/spec/bin/jasmine-headless-webkit_spec.rb +25 -0
- data/spec/jasmine/console_log/console_log.js +1 -0
- data/spec/jasmine/console_log/console_log.yml +10 -0
- data/spec/jasmine/console_log/console_log_spec.js +7 -0
- data/spec/jasmine/failure/failure.js +1 -0
- data/spec/jasmine/failure/failure.yml +9 -0
- data/spec/jasmine/failure/failure_spec.js +6 -0
- data/spec/jasmine/success/success.js +1 -0
- data/spec/jasmine/success/success.yml +9 -0
- data/spec/jasmine/success/success_spec.js +6 -0
- data/spec/spec_helper.rb +8 -0
- metadata +30 -20
data/.autotest
ADDED
data/.gitignore
CHANGED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
-c
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -2,20 +2,26 @@
|
|
2
2
|
|
3
3
|
## Introduction
|
4
4
|
|
5
|
-
This gem works with projects that
|
6
|
-
create a `jasmine.yml` file
|
5
|
+
This gem works with projects that have used the [Jasmine gem](https://github.com/pivotal/jasmine-gem) to
|
6
|
+
create a `jasmine.yml` file that defines what to test. The runner loads that
|
7
7
|
`jasmine.yml` file and executes the
|
8
|
-
tests in a Qt WebKit widget, displaying the results to the console and setting the exit code to
|
9
|
-
|
8
|
+
tests in a Qt WebKit widget, displaying the results to the console and setting the exit code to one
|
9
|
+
of the following:
|
10
|
+
|
11
|
+
* 0 for success
|
12
|
+
* 1 for spec run failure
|
13
|
+
* 2 for spec run success, but `console.log` was called during the run
|
10
14
|
|
11
15
|
`console.log` works, too, so you can run your specs side-by-side in a browser if you're so inclined.
|
12
16
|
|
17
|
+
## Installation
|
18
|
+
|
19
|
+
`gem install jasmine-headless-webkit` or use Bundler.
|
20
|
+
|
13
21
|
## Usage
|
14
22
|
|
15
23
|
jasmine-headless-webkit [path to jasmine.yml, defaults to spec/javascripts/support/jasmine.yml]
|
16
24
|
|
17
|
-
*This gem is currently as rough as it gets.*
|
18
|
-
|
19
25
|
Installation requires Qt 4.7. See [senchalabs/examples](https://github.com/senchalabs/examples) and [my fork
|
20
26
|
of examples](https://github.com/johnbintz/examples) for more information on the QtWebKit runner.
|
21
27
|
|
@@ -0,0 +1 @@
|
|
1
|
+
Autotest.add_discovery { 'rspec2' }
|
data/bin/jasmine-headless-webkit
CHANGED
@@ -64,7 +64,7 @@ HTML
|
|
64
64
|
|
65
65
|
File.open(target = "specrunner.#{$$}.html", 'w') { |fh| fh.print output }
|
66
66
|
system %{#{File.join(gem_dir, 'ext/jasmine-webkit-specrunner/jasmine-webkit-specrunner')} #{target}}
|
67
|
-
status =
|
67
|
+
status = $?.exitstatus
|
68
68
|
FileUtils.rm_f target
|
69
69
|
|
70
70
|
exit status
|
@@ -29,6 +29,20 @@
|
|
29
29
|
#error Use Qt 4.7 or later version
|
30
30
|
#endif
|
31
31
|
|
32
|
+
class HeadlessSpecRunnerPage: public QWebPage
|
33
|
+
{
|
34
|
+
Q_OBJECT
|
35
|
+
signals:
|
36
|
+
void consoleLog(const QString &msg, int lineNumber, const QString &sourceID);
|
37
|
+
protected:
|
38
|
+
void javaScriptConsoleMessage(const QString & message, int lineNumber, const QString & sourceID);
|
39
|
+
};
|
40
|
+
|
41
|
+
void HeadlessSpecRunnerPage::javaScriptConsoleMessage(const QString &message, int lineNumber, const QString &sourceID)
|
42
|
+
{
|
43
|
+
emit consoleLog(message, lineNumber, sourceID);
|
44
|
+
}
|
45
|
+
|
32
46
|
class HeadlessSpecRunner: public QObject
|
33
47
|
{
|
34
48
|
Q_OBJECT
|
@@ -40,21 +54,27 @@ public slots:
|
|
40
54
|
void specLog(int indent, const QString &msg, const QString &clazz);
|
41
55
|
private slots:
|
42
56
|
void watch(bool ok);
|
57
|
+
void errorLog(const QString &msg, int lineNumber, const QString &sourceID);
|
43
58
|
protected:
|
44
59
|
bool hasElement(const char *select);
|
45
60
|
void timerEvent(QTimerEvent *event);
|
46
61
|
private:
|
47
|
-
|
62
|
+
HeadlessSpecRunnerPage m_page;
|
48
63
|
QBasicTimer m_ticker;
|
49
64
|
int m_runs;
|
65
|
+
bool hasErrors;
|
66
|
+
bool usedConsole;
|
50
67
|
};
|
51
68
|
|
52
69
|
HeadlessSpecRunner::HeadlessSpecRunner()
|
53
70
|
: QObject()
|
54
71
|
, m_runs(0)
|
72
|
+
, hasErrors(false)
|
73
|
+
, usedConsole(false)
|
55
74
|
{
|
56
75
|
m_page.settings()->enablePersistentStorage();
|
57
76
|
connect(&m_page, SIGNAL(loadFinished(bool)), this, SLOT(watch(bool)));
|
77
|
+
connect(&m_page, SIGNAL(consoleLog(QString, int, QString)), this, SLOT(errorLog(QString, int, QString)));
|
58
78
|
}
|
59
79
|
|
60
80
|
void HeadlessSpecRunner::load(const QString &spec)
|
@@ -81,8 +101,20 @@ bool HeadlessSpecRunner::hasElement(const char *select)
|
|
81
101
|
return !m_page.mainFrame()->findFirstElement(select).isNull();
|
82
102
|
}
|
83
103
|
|
104
|
+
void HeadlessSpecRunner::errorLog(const QString &msg, int lineNumber, const QString &sourceID)
|
105
|
+
{
|
106
|
+
std::cout << "\033[0;31m" << "[error] " << "\033[m;";
|
107
|
+
std::cout << qPrintable(sourceID) << ":" << lineNumber << " : " << qPrintable(msg);
|
108
|
+
std::cout << std::endl;
|
109
|
+
|
110
|
+
hasErrors = true;
|
111
|
+
m_runs = 0;
|
112
|
+
m_ticker.start(200, this);
|
113
|
+
}
|
114
|
+
|
84
115
|
void HeadlessSpecRunner::log(const QString &msg)
|
85
116
|
{
|
117
|
+
usedConsole = true;
|
86
118
|
std::cout << "\033[0;32m" << "[console] " << "\033[m";
|
87
119
|
std::cout << qPrintable(msg);
|
88
120
|
std::cout << std::endl;
|
@@ -116,32 +148,38 @@ void HeadlessSpecRunner::specLog(int indent, const QString &msg, const QString &
|
|
116
148
|
|
117
149
|
void HeadlessSpecRunner::timerEvent(QTimerEvent *event)
|
118
150
|
{
|
119
|
-
|
120
|
-
return;
|
151
|
+
++m_runs;
|
121
152
|
|
122
|
-
if (
|
153
|
+
if (event->timerId() != m_ticker.timerId())
|
123
154
|
return;
|
124
155
|
|
125
|
-
if (
|
126
|
-
QWebElement desc = m_page.mainFrame()->findFirstElement(".description");
|
127
|
-
std::cout << "\033[0;32m" << "PASS: " << qPrintable(desc.toPlainText()) << "\033[m" << std::endl;
|
128
|
-
QApplication::instance()->exit(0);
|
129
|
-
return;
|
130
|
-
}
|
131
|
-
|
132
|
-
if (hasElement(".runner.failed")) {
|
133
|
-
QWebElement desc = m_page.mainFrame()->findFirstElement(".description");
|
134
|
-
std::cout << "\033[0;31m" << "FAIL: " << qPrintable(desc.toPlainText()) << "\033[m" << std::endl;
|
135
|
-
m_page.mainFrame()->evaluateJavaScript(DUMP_MSG);
|
136
|
-
//QDesktopServices::openUrl(m_page.mainFrame()->url());
|
156
|
+
if (hasErrors && m_runs > 2)
|
137
157
|
QApplication::instance()->exit(1);
|
138
|
-
return;
|
139
|
-
}
|
140
158
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
159
|
+
if (!hasErrors) {
|
160
|
+
if (!hasElement(".jasmine_reporter") && !hasElement(".runner.running"))
|
161
|
+
return;
|
162
|
+
|
163
|
+
if (hasElement(".runner.passed")) {
|
164
|
+
QWebElement desc = m_page.mainFrame()->findFirstElement(".description");
|
165
|
+
std::cout << "\033[0;32m" << "PASS: " << qPrintable(desc.toPlainText()) << "\033[m" << std::endl;
|
166
|
+
QApplication::instance()->exit(usedConsole ? 2 : 0);
|
167
|
+
return;
|
168
|
+
}
|
169
|
+
|
170
|
+
if (hasElement(".runner.failed")) {
|
171
|
+
QWebElement desc = m_page.mainFrame()->findFirstElement(".description");
|
172
|
+
std::cout << "\033[0;31m" << "FAIL: " << qPrintable(desc.toPlainText()) << "\033[m" << std::endl;
|
173
|
+
m_page.mainFrame()->evaluateJavaScript(DUMP_MSG);
|
174
|
+
//QDesktopServices::openUrl(m_page.mainFrame()->url());
|
175
|
+
QApplication::instance()->exit(1);
|
176
|
+
return;
|
177
|
+
}
|
178
|
+
|
179
|
+
if (m_runs > 30) {
|
180
|
+
std::cout << "WARNING: too many runs and the test is still not finished!" << std::endl;
|
181
|
+
QApplication::instance()->exit(1);
|
182
|
+
}
|
145
183
|
}
|
146
184
|
}
|
147
185
|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "jasmine-headless-webkit" do
|
4
|
+
describe 'success' do
|
5
|
+
it "should succeed with error code 0" do
|
6
|
+
%x{bin/jasmine-headless-webkit spec/jasmine/success/success.yml}
|
7
|
+
$?.exitstatus.should == 0
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'failure' do
|
12
|
+
it "should fail with an error code of 1" do
|
13
|
+
%x{bin/jasmine-headless-webkit spec/jasmine/failure/failure.yml}
|
14
|
+
$?.exitstatus.should == 1
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'with console.log' do
|
19
|
+
it "should succeed, but has a console.log so an error code of 2" do
|
20
|
+
%x{bin/jasmine-headless-webkit spec/jasmine/console_log/console_log.yml}
|
21
|
+
$?.exitstatus.should == 2
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
var success = 1;
|
@@ -0,0 +1 @@
|
|
1
|
+
var failure = 0;
|
@@ -0,0 +1 @@
|
|
1
|
+
var success = 1;
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jasmine-headless-webkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 1
|
10
|
-
version: 0.0.1
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.2
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- John Bintz
|
@@ -17,7 +12,7 @@ autorequire:
|
|
17
12
|
bindir: bin
|
18
13
|
cert_chain: []
|
19
14
|
|
20
|
-
date: 2011-04-
|
15
|
+
date: 2011-04-13 00:00:00 -04:00
|
21
16
|
default_executable:
|
22
17
|
dependencies:
|
23
18
|
- !ruby/object:Gem::Dependency
|
@@ -28,9 +23,6 @@ dependencies:
|
|
28
23
|
requirements:
|
29
24
|
- - ">="
|
30
25
|
- !ruby/object:Gem::Version
|
31
|
-
hash: 3
|
32
|
-
segments:
|
33
|
-
- 0
|
34
26
|
version: "0"
|
35
27
|
type: :runtime
|
36
28
|
version_requirements: *id001
|
@@ -44,11 +36,14 @@ extensions:
|
|
44
36
|
extra_rdoc_files: []
|
45
37
|
|
46
38
|
files:
|
39
|
+
- .autotest
|
47
40
|
- .gitignore
|
48
41
|
- .gitmodules
|
42
|
+
- .rspec
|
49
43
|
- Gemfile
|
50
44
|
- README.md
|
51
45
|
- Rakefile
|
46
|
+
- autotest/discover.rb
|
52
47
|
- bin/jasmine-headless-webkit
|
53
48
|
- ext/jasmine-webkit-specrunner/Info.plist
|
54
49
|
- ext/jasmine-webkit-specrunner/extconf.rb
|
@@ -57,6 +52,17 @@ files:
|
|
57
52
|
- jasmine-headless-webkit.gemspec
|
58
53
|
- lib/jasmine-headless-webkit.rb
|
59
54
|
- lib/jasmine-headless-webkit/version.rb
|
55
|
+
- spec/bin/jasmine-headless-webkit_spec.rb
|
56
|
+
- spec/jasmine/console_log/console_log.js
|
57
|
+
- spec/jasmine/console_log/console_log.yml
|
58
|
+
- spec/jasmine/console_log/console_log_spec.js
|
59
|
+
- spec/jasmine/failure/failure.js
|
60
|
+
- spec/jasmine/failure/failure.yml
|
61
|
+
- spec/jasmine/failure/failure_spec.js
|
62
|
+
- spec/jasmine/success/success.js
|
63
|
+
- spec/jasmine/success/success.yml
|
64
|
+
- spec/jasmine/success/success_spec.js
|
65
|
+
- spec/spec_helper.rb
|
60
66
|
- jasmine/lib/jasmine-html.js
|
61
67
|
- jasmine/lib/jasmine.css
|
62
68
|
- jasmine/lib/jasmine.js
|
@@ -75,25 +81,29 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
75
81
|
requirements:
|
76
82
|
- - ">="
|
77
83
|
- !ruby/object:Gem::Version
|
78
|
-
hash: 3
|
79
|
-
segments:
|
80
|
-
- 0
|
81
84
|
version: "0"
|
82
85
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
86
|
none: false
|
84
87
|
requirements:
|
85
88
|
- - ">="
|
86
89
|
- !ruby/object:Gem::Version
|
87
|
-
hash: 3
|
88
|
-
segments:
|
89
|
-
- 0
|
90
90
|
version: "0"
|
91
91
|
requirements: []
|
92
92
|
|
93
93
|
rubyforge_project: jasmine-headless-webkit
|
94
|
-
rubygems_version: 1.
|
94
|
+
rubygems_version: 1.6.2
|
95
95
|
signing_key:
|
96
96
|
specification_version: 3
|
97
97
|
summary: Run Jasmine specs headlessly in a WebKit browser
|
98
|
-
test_files:
|
99
|
-
|
98
|
+
test_files:
|
99
|
+
- spec/bin/jasmine-headless-webkit_spec.rb
|
100
|
+
- spec/jasmine/console_log/console_log.js
|
101
|
+
- spec/jasmine/console_log/console_log.yml
|
102
|
+
- spec/jasmine/console_log/console_log_spec.js
|
103
|
+
- spec/jasmine/failure/failure.js
|
104
|
+
- spec/jasmine/failure/failure.yml
|
105
|
+
- spec/jasmine/failure/failure_spec.js
|
106
|
+
- spec/jasmine/success/success.js
|
107
|
+
- spec/jasmine/success/success.yml
|
108
|
+
- spec/jasmine/success/success_spec.js
|
109
|
+
- spec/spec_helper.rb
|