jslint-v8 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +3 -0
- data/Gemfile.lock +23 -0
- data/README.markdown +1 -0
- data/bin/jslint-v8 +24 -0
- data/lib/jslint-v8/formatter.rb +47 -0
- data/lib/jslint-v8/js/jslint.js +538 -0
- data/lib/jslint-v8/lint_error.rb +14 -0
- data/lib/jslint-v8/rake_task.rb +79 -0
- data/lib/jslint-v8/runner.rb +82 -0
- data/lib/jslint-v8/version.rb +11 -0
- data/lib/jslint-v8.rb +6 -0
- data/test/helper.rb +18 -0
- data/test/suite.rb +5 -0
- data/test/test_cli.rb +44 -0
- data/test/test_formatter.rb +51 -0
- data/test/test_lint_error.rb +32 -0
- data/test/test_runner.rb +141 -0
- data/test/test_task.rb +126 -0
- metadata +133 -0
@@ -0,0 +1,14 @@
|
|
1
|
+
|
2
|
+
module JSLintV8
|
3
|
+
class LintError
|
4
|
+
attr_reader :line_number, :character, :reason, :evidence
|
5
|
+
|
6
|
+
def initialize(jsobject)
|
7
|
+
@line_number = jsobject["line"]
|
8
|
+
@character = jsobject["character"]
|
9
|
+
@reason = jsobject["reason"]
|
10
|
+
@evidence = jsobject["evidence"]
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/tasklib'
|
3
|
+
|
4
|
+
module JSLintV8
|
5
|
+
class RakeTask < ::Rake::TaskLib
|
6
|
+
# name of the rake task
|
7
|
+
attr_accessor :name
|
8
|
+
|
9
|
+
# description for the task
|
10
|
+
attr_accessor :description
|
11
|
+
|
12
|
+
# inclusion glob pattern for files
|
13
|
+
attr_accessor :include_pattern
|
14
|
+
|
15
|
+
# exclusion glob pattern for files
|
16
|
+
attr_accessor :exclude_pattern
|
17
|
+
|
18
|
+
# output stream for this task
|
19
|
+
attr_accessor :output_stream
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
# a default name
|
23
|
+
@name = "lint"
|
24
|
+
|
25
|
+
# a default description
|
26
|
+
@description = "Runs the JSLint Test Suite"
|
27
|
+
|
28
|
+
# by default a glob pattern that will include javascript files found in rails
|
29
|
+
@include_pattern = "app/javascripts/**/*.js"
|
30
|
+
|
31
|
+
# by default a glob pattern which will match no files
|
32
|
+
@exclude_pattern = ""
|
33
|
+
|
34
|
+
# by default use standard output for writing information
|
35
|
+
@output_stream = STDOUT
|
36
|
+
|
37
|
+
# if a block was given allow the block to call elements on this object
|
38
|
+
yield self if block_given?
|
39
|
+
|
40
|
+
# create the rake task
|
41
|
+
new_task = task(name) do
|
42
|
+
formatter = JSLintV8::Formatter.new(output_stream)
|
43
|
+
|
44
|
+
lint_result = runner.run do |file, errors|
|
45
|
+
formatter.tick(errors)
|
46
|
+
end
|
47
|
+
|
48
|
+
# put a separator line in between the ticks and any summary
|
49
|
+
output_stream.print "\n"
|
50
|
+
|
51
|
+
# print a summary of failed files
|
52
|
+
formatter.summary(files_to_run, lint_result)
|
53
|
+
|
54
|
+
# raise an exception if there are errors
|
55
|
+
raise "jslint suite failed" unless lint_result.empty?
|
56
|
+
end
|
57
|
+
|
58
|
+
# assign the description to the rake task
|
59
|
+
new_task.comment = description
|
60
|
+
end
|
61
|
+
|
62
|
+
#
|
63
|
+
# Returns a list of all files to run, sorted
|
64
|
+
#
|
65
|
+
def files_to_run
|
66
|
+
included_files = Dir.glob(include_pattern)
|
67
|
+
excluded_files = Dir.glob(exclude_pattern)
|
68
|
+
|
69
|
+
(included_files - excluded_files).sort
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def runner
|
75
|
+
JSLintV8::Runner.new(files_to_run)
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'v8'
|
2
|
+
|
3
|
+
module JSLintV8
|
4
|
+
class Runner
|
5
|
+
JSLintLibraryFilename = File.expand_path("js/jslint.js", File.dirname(__FILE__))
|
6
|
+
|
7
|
+
attr_reader :file_list
|
8
|
+
|
9
|
+
def initialize(files)
|
10
|
+
if(files.is_a?(Array))
|
11
|
+
@file_list = files
|
12
|
+
else
|
13
|
+
@file_list = [files]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def run
|
18
|
+
# make sure all files exit
|
19
|
+
file_list.each do |file|
|
20
|
+
raise "file not found: #{file}" unless File.exist?(file)
|
21
|
+
end
|
22
|
+
|
23
|
+
result = {}
|
24
|
+
|
25
|
+
file_list.each do |file|
|
26
|
+
errors = jslint(File.read(file))
|
27
|
+
|
28
|
+
yield(file, errors) if block_given?
|
29
|
+
|
30
|
+
next if errors.empty?
|
31
|
+
|
32
|
+
result[file] = errors
|
33
|
+
end
|
34
|
+
|
35
|
+
result
|
36
|
+
end
|
37
|
+
|
38
|
+
def runtime
|
39
|
+
@runtime ||= lambda do
|
40
|
+
runtime = V8::Context.new
|
41
|
+
|
42
|
+
# load the jslint library into the runtime
|
43
|
+
runtime.eval(File.read JSLintLibraryFilename)
|
44
|
+
|
45
|
+
# return the runtime
|
46
|
+
runtime
|
47
|
+
end.call
|
48
|
+
end
|
49
|
+
|
50
|
+
def jslint(source_code)
|
51
|
+
jslint_function.call(source_code, jslint_options)
|
52
|
+
jslint_result
|
53
|
+
end
|
54
|
+
|
55
|
+
def jslint_function
|
56
|
+
runtime["JSLINT"];
|
57
|
+
end
|
58
|
+
|
59
|
+
def jslint_result
|
60
|
+
runtime["JSLINT"]["errors"].to_a.compact.map do |error_object|
|
61
|
+
JSLintV8::LintError.new(error_object)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def jslint_options
|
66
|
+
{
|
67
|
+
"bitwise" => true,
|
68
|
+
"eqeqeq" => true,
|
69
|
+
"immed" => true,
|
70
|
+
"newcap" => true,
|
71
|
+
"nomen" => true,
|
72
|
+
"onevar" => true,
|
73
|
+
"plusplus" => true,
|
74
|
+
"regexp" => true,
|
75
|
+
"rhino" => true,
|
76
|
+
"undef" => true,
|
77
|
+
"white" => true
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
data/lib/jslint-v8.rb
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
module JSLintV8 end
|
2
|
+
|
3
|
+
require File.expand_path("jslint-v8/runner", File.dirname(__FILE__))
|
4
|
+
require File.expand_path("jslint-v8/rake_task", File.dirname(__FILE__))
|
5
|
+
require File.expand_path("jslint-v8/lint_error", File.dirname(__FILE__))
|
6
|
+
require File.expand_path("jslint-v8/formatter", File.dirname(__FILE__))
|
data/test/helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require 'test/unit'
|
3
|
+
require 'erb'
|
4
|
+
|
5
|
+
# require the library code
|
6
|
+
require File.expand_path("../lib/jslint-v8", File.dirname(__FILE__))
|
7
|
+
|
8
|
+
def erb_fixture(basename)
|
9
|
+
::ERB.new(File.read(erb_filename(basename))).result
|
10
|
+
end
|
11
|
+
|
12
|
+
def erb_filename(basename)
|
13
|
+
File.expand_path("fixtures/#{basename}.txt.erb", File.dirname(__FILE__))
|
14
|
+
end
|
15
|
+
|
16
|
+
def js_filename(basename)
|
17
|
+
File.expand_path("fixtures/#{basename}.js", File.dirname(__FILE__))
|
18
|
+
end
|
data/test/suite.rb
ADDED
data/test/test_cli.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require File.expand_path('helper', File.dirname(__FILE__))
|
2
|
+
require 'erb'
|
3
|
+
|
4
|
+
class TestCli < Test::Unit::TestCase
|
5
|
+
Executable = File.expand_path("../bin/jslint-v8", File.dirname(__FILE__))
|
6
|
+
|
7
|
+
def test_executable_exists
|
8
|
+
assert File.exist?(Executable)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_empty_args
|
12
|
+
result = `#{Executable}`
|
13
|
+
|
14
|
+
assert_equal "usage: jslint-v8 FILES\n", result
|
15
|
+
assert_equal false, $?.success?
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_valid
|
19
|
+
result = %x{#{Executable} "#{js_filename "valid"}"}
|
20
|
+
|
21
|
+
assert $?.success?
|
22
|
+
assert_equal erb_fixture("cli-valid-expected-output"), result
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_invalid
|
26
|
+
result = %x{#{Executable} "#{js_filename "invalid"}"}
|
27
|
+
|
28
|
+
assert_equal false, $?.success?
|
29
|
+
assert_equal erb_fixture("cli-invalid-expected-output"), result
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_suite
|
33
|
+
defined_globals = js_filename("defined-globals")
|
34
|
+
defined_options = js_filename("defined-options")
|
35
|
+
invalid = js_filename("invalid")
|
36
|
+
valid = js_filename("valid")
|
37
|
+
|
38
|
+
result = %x{#{Executable} "#{defined_globals}" "#{defined_options}" "#{invalid}" "#{valid}"}
|
39
|
+
|
40
|
+
assert_equal false, $?.success?
|
41
|
+
assert_equal erb_fixture("cli-suite-expected-output"), result
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require File.expand_path('helper', File.dirname(__FILE__))
|
2
|
+
require 'erb'
|
3
|
+
require 'stringio'
|
4
|
+
|
5
|
+
class TestFormatter < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@output = String.new
|
9
|
+
@output_stream = StringIO.new(@output, "w+")
|
10
|
+
|
11
|
+
@formatter = JSLintV8::Formatter.new(@output_stream)
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_create
|
15
|
+
assert_equal @output_stream.object_id, @formatter.output_stream.object_id
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_tick
|
19
|
+
assert_equal "", @output
|
20
|
+
|
21
|
+
@formatter.tick([])
|
22
|
+
|
23
|
+
assert_equal ".", @output
|
24
|
+
|
25
|
+
@formatter.tick(["foo"])
|
26
|
+
|
27
|
+
assert_equal ".*", @output
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_summary_with_no_errors
|
31
|
+
@formatter.summary(%w(foo bar), {})
|
32
|
+
|
33
|
+
assert_equal erb_fixture("formatter-summary-noerrors"), @output
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_summary_with_errors
|
37
|
+
error_1 = JSLintV8::LintError.new("line" => 42, "character" => 10, "reason" => "because i can")
|
38
|
+
error_2 = JSLintV8::LintError.new("line" => 43, "character" => 3, "reason" => "a proof is not a proof")
|
39
|
+
error_3 = JSLintV8::LintError.new("line" => 139, "character" => 12, "reason" => "undefined global 'foo'")
|
40
|
+
|
41
|
+
result = {
|
42
|
+
"foo" => [error_1, error_2],
|
43
|
+
"bar" => [error_3]
|
44
|
+
}
|
45
|
+
|
46
|
+
@formatter.summary(%w(foo bar baz one two three), result)
|
47
|
+
|
48
|
+
assert_equal erb_fixture("formatter-summary-errors"), @output
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.expand_path('helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
class TestLintError < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@object = {
|
7
|
+
"line" => 42,
|
8
|
+
"character" => 10,
|
9
|
+
"reason" => "because i can",
|
10
|
+
"evidence" => "I don't know, a proof is a proof. What kind of a proof? It's a proof. A proof is a proof, and when you have a good proof, it's because it's proven."
|
11
|
+
}
|
12
|
+
|
13
|
+
@error = JSLintV8::LintError.new(@object)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_line_number
|
17
|
+
assert_equal @error.line_number, 42
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_character
|
21
|
+
assert_equal @error.character, 10
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_reason
|
25
|
+
assert_equal @error.reason, "because i can"
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_evidence
|
29
|
+
assert_equal @error.evidence, "I don't know, a proof is a proof. What kind of a proof? It's a proof. A proof is a proof, and when you have a good proof, it's because it's proven."
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
data/test/test_runner.rb
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
require File.expand_path('helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
class TestRunner < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@runner = JSLintV8::Runner.new(%w(foo bar))
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_lint_library_filename
|
10
|
+
assert File.exist? JSLintV8::Runner::JSLintLibraryFilename
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_file_list
|
14
|
+
assert_equal @runner.file_list, %w(foo bar)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_constructor_enumerable_wrapping
|
18
|
+
@runner = JSLintV8::Runner.new("foo")
|
19
|
+
|
20
|
+
assert_equal @runner.file_list, %w(foo)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_file_not_found
|
24
|
+
assert_raise RuntimeError do
|
25
|
+
@runner.run
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_file_found
|
30
|
+
filename = js_filename "valid"
|
31
|
+
|
32
|
+
assert_nothing_raised do
|
33
|
+
JSLintV8::Runner.new(filename).run
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_runtime
|
38
|
+
assert @runner.runtime.is_a?(V8::Context)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_runtime_caching
|
42
|
+
first = @runner.runtime
|
43
|
+
assert_equal @runner.runtime.object_id, first.object_id
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_jslint_function_proxy
|
47
|
+
assert_not_nil @runner.jslint_function
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_jslint_result
|
51
|
+
assert @runner.jslint_result.is_a?(Array)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_jslint_default_options
|
55
|
+
assert @runner.jslint_options.keys.any?
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_jslint_returns_array_of_errors
|
59
|
+
result = @runner.jslint("if(true) alert('foo');")
|
60
|
+
|
61
|
+
assert result.is_a?(Array)
|
62
|
+
assert result.length > 0
|
63
|
+
assert result.all? {|error| error.is_a?(JSLintV8::LintError) }
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_run
|
67
|
+
filename = js_filename("invalid")
|
68
|
+
|
69
|
+
result = JSLintV8::Runner.new(filename).run
|
70
|
+
|
71
|
+
assert result.is_a?(Hash)
|
72
|
+
assert result.keys.include?(filename)
|
73
|
+
assert result[filename].is_a?(Array)
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_valid_run
|
77
|
+
filename = js_filename("valid")
|
78
|
+
|
79
|
+
result = JSLintV8::Runner.new(filename).run
|
80
|
+
|
81
|
+
errors = result[filename]
|
82
|
+
|
83
|
+
assert errors.nil?
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_invalid_run
|
87
|
+
filename = js_filename("invalid")
|
88
|
+
|
89
|
+
result = JSLintV8::Runner.new(filename).run
|
90
|
+
|
91
|
+
errors = result[filename]
|
92
|
+
|
93
|
+
assert errors.any?
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_defined_globals
|
97
|
+
filename = js_filename("defined-globals")
|
98
|
+
|
99
|
+
result = JSLintV8::Runner.new(filename).run
|
100
|
+
|
101
|
+
errors = result[filename]
|
102
|
+
|
103
|
+
assert errors.nil?
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_defined_options
|
107
|
+
filename = js_filename("defined-options")
|
108
|
+
|
109
|
+
result = JSLintV8::Runner.new(filename).run
|
110
|
+
|
111
|
+
errors = result[filename]
|
112
|
+
|
113
|
+
assert errors.nil?
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_block
|
117
|
+
filename = js_filename("valid")
|
118
|
+
|
119
|
+
count = 0
|
120
|
+
|
121
|
+
JSLintV8::Runner.new(filename).run do |file, errors|
|
122
|
+
count += 1
|
123
|
+
|
124
|
+
if count == 1
|
125
|
+
assert_equal file, filename
|
126
|
+
assert_equal errors, []
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
assert_equal count, 1
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_rejects_successful
|
134
|
+
valid_file = js_filename("valid")
|
135
|
+
invalid_file = js_filename("invalid")
|
136
|
+
|
137
|
+
result = JSLintV8::Runner.new([valid_file, invalid_file]).run
|
138
|
+
|
139
|
+
assert_equal result.keys.length, 1
|
140
|
+
end
|
141
|
+
end
|
data/test/test_task.rb
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
require File.expand_path('helper', File.dirname(__FILE__))
|
2
|
+
require 'rake'
|
3
|
+
require 'tempfile'
|
4
|
+
|
5
|
+
class TestTask < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
# completely reset the rake application to ensure everything is clean
|
9
|
+
Rake.application = nil
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_creation
|
13
|
+
initial_length = Rake.application.tasks.length
|
14
|
+
|
15
|
+
JSLintV8::RakeTask.new
|
16
|
+
|
17
|
+
# the number of tasks should have increased by 1
|
18
|
+
assert_equal initial_length + 1, Rake.application.tasks.length
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_default_name
|
22
|
+
JSLintV8::RakeTask.new
|
23
|
+
|
24
|
+
task = Rake.application.lookup("lint")
|
25
|
+
|
26
|
+
assert_equal "lint", task.name
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_default_description
|
30
|
+
JSLintV8::RakeTask.new
|
31
|
+
|
32
|
+
task = Rake.application.lookup("lint")
|
33
|
+
|
34
|
+
assert_equal "Runs the JSLint Test Suite", task.comment
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_default_include_pattern
|
38
|
+
task = JSLintV8::RakeTask.new
|
39
|
+
|
40
|
+
assert_equal "app/javascripts/**/*.js", task.include_pattern
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_default_exclude_pattern
|
44
|
+
task = JSLintV8::RakeTask.new
|
45
|
+
|
46
|
+
assert_equal "", task.exclude_pattern
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_default_output_stream
|
50
|
+
task = JSLintV8::RakeTask.new
|
51
|
+
|
52
|
+
assert_equal STDOUT, task.output_stream
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_creation_block
|
56
|
+
tempfile = Tempfile.new("foo")
|
57
|
+
|
58
|
+
task = JSLintV8::RakeTask.new do |task|
|
59
|
+
task.name = "foo"
|
60
|
+
task.description = "Points out the bad codezzzz"
|
61
|
+
task.include_pattern = "js/**/*.js"
|
62
|
+
task.exclude_pattern = "js/**/*.txt"
|
63
|
+
task.output_stream = tempfile
|
64
|
+
end
|
65
|
+
|
66
|
+
rake_task = Rake.application.lookup("foo")
|
67
|
+
|
68
|
+
assert_equal "foo", rake_task.name
|
69
|
+
assert_equal "Points out the bad codezzzz", rake_task.comment
|
70
|
+
assert_equal "js/**/*.js", task.include_pattern
|
71
|
+
assert_equal "js/**/*.txt", task.exclude_pattern
|
72
|
+
assert_equal tempfile.object_id, task.output_stream.object_id
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_files_to_run
|
76
|
+
task = JSLintV8::RakeTask.new do |task|
|
77
|
+
task.include_pattern = File.expand_path("fixtures/*", File.dirname(__FILE__))
|
78
|
+
task.exclude_pattern = File.expand_path("fixtures/*.erb", File.dirname(__FILE__))
|
79
|
+
end
|
80
|
+
|
81
|
+
expected_files = Dir.glob(File.expand_path("fixtures/*.js", File.dirname(__FILE__))).sort
|
82
|
+
|
83
|
+
assert_equal expected_files, task.files_to_run
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_valid_output
|
87
|
+
result = String.new
|
88
|
+
|
89
|
+
task = JSLintV8::RakeTask.new do |task|
|
90
|
+
task.include_pattern = File.expand_path("fixtures/valid.js", File.dirname(__FILE__))
|
91
|
+
task.output_stream = StringIO.new(result, "w+")
|
92
|
+
end
|
93
|
+
|
94
|
+
Rake.application.lookup("lint").invoke
|
95
|
+
|
96
|
+
assert_equal erb_fixture("cli-valid-expected-output"), result
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_invalid_output
|
100
|
+
result = String.new
|
101
|
+
|
102
|
+
task = JSLintV8::RakeTask.new do |task|
|
103
|
+
task.include_pattern = File.expand_path("fixtures/invalid.js", File.dirname(__FILE__))
|
104
|
+
task.output_stream = StringIO.new(result, "w+")
|
105
|
+
end
|
106
|
+
|
107
|
+
assert_raise RuntimeError do
|
108
|
+
Rake.application.lookup("lint").invoke
|
109
|
+
end
|
110
|
+
|
111
|
+
assert_equal erb_fixture("cli-invalid-expected-output"), result
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_suite_output
|
115
|
+
result = String.new
|
116
|
+
|
117
|
+
task = JSLintV8::RakeTask.new do |task|
|
118
|
+
task.include_pattern = File.expand_path("fixtures/*.js", File.dirname(__FILE__))
|
119
|
+
task.output_stream = StringIO.new(result, "w+")
|
120
|
+
end
|
121
|
+
|
122
|
+
Rake.application.lookup("lint").invoke rescue # exception raised because of failing suite
|
123
|
+
|
124
|
+
assert_equal erb_fixture("cli-suite-expected-output"), result
|
125
|
+
end
|
126
|
+
end
|