chinchilla 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/chinchilla.gemspec +3 -3
- data/lib/chinchilla/runner.rb +42 -57
- data/lib/chinchilla/version.rb +1 -1
- data/lib/chinchilla.rb +4 -8
- metadata +5 -14
- data/lib/chinchilla/runner/example.rb +0 -23
- data/lib/chinchilla/runner/runner.js +0 -40
- data/lib/chinchilla/runner/test.rb +0 -85
data/chinchilla.gemspec
CHANGED
@@ -8,13 +8,13 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.version = Chinchilla::VERSION
|
9
9
|
gem.authors = ["tchak"]
|
10
10
|
gem.email = ["paul@chavard.net"]
|
11
|
-
gem.description = %q{
|
12
|
-
gem.summary = %q{Run
|
11
|
+
gem.description = %q{mocha test runner}
|
12
|
+
gem.summary = %q{Run mocha test on Capybara}
|
13
13
|
gem.homepage = ""
|
14
14
|
|
15
15
|
gem.add_dependency 'capybara'
|
16
16
|
gem.add_dependency 'poltergeist'
|
17
|
-
gem.add_dependency '
|
17
|
+
gem.add_dependency 'rocha'
|
18
18
|
|
19
19
|
gem.files = `git ls-files`.split($\)
|
20
20
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
data/lib/chinchilla/runner.rb
CHANGED
@@ -1,23 +1,18 @@
|
|
1
|
-
require 'chinchilla/runner/example'
|
2
|
-
require 'chinchilla/runner/test'
|
3
|
-
|
4
1
|
module Chinchilla
|
5
2
|
class Runner
|
6
|
-
def self.
|
7
|
-
|
3
|
+
def self.start(options={})
|
4
|
+
new(options).run
|
8
5
|
end
|
9
6
|
|
7
|
+
attr_reader :reporter
|
8
|
+
|
10
9
|
def initialize(options)
|
11
|
-
options[:urls] = [options.delete(:url)] if options.has_key?(:url)
|
12
10
|
@options = options
|
11
|
+
@reporter = Rocha::Reporter.new(*formatters)
|
13
12
|
end
|
14
13
|
|
15
|
-
def
|
16
|
-
@
|
17
|
-
end
|
18
|
-
|
19
|
-
def urls
|
20
|
-
@urls ||= @options[:urls] || ['/']
|
14
|
+
def url
|
15
|
+
@url ||= @options[:url] || '/'
|
21
16
|
end
|
22
17
|
|
23
18
|
def driver
|
@@ -28,64 +23,54 @@ module Chinchilla
|
|
28
23
|
driver == :poltergeist
|
29
24
|
end
|
30
25
|
|
31
|
-
def application
|
32
|
-
@application ||= @options[:application] || default_application
|
33
|
-
end
|
34
|
-
|
35
|
-
def default_application
|
36
|
-
defined?(Rails) ? Rails.application : nil
|
37
|
-
end
|
38
|
-
|
39
|
-
def tests
|
40
|
-
@tests ||= urls.map {|url| Test.new(self, url) }
|
41
|
-
end
|
42
|
-
|
43
26
|
def run
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
27
|
+
session.visit(url)
|
28
|
+
|
29
|
+
events_consumed = 0
|
30
|
+
done = false
|
31
|
+
begin
|
32
|
+
sleep 0.1
|
33
|
+
events = JSON.parse(session.evaluate_script('window.mocha.getEvents()'))
|
34
|
+
if events
|
35
|
+
events[events_consumed..-1].each do |event|
|
36
|
+
done = true if event['event'] == 'end'
|
37
|
+
reporter.process_mocha_event(event)
|
38
|
+
end
|
39
|
+
|
40
|
+
events_consumed = events.length
|
41
|
+
end
|
42
|
+
end until done
|
53
43
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
passed?
|
44
|
+
reporter.passed?
|
45
|
+
rescue => e
|
46
|
+
raise e, "Error communicating with browser process: #{e}", e.backtrace
|
58
47
|
end
|
59
48
|
|
60
|
-
def
|
61
|
-
|
49
|
+
def session
|
50
|
+
@session ||= begin
|
51
|
+
if poltergeist? && !defined?(Capybara::Poltergeist)
|
52
|
+
require "capybara/poltergeist"
|
53
|
+
end
|
54
|
+
Capybara::Session.new(driver, application)
|
55
|
+
end
|
62
56
|
end
|
63
57
|
|
64
|
-
|
65
|
-
examples.select { |example| not example.passed? }
|
66
|
-
end
|
58
|
+
private
|
67
59
|
|
68
|
-
def
|
69
|
-
|
60
|
+
def application
|
61
|
+
@application ||= @options[:application] || default_application
|
70
62
|
end
|
71
63
|
|
72
|
-
def
|
73
|
-
|
64
|
+
def formatters
|
65
|
+
@formatters ||= @options[:formatters] || default_formatters
|
74
66
|
end
|
75
67
|
|
76
|
-
def
|
77
|
-
|
78
|
-
tests.map { |test| test.failure_messages }.compact.join("\n\n")
|
79
|
-
end
|
68
|
+
def default_application
|
69
|
+
defined?(Rails) ? Rails.application : nil
|
80
70
|
end
|
81
71
|
|
82
|
-
def
|
83
|
-
|
84
|
-
if poltergeist? && !defined?(Capybara::Poltergeist)
|
85
|
-
require "capybara/poltergeist"
|
86
|
-
end
|
87
|
-
Capybara::Session.new(driver, application)
|
88
|
-
end
|
72
|
+
def default_formatters
|
73
|
+
[Rocha::Formatter.new(STDOUT)]
|
89
74
|
end
|
90
75
|
end
|
91
76
|
end
|
data/lib/chinchilla/version.rb
CHANGED
data/lib/chinchilla.rb
CHANGED
@@ -1,13 +1,9 @@
|
|
1
|
-
require "chinchilla/version"
|
2
|
-
|
3
1
|
require "capybara"
|
4
|
-
require "
|
5
|
-
|
2
|
+
require "rocha"
|
6
3
|
require "chinchilla/runner"
|
7
4
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
end
|
5
|
+
module Chinchilla
|
6
|
+
def self.start(options={})
|
7
|
+
Runner.start(options)
|
12
8
|
end
|
13
9
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chinchilla
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capybara
|
@@ -44,7 +44,7 @@ dependencies:
|
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
47
|
+
name: rocha
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
@@ -59,7 +59,7 @@ dependencies:
|
|
59
59
|
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
|
-
description:
|
62
|
+
description: mocha test runner
|
63
63
|
email:
|
64
64
|
- paul@chavard.net
|
65
65
|
executables: []
|
@@ -74,9 +74,6 @@ files:
|
|
74
74
|
- chinchilla.gemspec
|
75
75
|
- lib/chinchilla.rb
|
76
76
|
- lib/chinchilla/runner.rb
|
77
|
-
- lib/chinchilla/runner/example.rb
|
78
|
-
- lib/chinchilla/runner/runner.js
|
79
|
-
- lib/chinchilla/runner/test.rb
|
80
77
|
- lib/chinchilla/version.rb
|
81
78
|
homepage: ''
|
82
79
|
licenses: []
|
@@ -90,22 +87,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
90
87
|
- - ! '>='
|
91
88
|
- !ruby/object:Gem::Version
|
92
89
|
version: '0'
|
93
|
-
segments:
|
94
|
-
- 0
|
95
|
-
hash: 2808188431047913734
|
96
90
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
91
|
none: false
|
98
92
|
requirements:
|
99
93
|
- - ! '>='
|
100
94
|
- !ruby/object:Gem::Version
|
101
95
|
version: '0'
|
102
|
-
segments:
|
103
|
-
- 0
|
104
|
-
hash: 2808188431047913734
|
105
96
|
requirements: []
|
106
97
|
rubyforge_project:
|
107
98
|
rubygems_version: 1.8.23
|
108
99
|
signing_key:
|
109
100
|
specification_version: 3
|
110
|
-
summary: Run
|
101
|
+
summary: Run mocha test on Capybara
|
111
102
|
test_files: []
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module Chinchilla
|
2
|
-
class Runner
|
3
|
-
class Example
|
4
|
-
def initialize(row)
|
5
|
-
@row = row
|
6
|
-
end
|
7
|
-
|
8
|
-
def passed?
|
9
|
-
@row['passed']
|
10
|
-
end
|
11
|
-
|
12
|
-
def failure_message
|
13
|
-
unless passed?
|
14
|
-
msg = []
|
15
|
-
msg << " Failed: #{@row['name']}"
|
16
|
-
msg << " #{@row['message']}"
|
17
|
-
msg << " in #{@row['trace']}" if @row['trace']
|
18
|
-
msg.join("\n")
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
QUnit.Runner = {
|
2
|
-
done: false,
|
3
|
-
dots: "",
|
4
|
-
results: []
|
5
|
-
};
|
6
|
-
|
7
|
-
QUnit.Runner.getResults = function() {
|
8
|
-
return JSON.stringify(QUnit.Runner.results);
|
9
|
-
};
|
10
|
-
|
11
|
-
var currentTest = {};
|
12
|
-
QUnit.testDone = function(results) {
|
13
|
-
QUnit.Runner.dots += (results.failed > 0 ? "F" : ".");
|
14
|
-
QUnit.Runner.results.push({
|
15
|
-
name: results.name,
|
16
|
-
passed: results.failed === 0,
|
17
|
-
message: currentTest.message
|
18
|
-
});
|
19
|
-
|
20
|
-
currentTest = {};
|
21
|
-
};
|
22
|
-
|
23
|
-
QUnit.log = function(results) {
|
24
|
-
if (!results.result) {
|
25
|
-
var message;
|
26
|
-
if (results.message) {
|
27
|
-
message = results.message;
|
28
|
-
} else {
|
29
|
-
message = "Expected '"+results.expected+"', got '"+results.actual+"'";
|
30
|
-
}
|
31
|
-
currentTest.message = message;
|
32
|
-
currentTest.trace = results.source;
|
33
|
-
}
|
34
|
-
};
|
35
|
-
|
36
|
-
QUnit.done = function(results) {
|
37
|
-
QUnit.Runner.done = true;
|
38
|
-
};
|
39
|
-
|
40
|
-
QUnit.config.autorun = false;
|
@@ -1,85 +0,0 @@
|
|
1
|
-
module Chinchilla
|
2
|
-
class Runner
|
3
|
-
class Test
|
4
|
-
attr_reader :runner, :url
|
5
|
-
|
6
|
-
def initialize(runner, url)
|
7
|
-
@runner = runner
|
8
|
-
@url = url
|
9
|
-
end
|
10
|
-
|
11
|
-
def session
|
12
|
-
runner.session
|
13
|
-
end
|
14
|
-
|
15
|
-
def io
|
16
|
-
runner.io
|
17
|
-
end
|
18
|
-
|
19
|
-
def run
|
20
|
-
io.puts dots
|
21
|
-
io.puts failure_messages
|
22
|
-
io.puts "\n#{examples.size} assertions, #{failed_examples.size} failures"
|
23
|
-
passed?
|
24
|
-
end
|
25
|
-
|
26
|
-
def colorize_dots(dots)
|
27
|
-
dots = dots.chars.map do |d|
|
28
|
-
case d
|
29
|
-
when 'E', 'F'; d.red
|
30
|
-
when 'P'; d.yellow
|
31
|
-
when '.'; d.green
|
32
|
-
else; d
|
33
|
-
end
|
34
|
-
end
|
35
|
-
dots.join ''
|
36
|
-
end
|
37
|
-
|
38
|
-
def examples
|
39
|
-
@results ||= begin
|
40
|
-
session.visit(url)
|
41
|
-
|
42
|
-
session.execute_script(runner_js)
|
43
|
-
|
44
|
-
dots_printed = 0
|
45
|
-
|
46
|
-
begin
|
47
|
-
sleep 0.1
|
48
|
-
done, dots = session.evaluate_script('[QUnit.Runner.done, QUnit.Runner.dots]')
|
49
|
-
if dots
|
50
|
-
io.write colorize_dots(dots[dots_printed..-1])
|
51
|
-
io.flush
|
52
|
-
dots_printed = dots.length
|
53
|
-
end
|
54
|
-
end until done
|
55
|
-
|
56
|
-
JSON.parse(session.evaluate_script('QUnit.Runner.getResults()')).map do |row|
|
57
|
-
Example.new(row)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def runner_js
|
63
|
-
"(function() {"+File.read(File.expand_path("../runner.js", __FILE__))+"})();"
|
64
|
-
end
|
65
|
-
|
66
|
-
def failed_examples
|
67
|
-
examples.select { |example| not example.passed? }
|
68
|
-
end
|
69
|
-
|
70
|
-
def passed?
|
71
|
-
examples.all? { |example| example.passed? }
|
72
|
-
end
|
73
|
-
|
74
|
-
def dots
|
75
|
-
examples; ""
|
76
|
-
end
|
77
|
-
|
78
|
-
def failure_messages
|
79
|
-
unless passed?
|
80
|
-
examples.map { |example| example.failure_message }.compact.join("\n\n")
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|