guard-jstd 0.0.1
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/.gitignore +4 -0
- data/Gemfile +3 -0
- data/Guardfile +5 -0
- data/README.md +29 -0
- data/Rakefile +2 -0
- data/guard-jstd.gemspec +22 -0
- data/lib/guard/jstd/case_finder.rb +12 -0
- data/lib/guard/jstd/formatter.rb +64 -0
- data/lib/guard/jstd/runner.rb +17 -0
- data/lib/guard/jstd/templates/Guardfile +4 -0
- data/lib/guard/jstd/version.rb +5 -0
- data/lib/guard/jstd.rb +23 -0
- data/spec/guard/jstd/case_finder_spec.rb +33 -0
- data/spec/guard/jstd/formatter_spec.rb +93 -0
- data/spec/guard/jstd/runner_spec.rb +42 -0
- data/spec/guard/jstd_spec.rb +31 -0
- data/spec/spec_helper.rb +12 -0
- metadata +118 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Guard::Jstd
|
2
|
+
|
3
|
+
Guard::Jstd provides autotest functionality for your test driven JavaScript development with JsTestDriver. This gem was inspired by the [jstdutil gem](http://cjohansen.no/en/javascript/jstdutil_a_ruby_wrapper_over_jstestdriver) and modeled after the [Guard::RSpec gem.](https://github.com/guard/guard-rspec)
|
4
|
+
|
5
|
+
## Installing the gem:
|
6
|
+
|
7
|
+
From the command line:
|
8
|
+
|
9
|
+
$ gem install guard-jstd
|
10
|
+
|
11
|
+
Or in your Gemfile:
|
12
|
+
|
13
|
+
group :test do
|
14
|
+
gem "guard-jstd"
|
15
|
+
end
|
16
|
+
|
17
|
+
Generate the suggested Guardfile with:
|
18
|
+
|
19
|
+
guard init jstd
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
See the [Guard](http://github.com/guard/guard) gem README for more information about using Guard.
|
24
|
+
|
25
|
+
If you want to use CoffeeScript in your development, add the [guard-coffeescript gem.](https://github.com/guard/guard-coffeescript)
|
26
|
+
|
27
|
+
## JsTestDriver
|
28
|
+
|
29
|
+
Currently, Guard::Jstd requires that you define an environment variable, $JSTESTDRIVER_HOME, to specify where JsTestDriver .jar file is located at on your system. More information about setting up JsTestDriver on your system can be [found here.](http://www.arailsdemo.com/posts/46) or on the JsTestDriver [homepage.](http://code.google.com/p/js-test-driver/)
|
data/Rakefile
ADDED
data/guard-jstd.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "guard/jstd/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "guard-jstd"
|
7
|
+
s.version = Guard::JstdVersion::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["aRailsDemo"]
|
10
|
+
s.email = ["arailsdemo@gmail.com"]
|
11
|
+
s.homepage = "https://github.com/arailsdemo/guard-jstd"
|
12
|
+
s.summary = %q{A Guard for JsTestDriver}
|
13
|
+
s.description = %q{This will watch for changes in your JavaScript project and automatically run JsTestDriver}
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
|
20
|
+
s.add_dependency("guard", ">= 0.3.0")
|
21
|
+
s.add_development_dependency("rspec", "~> 2.4.0")
|
22
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Guard
|
2
|
+
class Jstd
|
3
|
+
class Formatter
|
4
|
+
TITLES =
|
5
|
+
{
|
6
|
+
:failed => 'You have failing tests.',
|
7
|
+
:success => "All of your tests passed."
|
8
|
+
}
|
9
|
+
|
10
|
+
COLORS =
|
11
|
+
{
|
12
|
+
:success => "\e[32m",
|
13
|
+
:failed => "\e[31m"
|
14
|
+
}
|
15
|
+
|
16
|
+
def self.notify(results)
|
17
|
+
formatter = self.new(results)
|
18
|
+
formatter.notify
|
19
|
+
formatter.to_terminal
|
20
|
+
end
|
21
|
+
|
22
|
+
attr_reader :results, :lines
|
23
|
+
|
24
|
+
def initialize(results)
|
25
|
+
@results = results
|
26
|
+
@lines = results.split("\n")
|
27
|
+
end
|
28
|
+
|
29
|
+
def any_failed?
|
30
|
+
@failed ||= results.match(/failed/)
|
31
|
+
end
|
32
|
+
|
33
|
+
def notify
|
34
|
+
status = any_failed? ? :failed : :success
|
35
|
+
::Guard::Notifier.notify( lines[1].lstrip,
|
36
|
+
{ :title => TITLES[status], :image => status }
|
37
|
+
)
|
38
|
+
end
|
39
|
+
|
40
|
+
def colorize_results
|
41
|
+
lines.collect do |line|
|
42
|
+
if line =~ /failed/
|
43
|
+
colorize(line, :failed)
|
44
|
+
elsif line =~ /Fails: (\d+);/
|
45
|
+
status = $1.to_i == 0 ? :success : :failed
|
46
|
+
colorize(line, status)
|
47
|
+
else
|
48
|
+
line
|
49
|
+
end
|
50
|
+
end.join("\n")
|
51
|
+
end
|
52
|
+
|
53
|
+
def to_terminal
|
54
|
+
UI.info(colorize_results, :reset => true)
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def colorize(text, status)
|
60
|
+
"#{COLORS[status]}#{text}\e[0m"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Guard
|
2
|
+
class Jstd
|
3
|
+
module Runner
|
4
|
+
class << self
|
5
|
+
def java_command
|
6
|
+
"java -jar $JSTESTDRIVER_HOME/JsTestDriver-1.3.2.jar --tests"
|
7
|
+
end
|
8
|
+
|
9
|
+
def run(tests="all")
|
10
|
+
UI.info("Running #{tests}")
|
11
|
+
results = `#{java_command} #{tests}`
|
12
|
+
Formatter.notify(results)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/guard/jstd.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'guard'
|
2
|
+
require 'guard/guard'
|
3
|
+
|
4
|
+
module Guard
|
5
|
+
class Jstd < Guard
|
6
|
+
autoload :Runner, 'guard/jstd/runner'
|
7
|
+
autoload :CaseFinder, 'guard/jstd/case_finder'
|
8
|
+
autoload :Formatter, 'guard/jstd/formatter'
|
9
|
+
|
10
|
+
def start
|
11
|
+
UI.info "Guard::Jstd is running."
|
12
|
+
end
|
13
|
+
|
14
|
+
def run_all
|
15
|
+
Runner.run
|
16
|
+
end
|
17
|
+
|
18
|
+
def run_on_change(paths)
|
19
|
+
cases = CaseFinder.find(paths)
|
20
|
+
Runner.run(cases)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Guard::Jstd::CaseFinder do
|
4
|
+
def file1
|
5
|
+
<<-CASES
|
6
|
+
TestCase("First", {\][pw458asdf,vc]})
|
7
|
+
TestCase ( "Second" , {/?';,~'})
|
8
|
+
CASES
|
9
|
+
end
|
10
|
+
|
11
|
+
def file2
|
12
|
+
<<-CASES
|
13
|
+
TestCase('Third' , {})
|
14
|
+
TestCase("Fourth", {
|
15
|
+
"test": function () {
|
16
|
+
assert(false)
|
17
|
+
}
|
18
|
+
});
|
19
|
+
CASES
|
20
|
+
end
|
21
|
+
|
22
|
+
describe ".find" do
|
23
|
+
context "--given an array of paths--" do
|
24
|
+
it "finds the TestCases in the corresponding files" do
|
25
|
+
path = 'foo/bar.js'
|
26
|
+
path2 = 'hand/foot.js'
|
27
|
+
File.should_receive(:read).with(path) { file1 }
|
28
|
+
File.should_receive(:read).with(path2) { file2 }
|
29
|
+
subject.find([path, path2]).should == "First,Second,Third,Fourth"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Guard::Jstd::Formatter do
|
4
|
+
let(:failed) do
|
5
|
+
<<-FAILED
|
6
|
+
..
|
7
|
+
Total 2 tests (Passed: 1; Fails: 1; Errors: 0) (1.00 ms)
|
8
|
+
Chrome 10.0.648.204 Mac OS: Run 2 tests (Passed: 1; Fails: 1; Errors 0) (1.00 ms)
|
9
|
+
Sneaky3.test failed (1.00 ms): AssertError: expected true but was false
|
10
|
+
AssertError: expected true but was false
|
11
|
+
at Object.test (http://0.0.0.0:4224/test/javascripts/test/extra_test.js:9:5)
|
12
|
+
FAILED
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:passed) do
|
16
|
+
<<-PASSED
|
17
|
+
....
|
18
|
+
Total 4 tests (Passed: 4; Fails: 0; Errors: 0) (4.00 ms)
|
19
|
+
Chrome 10.0.648.204 Mac OS: Run 4 tests (Passed: 4; Fails: 0; Errors 0) (4.00 ms)
|
20
|
+
PASSED
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:klass) { ::Guard::Jstd::Formatter }
|
24
|
+
|
25
|
+
context "--failed test--" do
|
26
|
+
subject { klass.new(failed) }
|
27
|
+
|
28
|
+
its(:any_failed?) { should be_true }
|
29
|
+
|
30
|
+
it "#notify sends :failed arguments to Nofitier" do
|
31
|
+
message = "Total 2 tests (Passed: 1; Fails: 1; Errors: 0) (1.00 ms)"
|
32
|
+
::Guard::Notifier.should_receive(:notify).with(
|
33
|
+
message, { :title => klass::TITLES[:failed], :image => :failed }
|
34
|
+
)
|
35
|
+
subject.notify
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#colorized_results" do
|
39
|
+
it "adds color to the failed test" do
|
40
|
+
subject.colorize_results.should match /\[31m\s+Sneaky3.test/
|
41
|
+
end
|
42
|
+
|
43
|
+
it "adds color to the failed overview line" do
|
44
|
+
subject.colorize_results.should match /\[31m\s+Chrome/
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it "#to_terminal sends colorized results to UI" do
|
49
|
+
subject.stub(:colorize_results) { failed }
|
50
|
+
::Guard::UI.should_receive(:info).with(
|
51
|
+
failed, {:reset => true}
|
52
|
+
)
|
53
|
+
subject.to_terminal
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context "--all tests passed--" do
|
58
|
+
subject { klass.new(passed) }
|
59
|
+
|
60
|
+
its(:any_failed?) { should be_false }
|
61
|
+
|
62
|
+
it "#notify should send :success arguments to Nofitier" do
|
63
|
+
message = "Total 4 tests (Passed: 4; Fails: 0; Errors: 0) (4.00 ms)"
|
64
|
+
::Guard::Notifier.should_receive(:notify).with(
|
65
|
+
message, { :title => klass::TITLES[:success], :image => :success }
|
66
|
+
)
|
67
|
+
subject.notify
|
68
|
+
end
|
69
|
+
|
70
|
+
it "#colorized_results adds color to the successful overview line" do
|
71
|
+
subject.colorize_results.should match /\[32m\s+Total/
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context ".notify" do
|
76
|
+
subject { klass }
|
77
|
+
|
78
|
+
before do
|
79
|
+
@formatter = double.as_null_object
|
80
|
+
subject.should_receive(:new).with(failed) { @formatter }
|
81
|
+
end
|
82
|
+
|
83
|
+
it "calls #notify" do
|
84
|
+
@formatter.should_receive(:notify)
|
85
|
+
subject.notify(failed)
|
86
|
+
end
|
87
|
+
|
88
|
+
it "call #display" do
|
89
|
+
@formatter.should_receive(:to_terminal)
|
90
|
+
subject.notify(failed)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Guard::Jstd::Runner do
|
4
|
+
describe ".run" do
|
5
|
+
let(:test) { "HelloTest" }
|
6
|
+
|
7
|
+
it "sends the test results to the Formatter" do
|
8
|
+
subject.stub(:"`") { 'results' }
|
9
|
+
Guard::Jstd::Formatter.should_receive(:notify).with('results')
|
10
|
+
subject.run
|
11
|
+
end
|
12
|
+
|
13
|
+
context "--JsTestDriver command--" do
|
14
|
+
let(:java_command) { Guard::Jstd::Runner::java_command }
|
15
|
+
|
16
|
+
before { Guard::Jstd::Formatter.stub(:notify) }
|
17
|
+
|
18
|
+
it "can run all tests" do
|
19
|
+
subject.should_receive(:"`").with(
|
20
|
+
"#{java_command} all"
|
21
|
+
)
|
22
|
+
subject.run
|
23
|
+
end
|
24
|
+
|
25
|
+
it "can run a single TestCase" do
|
26
|
+
subject.should_receive(:"`").with(
|
27
|
+
"#{java_command} #{test}"
|
28
|
+
)
|
29
|
+
subject.run(test)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
it "tells UI which tests are running" do
|
34
|
+
Guard::Jstd::Formatter.stub(:notify)
|
35
|
+
subject.stub(:"`")
|
36
|
+
Guard::UI.should_receive(:info).with(
|
37
|
+
"Running #{test}"
|
38
|
+
)
|
39
|
+
subject.run(test)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Guard::Jstd do
|
4
|
+
let(:klass) { Guard::Jstd }
|
5
|
+
|
6
|
+
it "inherits from Guard" do
|
7
|
+
klass.ancestors.should include Guard::Guard
|
8
|
+
end
|
9
|
+
|
10
|
+
it "#start sends a message to UI" do
|
11
|
+
::Guard::UI.should_receive(:info).with(
|
12
|
+
"Guard::Jstd is running."
|
13
|
+
)
|
14
|
+
subject.start
|
15
|
+
end
|
16
|
+
|
17
|
+
it " #run_all runs all tests" do
|
18
|
+
klass::Runner.should_receive(:run)
|
19
|
+
subject.run_all
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#run_on_change" do
|
23
|
+
it "starts the Runner with the corresponding TestCases" do
|
24
|
+
paths = ['foo/bar.js', 'hand/foot.js']
|
25
|
+
cases = 'First,Second'
|
26
|
+
klass::CaseFinder.should_receive(:find).with(paths) { cases }
|
27
|
+
klass::Runner.should_receive(:run).with(cases)
|
28
|
+
subject.run_on_change(paths)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: guard-jstd
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- aRailsDemo
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-04-07 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: guard
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 19
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 3
|
32
|
+
- 0
|
33
|
+
version: 0.3.0
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 31
|
45
|
+
segments:
|
46
|
+
- 2
|
47
|
+
- 4
|
48
|
+
- 0
|
49
|
+
version: 2.4.0
|
50
|
+
type: :development
|
51
|
+
version_requirements: *id002
|
52
|
+
description: This will watch for changes in your JavaScript project and automatically run JsTestDriver
|
53
|
+
email:
|
54
|
+
- arailsdemo@gmail.com
|
55
|
+
executables: []
|
56
|
+
|
57
|
+
extensions: []
|
58
|
+
|
59
|
+
extra_rdoc_files: []
|
60
|
+
|
61
|
+
files:
|
62
|
+
- .gitignore
|
63
|
+
- Gemfile
|
64
|
+
- Guardfile
|
65
|
+
- README.md
|
66
|
+
- Rakefile
|
67
|
+
- guard-jstd.gemspec
|
68
|
+
- lib/guard/jstd.rb
|
69
|
+
- lib/guard/jstd/case_finder.rb
|
70
|
+
- lib/guard/jstd/formatter.rb
|
71
|
+
- lib/guard/jstd/runner.rb
|
72
|
+
- lib/guard/jstd/templates/Guardfile
|
73
|
+
- lib/guard/jstd/version.rb
|
74
|
+
- spec/guard/jstd/case_finder_spec.rb
|
75
|
+
- spec/guard/jstd/formatter_spec.rb
|
76
|
+
- spec/guard/jstd/runner_spec.rb
|
77
|
+
- spec/guard/jstd_spec.rb
|
78
|
+
- spec/spec_helper.rb
|
79
|
+
homepage: https://github.com/arailsdemo/guard-jstd
|
80
|
+
licenses: []
|
81
|
+
|
82
|
+
post_install_message:
|
83
|
+
rdoc_options: []
|
84
|
+
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
hash: 3
|
93
|
+
segments:
|
94
|
+
- 0
|
95
|
+
version: "0"
|
96
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
hash: 3
|
102
|
+
segments:
|
103
|
+
- 0
|
104
|
+
version: "0"
|
105
|
+
requirements: []
|
106
|
+
|
107
|
+
rubyforge_project:
|
108
|
+
rubygems_version: 1.7.2
|
109
|
+
signing_key:
|
110
|
+
specification_version: 3
|
111
|
+
summary: A Guard for JsTestDriver
|
112
|
+
test_files:
|
113
|
+
- spec/guard/jstd/case_finder_spec.rb
|
114
|
+
- spec/guard/jstd/formatter_spec.rb
|
115
|
+
- spec/guard/jstd/runner_spec.rb
|
116
|
+
- spec/guard/jstd_spec.rb
|
117
|
+
- spec/spec_helper.rb
|
118
|
+
has_rdoc:
|