loris 0.2.3 → 0.3.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/Rakefile +1 -0
- data/VERSION +1 -1
- data/lib/closure-compiler/compiler.jar +0 -0
- data/lib/file_actioner.rb +4 -1
- data/lib/filters/modified_filter.rb +8 -1
- data/lib/google-lint/fixjsstyle +9 -0
- data/lib/google-lint/gjslint +9 -0
- data/lib/jasmine-node/lib/jasmine/index.js +1 -1
- data/lib/jasmine-node/specs.js +164 -6
- data/lib/loris.rb +74 -1
- data/lib/poller.rb +3 -2
- data/lib/task_manager.rb +2 -1
- data/lib/tasks/closure_compiler/closure_compiler_config.rb +17 -0
- data/lib/tasks/closure_compiler/closure_compiler_parser.rb +46 -0
- data/lib/tasks/closure_compiler/closure_compiler_runner.rb +47 -0
- data/lib/tasks/google_lint/google_lint_config.rb +17 -0
- data/lib/tasks/google_lint/google_lint_parser.rb +41 -0
- data/lib/tasks/google_lint/google_lint_runner.rb +62 -0
- data/lib/tasks/jasmine_node/jasmine_node_config.rb +30 -0
- data/lib/tasks/jasmine_node/jasmine_node_parser.rb +1 -1
- data/lib/tasks/jasmine_node/jasmine_node_runner.rb +10 -6
- data/lib/tasks/jasmine_node_coverage/jasmine_node_coverage_runner.rb +36 -0
- data/lib/tasks/jasmine_node_coverage/js_coverage.rb +11 -0
- data/loris.gemspec +19 -4
- data/loris.tmproj +201 -5
- metadata +75 -17
data/Rakefile
CHANGED
@@ -14,6 +14,7 @@ begin
|
|
14
14
|
gem.homepage = "http://github.com/karl/loris"
|
15
15
|
gem.authors = ["Karl O'Keeffe"]
|
16
16
|
|
17
|
+
gem.add_dependency('json', [">= 1.4.3"])
|
17
18
|
gem.add_dependency('bind', [">= 0.2.6"])
|
18
19
|
gem.add_dependency('karl-growl', [">= 1.0.6"])
|
19
20
|
gem.add_dependency('extensions', [">= 0.6.0"])
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
Binary file
|
data/lib/file_actioner.rb
CHANGED
@@ -9,6 +9,7 @@ class FileActioner
|
|
9
9
|
|
10
10
|
def run
|
11
11
|
begin
|
12
|
+
num_tasks_run = 0
|
12
13
|
files = @file_finder.find
|
13
14
|
|
14
15
|
# Refactor this to the file_finder class
|
@@ -16,13 +17,15 @@ class FileActioner
|
|
16
17
|
files[:filtered] = files[:filtered] | changes
|
17
18
|
|
18
19
|
if (files[:filtered] != [])
|
19
|
-
@task_manager.run(files)
|
20
|
+
num_tasks_run = @task_manager.run(files)
|
20
21
|
end
|
21
22
|
|
22
23
|
@prev_all_files = files[:all]
|
23
24
|
rescue Exception => e
|
24
25
|
@task_manager.output_exception(e);
|
25
26
|
end
|
27
|
+
|
28
|
+
num_tasks_run > 0
|
26
29
|
end
|
27
30
|
|
28
31
|
end
|
@@ -4,13 +4,20 @@ class ModifiedFilter
|
|
4
4
|
@file_class = file_class
|
5
5
|
@last_modified = last_modified
|
6
6
|
@modifieds = []
|
7
|
+
@prev_file_sizes = {}
|
7
8
|
end
|
8
9
|
|
9
10
|
def filter(path)
|
10
11
|
modified = @file_class.mtime(path)
|
11
12
|
@modifieds << modified
|
12
13
|
|
13
|
-
|
14
|
+
file_size = @file_class.size(path)
|
15
|
+
prev_file_size = @prev_file_sizes[path]
|
16
|
+
modified = @last_modified.nil? || modified > @last_modified || prev_file_size.nil? || file_size != prev_file_size
|
17
|
+
|
18
|
+
@prev_file_sizes[path] = file_size
|
19
|
+
|
20
|
+
return modified
|
14
21
|
end
|
15
22
|
|
16
23
|
def complete
|
@@ -0,0 +1,9 @@
|
|
1
|
+
#!/usr/bin/python
|
2
|
+
# EASY-INSTALL-ENTRY-SCRIPT: 'closure-linter==2.2.5','console_scripts','fixjsstyle'
|
3
|
+
__requires__ = 'closure-linter==2.2.5'
|
4
|
+
import sys
|
5
|
+
from pkg_resources import load_entry_point
|
6
|
+
|
7
|
+
sys.exit(
|
8
|
+
load_entry_point('closure-linter==2.2.5', 'console_scripts', 'fixjsstyle')()
|
9
|
+
)
|
@@ -0,0 +1,9 @@
|
|
1
|
+
#!/usr/bin/python
|
2
|
+
# EASY-INSTALL-ENTRY-SCRIPT: 'closure-linter==2.2.5','console_scripts','gjslint'
|
3
|
+
__requires__ = 'closure-linter==2.2.5'
|
4
|
+
import sys
|
5
|
+
from pkg_resources import load_entry_point
|
6
|
+
|
7
|
+
sys.exit(
|
8
|
+
load_entry_point('closure-linter==2.2.5', 'console_scripts', 'gjslint')()
|
9
|
+
)
|
data/lib/jasmine-node/specs.js
CHANGED
@@ -2,6 +2,7 @@ require.paths.push(__dirname + "/lib");
|
|
2
2
|
require.paths.push("./");
|
3
3
|
|
4
4
|
var sys = require('sys');
|
5
|
+
var fs = require('fs');
|
5
6
|
var jasmine = require('jasmine');
|
6
7
|
|
7
8
|
for(var key in jasmine) {
|
@@ -10,18 +11,175 @@ for(var key in jasmine) {
|
|
10
11
|
|
11
12
|
var isVerbose = false;
|
12
13
|
var showColors = true;
|
13
|
-
var
|
14
|
+
var config = null;
|
15
|
+
var sourceDirectory;
|
16
|
+
var prev = null;
|
14
17
|
process.argv.forEach(function(arg){
|
15
18
|
switch(arg) {
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
19
|
+
case '--color': showColors = true; break;
|
20
|
+
case '--noColor': showColors = false; break;
|
21
|
+
case '--verbose': isVerbose = true; break;
|
22
|
+
default:
|
23
|
+
if (prev === '--source-directory') {
|
24
|
+
sourceDirectory = arg;
|
25
|
+
} else {
|
26
|
+
config_path = arg;
|
27
|
+
}
|
28
|
+
break;
|
20
29
|
}
|
30
|
+
prev = arg;
|
21
31
|
});
|
22
32
|
|
33
|
+
var dir = config_path.substring(0, config_path.lastIndexOf('/'));
|
23
34
|
|
24
|
-
|
35
|
+
// read in config
|
36
|
+
var config = fs.readFileSync(config_path);
|
37
|
+
config = JSON.parse(config + "");
|
38
|
+
|
39
|
+
// get the spec directory (or use the default)
|
40
|
+
|
41
|
+
|
42
|
+
// add source dir to requires path (or given source dir argument)
|
43
|
+
require.paths.unshift(sourceDirectory || config.sourceDirectory);
|
44
|
+
|
45
|
+
// require all the requires files
|
46
|
+
for (var i = 0, len = config.requires.length; i < len; ++i){
|
47
|
+
require(config.requires[i]);
|
48
|
+
}
|
49
|
+
|
50
|
+
|
51
|
+
jasmine.executeSpecsInFolder.call(this, config.specDirectory || dir + '/spec', function(runner, log) {
|
52
|
+
|
53
|
+
if (typeof _$jscoverage === 'object') {
|
54
|
+
reportCoverage(_$jscoverage);
|
55
|
+
}
|
56
|
+
|
25
57
|
// Cannot call process.exit, standard out and standard error do not get flushed
|
26
58
|
// process.exit(runner.results().failedCount);
|
27
59
|
}, isVerbose, showColors);
|
60
|
+
|
61
|
+
function reportCoverage(cov) {
|
62
|
+
populateCoverage(cov);
|
63
|
+
// Stats
|
64
|
+
sys.print('\n [bold]{Test Coverage}\n');
|
65
|
+
var sep = ' +------------------------------------------+----------+------+------+--------+',
|
66
|
+
lastSep = ' +----------+------+------+--------+';
|
67
|
+
sys.puts(sep);
|
68
|
+
sys.puts(' | filename | coverage | LOC | SLOC | missed |');
|
69
|
+
sys.puts(sep);
|
70
|
+
for (var name in cov) {
|
71
|
+
var file = cov[name];
|
72
|
+
if (file instanceof Array) {
|
73
|
+
sys.print(' | ' + rpad(name, 40));
|
74
|
+
sys.print(' | ' + lpad(file.coverage.toFixed(2), 8));
|
75
|
+
sys.print(' | ' + lpad(file.LOC, 4));
|
76
|
+
sys.print(' | ' + lpad(file.SLOC, 4));
|
77
|
+
sys.print(' | ' + lpad(file.totalMisses, 6));
|
78
|
+
sys.print(' |\n');
|
79
|
+
}
|
80
|
+
}
|
81
|
+
sys.puts(sep);
|
82
|
+
sys.print(' ' + rpad('', 40));
|
83
|
+
sys.print(' | ' + lpad(cov.coverage.toFixed(2), 8));
|
84
|
+
sys.print(' | ' + lpad(cov.LOC, 4));
|
85
|
+
sys.print(' | ' + lpad(cov.SLOC, 4));
|
86
|
+
sys.print(' | ' + lpad(cov.totalMisses, 6));
|
87
|
+
sys.print(' |\n');
|
88
|
+
sys.puts(lastSep);
|
89
|
+
// // Source
|
90
|
+
// for (var name in cov) {
|
91
|
+
// if (name.match(/\.js$/)) {
|
92
|
+
// var file = cov[name];
|
93
|
+
// sys.print('\n [bold]{' + name + '}:');
|
94
|
+
// sys.print(file.source);
|
95
|
+
// sys.print('\n');
|
96
|
+
// }
|
97
|
+
// }
|
98
|
+
}
|
99
|
+
|
100
|
+
/**
|
101
|
+
* Populate code coverage data.
|
102
|
+
*
|
103
|
+
* @param {Object} cov
|
104
|
+
* @api private
|
105
|
+
*/
|
106
|
+
|
107
|
+
function populateCoverage(cov) {
|
108
|
+
cov.LOC =
|
109
|
+
cov.SLOC =
|
110
|
+
cov.totalFiles =
|
111
|
+
cov.totalHits =
|
112
|
+
cov.totalMisses =
|
113
|
+
cov.coverage = 0;
|
114
|
+
for (var name in cov) {
|
115
|
+
var file = cov[name];
|
116
|
+
if (file instanceof Array) {
|
117
|
+
// Stats
|
118
|
+
++cov.totalFiles;
|
119
|
+
cov.totalHits += file.totalHits = coverage(file, true);
|
120
|
+
cov.totalMisses += file.totalMisses = coverage(file, false);
|
121
|
+
file.totalLines = file.totalHits + file.totalMisses;
|
122
|
+
cov.SLOC += file.SLOC = file.totalLines;
|
123
|
+
cov.LOC += file.LOC = file.source.length;
|
124
|
+
file.coverage = (file.totalHits / file.totalLines) * 100;
|
125
|
+
// Source
|
126
|
+
var width = file.source.length.toString().length;
|
127
|
+
file.source = file.source.map(function(line, i){
|
128
|
+
++i;
|
129
|
+
var hits = file[i] === 0 ? 0 : (file[i] || ' ');
|
130
|
+
return '\n ' + lpad(i, width) + ' | ' + hits + ' | ' + line;
|
131
|
+
}).join('');
|
132
|
+
}
|
133
|
+
}
|
134
|
+
cov.coverage = (cov.totalHits / cov.SLOC) * 100;
|
135
|
+
}
|
136
|
+
|
137
|
+
/**
|
138
|
+
* Total coverage for the given file data.
|
139
|
+
*
|
140
|
+
* @param {Array} data
|
141
|
+
* @return {Type}
|
142
|
+
* @api private
|
143
|
+
*/
|
144
|
+
|
145
|
+
function coverage(data, val) {
|
146
|
+
var n = 0;
|
147
|
+
for (var i = 0, len = data.length; i < len; ++i) {
|
148
|
+
if (data[i] !== undefined && data[i] == val) ++n;
|
149
|
+
}
|
150
|
+
return n;
|
151
|
+
}
|
152
|
+
|
153
|
+
/**
|
154
|
+
* Pad the given string to the maximum width provided.
|
155
|
+
*
|
156
|
+
* @param {String} str
|
157
|
+
* @param {Number} width
|
158
|
+
* @return {String}
|
159
|
+
* @api private
|
160
|
+
*/
|
161
|
+
|
162
|
+
function lpad(str, width) {
|
163
|
+
str = String(str);
|
164
|
+
var n = width - str.length;
|
165
|
+
if (n < 1) return str;
|
166
|
+
while (n--) str = ' ' + str;
|
167
|
+
return str;
|
168
|
+
}
|
169
|
+
|
170
|
+
/**
|
171
|
+
* Pad the given string to the maximum width provided.
|
172
|
+
*
|
173
|
+
* @param {String} str
|
174
|
+
* @param {Number} width
|
175
|
+
* @return {String}
|
176
|
+
* @api private
|
177
|
+
*/
|
178
|
+
|
179
|
+
function rpad(str, width) {
|
180
|
+
str = String(str);
|
181
|
+
var n = width - str.length;
|
182
|
+
if (n < 1) return str;
|
183
|
+
while (n--) str = str + ' ';
|
184
|
+
return str;
|
185
|
+
}
|
data/lib/loris.rb
CHANGED
@@ -7,6 +7,7 @@ require 'rbconfig'
|
|
7
7
|
require 'find'
|
8
8
|
require 'Growl'
|
9
9
|
require 'yaml'
|
10
|
+
require 'json'
|
10
11
|
require 'uri'
|
11
12
|
|
12
13
|
|
@@ -40,10 +41,19 @@ require 'tasks/coffeescript/coffeescript_runner'
|
|
40
41
|
require 'tasks/coffeescript/coffeescript_parser'
|
41
42
|
require 'tasks/javascript_lint/javascript_lint_runner'
|
42
43
|
require 'tasks/javascript_lint/javascript_lint_parser'
|
44
|
+
require 'tasks/google_lint/google_lint_runner'
|
45
|
+
require 'tasks/google_lint/google_lint_config'
|
46
|
+
require 'tasks/google_lint/google_lint_parser'
|
47
|
+
require 'tasks/jasmine_node/jasmine_node_config'
|
43
48
|
require 'tasks/jasmine_node/jasmine_node_runner'
|
44
49
|
require 'tasks/jasmine_node/jasmine_node_parser'
|
50
|
+
require 'tasks/jasmine_node_coverage/jasmine_node_coverage_runner'
|
51
|
+
require 'tasks/jasmine_node_coverage/js_coverage'
|
45
52
|
require 'tasks/rspec/rspec_runner'
|
46
53
|
require 'tasks/rspec/rspec_parser'
|
54
|
+
require 'tasks/closure_compiler/closure_compiler_config'
|
55
|
+
require 'tasks/closure_compiler/closure_compiler_runner'
|
56
|
+
require 'tasks/closure_compiler/closure_compiler_parser'
|
47
57
|
|
48
58
|
|
49
59
|
include Config
|
@@ -107,10 +117,13 @@ module Loris
|
|
107
117
|
tm.add(ListTask.new) if debug
|
108
118
|
tm.add(coffeescript_task(dir))
|
109
119
|
tm.add(javascript_lint_task(dir))
|
120
|
+
tm.add(google_lint_task(dir))
|
110
121
|
tm.add(jasmine_node_task(dir))
|
122
|
+
tm.add(jasmine_node_coverage_task(dir))
|
111
123
|
tm.add(CommandLineTask.new(JSpecRunner.new(dir, ExtensionFilter.new(File, 'js')), JSpecParser.new)) unless is_windows
|
112
124
|
tm.add(jsTestDriverTask(dir))
|
113
125
|
tm.add(CommandLineTask.new(RSpecRunner.new(dir, ExtensionFilter.new(File, 'rb'), EndsWithFilter.new('_spec.rb')), RSpecParser.new))
|
126
|
+
tm.add(closure_compiler_task(dir))
|
114
127
|
|
115
128
|
a = FileActioner.new(ff, tm)
|
116
129
|
|
@@ -144,7 +157,28 @@ module Loris
|
|
144
157
|
node,
|
145
158
|
spec_dir,
|
146
159
|
dir,
|
147
|
-
ExtensionFilter.new(File, 'js')
|
160
|
+
ExtensionFilter.new(File, 'js'),
|
161
|
+
JasmineNodeConfig.new(dir, JSON, File)
|
162
|
+
),
|
163
|
+
JasmineNodeParser.new(dir)
|
164
|
+
)
|
165
|
+
end
|
166
|
+
|
167
|
+
def jasmine_node_coverage_task(dir)
|
168
|
+
node = '/usr/local/bin/node'
|
169
|
+
spec_dir = File.join(LIBDIR, 'jasmine-node')
|
170
|
+
|
171
|
+
return CommandLineTask.new(
|
172
|
+
JasmineNodeCoverageRunner.new(
|
173
|
+
JasmineNodeRunner.new(
|
174
|
+
node,
|
175
|
+
spec_dir,
|
176
|
+
dir,
|
177
|
+
ExtensionFilter.new(File, 'js'),
|
178
|
+
JasmineNodeConfig.new(dir, JSON, File)
|
179
|
+
),
|
180
|
+
JsCoverage.new("node-jscoverage"),
|
181
|
+
JasmineNodeConfig.new(dir, JSON, File)
|
148
182
|
),
|
149
183
|
JasmineNodeParser.new(dir)
|
150
184
|
)
|
@@ -165,6 +199,45 @@ module Loris
|
|
165
199
|
)
|
166
200
|
end
|
167
201
|
|
202
|
+
def google_lint_task(dir)
|
203
|
+
binary = File.join(LIBDIR, 'google-lint' , 'gjslint')
|
204
|
+
fix_style_binary = File.join(LIBDIR, 'google-lint' , 'fixjsstyle')
|
205
|
+
|
206
|
+
return CommandLineTask.new(
|
207
|
+
GoogleLintRunner.new(
|
208
|
+
binary,
|
209
|
+
fix_style_binary,
|
210
|
+
dir,
|
211
|
+
ExtensionFilter.new(File, 'js'),
|
212
|
+
GoogleLintConfig.new(
|
213
|
+
dir,
|
214
|
+
YAML,
|
215
|
+
URI
|
216
|
+
)
|
217
|
+
),
|
218
|
+
GoogleLintParser.new(dir)
|
219
|
+
)
|
220
|
+
end
|
221
|
+
|
222
|
+
def closure_compiler_task(dir)
|
223
|
+
jar = File.join(LIBDIR, 'closure-compiler' , 'compiler.jar')
|
224
|
+
|
225
|
+
return CommandLineTask.new(
|
226
|
+
ClosureCompilerRunner.new(
|
227
|
+
jar,
|
228
|
+
dir,
|
229
|
+
ExtensionFilter.new(File, 'js'),
|
230
|
+
ClosureCompilerConfig.new(
|
231
|
+
dir,
|
232
|
+
YAML,
|
233
|
+
URI
|
234
|
+
)
|
235
|
+
),
|
236
|
+
ClosureCompilerParser.new(dir)
|
237
|
+
)
|
238
|
+
end
|
239
|
+
|
240
|
+
|
168
241
|
# Will need to be refactored into a factory
|
169
242
|
def jsTestDriverTask(dir)
|
170
243
|
require 'tasks/js_test_driver/js_test_driver_runner'
|
data/lib/poller.rb
CHANGED
data/lib/task_manager.rb
CHANGED
@@ -48,6 +48,7 @@ class TaskManager
|
|
48
48
|
|
49
49
|
end
|
50
50
|
|
51
|
+
@num_tasks_run
|
51
52
|
end
|
52
53
|
|
53
54
|
def run_task(files, task)
|
@@ -73,7 +74,7 @@ class TaskManager
|
|
73
74
|
:title => 'Task',
|
74
75
|
:summary => 'Exception',
|
75
76
|
:first => ex.message,
|
76
|
-
:detail => ex.backtrace
|
77
|
+
:detail => ex.message + "\n" + ex.backtrace.join("\n")
|
77
78
|
}
|
78
79
|
end
|
79
80
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class ClosureCompilerConfig
|
2
|
+
|
3
|
+
def initialize(dir, yaml, uri)
|
4
|
+
@config_file = dir + '/closure-compiler.yml'
|
5
|
+
@yaml = yaml
|
6
|
+
@uri = uri
|
7
|
+
end
|
8
|
+
|
9
|
+
def reload
|
10
|
+
@conf = @yaml.load_file(@config_file)
|
11
|
+
end
|
12
|
+
|
13
|
+
def conf
|
14
|
+
return @conf
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
class ClosureCompilerParser
|
2
|
+
|
3
|
+
def initialize(dir)
|
4
|
+
@dir = dir
|
5
|
+
|
6
|
+
# TODO: Tidy!
|
7
|
+
if (RUBY_PLATFORM =~ /mswin32/)
|
8
|
+
@dir = @dir.gsub('/', '\\')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def parse_result(detail)
|
13
|
+
summary_line = detail.grep( /\d+\s+error.*,\s+\d+\s+warning.*/ )[0]
|
14
|
+
|
15
|
+
if summary_line.nil?
|
16
|
+
# error
|
17
|
+
error_info = (detail + "\nUnknown Error!").to_a[0].strip
|
18
|
+
return :error, 'Error', error_info
|
19
|
+
end
|
20
|
+
|
21
|
+
if summary_line =~ /([1-9]+)\d*\s+error/
|
22
|
+
num_failures = $1
|
23
|
+
error_info = detail.grep(/ ERROR - /)[0].strip
|
24
|
+
return :failure, num_failures + ' Errors', strip_dir(error_info)
|
25
|
+
end
|
26
|
+
|
27
|
+
if summary_line =~ /([1-9]+)\d*\s+warning/
|
28
|
+
num_failures = $1
|
29
|
+
error_info = detail.grep(/ WARNING - /)[0].strip
|
30
|
+
return :warning, num_failures + ' Warnings', strip_dir(error_info)
|
31
|
+
end
|
32
|
+
|
33
|
+
return :success, 'All files compiled successfully', ''
|
34
|
+
end
|
35
|
+
|
36
|
+
def strip_dir(text)
|
37
|
+
|
38
|
+
# Move to function/class w/ win32 related code
|
39
|
+
if (text[0, @dir.length] == @dir)
|
40
|
+
text = text[(@dir.length + 1)..-1]
|
41
|
+
end
|
42
|
+
|
43
|
+
text
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class ClosureCompilerRunner
|
2
|
+
|
3
|
+
def initialize(jar, dir, filter, config)
|
4
|
+
@jar = jar
|
5
|
+
@config_file = dir + '/closure-compiler.yml'
|
6
|
+
@dir = dir
|
7
|
+
@filter = filter
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def name
|
12
|
+
return 'Closure Compiler'
|
13
|
+
end
|
14
|
+
|
15
|
+
def execute
|
16
|
+
@config.reload
|
17
|
+
conf = @config.conf
|
18
|
+
|
19
|
+
input_params = ''
|
20
|
+
|
21
|
+
conf.each do |param, value|
|
22
|
+
|
23
|
+
if value.kind_of? Array
|
24
|
+
|
25
|
+
value.each do |inner_value|
|
26
|
+
input_params += " --#{param} \"#{inner_value}\""
|
27
|
+
end
|
28
|
+
|
29
|
+
elsif value.kind_of? Integer
|
30
|
+
input_params += " --#{param} #{value}"
|
31
|
+
else
|
32
|
+
input_params += " --#{param} \"#{value}\""
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
return `java -Xmx1024m -jar "#{@jar}" #{input_params} 2>&1`
|
37
|
+
end
|
38
|
+
|
39
|
+
def is_configured?(all_files)
|
40
|
+
return all_files.include?(@config_file)
|
41
|
+
end
|
42
|
+
|
43
|
+
def should_run?(modified_files)
|
44
|
+
return !(modified_files.detect { |file| @filter.filter(file) && file != @output }).nil? || modified_files.include?(@config_file)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class GoogleLintParser
|
2
|
+
|
3
|
+
def initialize(dir)
|
4
|
+
@dir = dir
|
5
|
+
|
6
|
+
# TODO: Tidy!
|
7
|
+
if (RUBY_PLATFORM =~ /mswin32/)
|
8
|
+
@dir = @dir.gsub('/', '\\')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def parse_result(detail)
|
13
|
+
summary_line = detail.grep( /Found \d+\s+error*/ )[0]
|
14
|
+
|
15
|
+
if not detail.grep( /no errors found./ )[0].nil?
|
16
|
+
return :success, 'All files are clean', ''
|
17
|
+
end
|
18
|
+
|
19
|
+
if summary_line =~ /([1-9]+)\d*\s+error/
|
20
|
+
num_failures = $1
|
21
|
+
error_info = detail.grep(/FILE/)[0].strip
|
22
|
+
file_name = /:(.+) -----/.match error_info.strip
|
23
|
+
return :failure, num_failures + ' Errors', strip_dir(file_name)
|
24
|
+
end
|
25
|
+
|
26
|
+
# error
|
27
|
+
error_info = (detail + "\nUnknown Error!").to_a[0].strip
|
28
|
+
return :error, 'Error', error_info
|
29
|
+
end
|
30
|
+
|
31
|
+
def strip_dir(text)
|
32
|
+
|
33
|
+
# Move to function/class w/ win32 related code
|
34
|
+
if (text[0, @dir.length] == @dir)
|
35
|
+
text = text[(@dir.length + 1)..-1]
|
36
|
+
end
|
37
|
+
|
38
|
+
text
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
class GoogleLintRunner
|
2
|
+
|
3
|
+
def initialize(binary, fix_style_binary, dir, filter, config)
|
4
|
+
@binary = binary
|
5
|
+
@fix_style_binary = fix_style_binary
|
6
|
+
@config_file = dir + '/gjslint.yml'
|
7
|
+
@dir = dir
|
8
|
+
@filter = filter
|
9
|
+
@config = config
|
10
|
+
end
|
11
|
+
|
12
|
+
def name
|
13
|
+
return 'Google Lint'
|
14
|
+
end
|
15
|
+
|
16
|
+
def execute
|
17
|
+
@config.reload
|
18
|
+
conf = @config.conf
|
19
|
+
|
20
|
+
input_params = ''
|
21
|
+
run_fix_style = false
|
22
|
+
|
23
|
+
conf.each do |param, value|
|
24
|
+
|
25
|
+
if param == 'strict'
|
26
|
+
input_params += " --#{param}"
|
27
|
+
next
|
28
|
+
end
|
29
|
+
|
30
|
+
if param == 'run-fix-style'
|
31
|
+
run_fix_style = true
|
32
|
+
next
|
33
|
+
end
|
34
|
+
|
35
|
+
if value.kind_of? Array
|
36
|
+
|
37
|
+
value.each do |inner_value|
|
38
|
+
input_params += " --#{param} \"#{inner_value}\""
|
39
|
+
end
|
40
|
+
|
41
|
+
elsif value.kind_of? Integer
|
42
|
+
input_params += " --#{param} #{value}"
|
43
|
+
else
|
44
|
+
input_params += " --#{param} \"#{value}\""
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
result = ''
|
49
|
+
result += `#{@fix_style_binary} #{input_params} . 2>&1` if run_fix_style
|
50
|
+
|
51
|
+
return result + `#{@binary} #{input_params} . 2>&1`
|
52
|
+
end
|
53
|
+
|
54
|
+
def is_configured?(all_files)
|
55
|
+
return all_files.include?(@config_file)
|
56
|
+
end
|
57
|
+
|
58
|
+
def should_run?(modified_files)
|
59
|
+
return !(modified_files.detect { |file| @filter.filter(file) }).nil? || modified_files.include?(@config_file)
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class JasmineNodeConfig
|
2
|
+
|
3
|
+
def initialize(dir, json, file)
|
4
|
+
@config_path = dir + '/jasmine.conf'
|
5
|
+
@json = json
|
6
|
+
@file = file
|
7
|
+
end
|
8
|
+
|
9
|
+
def config_path
|
10
|
+
return @config_path
|
11
|
+
end
|
12
|
+
|
13
|
+
def reload
|
14
|
+
contents = File.open(@config_path, 'r') { |f| f.read }
|
15
|
+
@config = @json.parse contents
|
16
|
+
end
|
17
|
+
|
18
|
+
def source_dir
|
19
|
+
return @config["sourceDirectory"]
|
20
|
+
end
|
21
|
+
|
22
|
+
def spec_dir
|
23
|
+
return @config["specDirectory"]
|
24
|
+
end
|
25
|
+
|
26
|
+
def requires
|
27
|
+
return @config["requires"]
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -1,10 +1,12 @@
|
|
1
1
|
class JasmineNodeRunner
|
2
2
|
|
3
|
-
def initialize(node, spec_dir, dir, filter)
|
3
|
+
def initialize(node, spec_dir, dir, filter, config)
|
4
4
|
@node = node
|
5
5
|
@spec_dir = spec_dir
|
6
6
|
@dir = dir
|
7
7
|
@filter = filter
|
8
|
+
@config = config
|
9
|
+
@source_args = "";
|
8
10
|
end
|
9
11
|
|
10
12
|
def name
|
@@ -12,17 +14,19 @@ class JasmineNodeRunner
|
|
12
14
|
end
|
13
15
|
|
14
16
|
def execute
|
15
|
-
return `"#{@node}" "#{@spec_dir}/specs.js" --noColor "#{@
|
17
|
+
return `"#{@node}" "#{@spec_dir}/specs.js" --noColor #{@source_args} "#{@config.config_path}" 2>&1`
|
16
18
|
end
|
17
19
|
|
18
|
-
# TODO: Only return true if we can find the node binary
|
19
20
|
def is_configured?(all_files)
|
20
|
-
|
21
|
-
return !(all_files.detect { |file| spec_filter.filter(file) }).nil?
|
21
|
+
return all_files.include?(@config.config_path)
|
22
22
|
end
|
23
23
|
|
24
24
|
def should_run?(modified_files)
|
25
|
-
return !(modified_files.detect { |file| @filter.filter(file) }).nil?
|
25
|
+
return !(modified_files.detect { |file| @filter.filter(file) }).nil? || modified_files.include?(@config.config_path)
|
26
|
+
end
|
27
|
+
|
28
|
+
def source_dir(source_dir)
|
29
|
+
@source_args = source_dir.nil? ? "" : "--source-directory \"#{source_dir}\""
|
26
30
|
end
|
27
31
|
|
28
32
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'FileUtils'
|
2
|
+
|
3
|
+
class JasmineNodeCoverageRunner
|
4
|
+
|
5
|
+
def initialize(jasmine_runner, coverage, config)
|
6
|
+
@jasmine_runner = jasmine_runner
|
7
|
+
@coverage = coverage
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def name
|
12
|
+
return 'Coverage'
|
13
|
+
end
|
14
|
+
|
15
|
+
def execute
|
16
|
+
@config.reload
|
17
|
+
|
18
|
+
source_dir = @config.source_dir
|
19
|
+
coverage_dir = source_dir + "-cov"
|
20
|
+
|
21
|
+
FileUtils.rm_rf coverage_dir
|
22
|
+
|
23
|
+
output = @coverage.run source_dir, coverage_dir
|
24
|
+
@jasmine_runner.source_dir coverage_dir
|
25
|
+
return output + "\n\n" + @jasmine_runner.execute
|
26
|
+
end
|
27
|
+
|
28
|
+
def is_configured?(all_files)
|
29
|
+
return @jasmine_runner.is_configured? all_files
|
30
|
+
end
|
31
|
+
|
32
|
+
def should_run?(modified_files)
|
33
|
+
return @jasmine_runner.should_run? modified_files
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
data/loris.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{loris}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Karl O'Keeffe"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-10-01}
|
13
13
|
s.default_executable = %q{loris}
|
14
14
|
s.description = %q{Automatically run javascript unit tests}
|
15
15
|
s.email = %q{loris@monket.net}
|
@@ -34,6 +34,7 @@ Gem::Specification.new do |s|
|
|
34
34
|
"features/support/env.rb",
|
35
35
|
"lib/always_continuer.rb",
|
36
36
|
"lib/browser_finder.rb",
|
37
|
+
"lib/closure-compiler/compiler.jar",
|
37
38
|
"lib/directory_finder.rb",
|
38
39
|
"lib/file_actioner.rb",
|
39
40
|
"lib/file_finder.rb",
|
@@ -42,6 +43,8 @@ Gem::Specification.new do |s|
|
|
42
43
|
"lib/filters/file_filter.rb",
|
43
44
|
"lib/filters/modified_filter.rb",
|
44
45
|
"lib/filters/starts_with_filter.rb",
|
46
|
+
"lib/google-lint/fixjsstyle",
|
47
|
+
"lib/google-lint/gjslint",
|
45
48
|
"lib/icons/error.png",
|
46
49
|
"lib/icons/failure.png",
|
47
50
|
"lib/icons/info.png",
|
@@ -65,11 +68,20 @@ Gem::Specification.new do |s|
|
|
65
68
|
"lib/poller.rb",
|
66
69
|
"lib/sleep_waiter.rb",
|
67
70
|
"lib/task_manager.rb",
|
71
|
+
"lib/tasks/closure_compiler/closure_compiler_config.rb",
|
72
|
+
"lib/tasks/closure_compiler/closure_compiler_parser.rb",
|
73
|
+
"lib/tasks/closure_compiler/closure_compiler_runner.rb",
|
68
74
|
"lib/tasks/coffeescript/coffeescript_parser.rb",
|
69
75
|
"lib/tasks/coffeescript/coffeescript_runner.rb",
|
70
76
|
"lib/tasks/command_line_task.rb",
|
77
|
+
"lib/tasks/google_lint/google_lint_config.rb",
|
78
|
+
"lib/tasks/google_lint/google_lint_parser.rb",
|
79
|
+
"lib/tasks/google_lint/google_lint_runner.rb",
|
80
|
+
"lib/tasks/jasmine_node/jasmine_node_config.rb",
|
71
81
|
"lib/tasks/jasmine_node/jasmine_node_parser.rb",
|
72
82
|
"lib/tasks/jasmine_node/jasmine_node_runner.rb",
|
83
|
+
"lib/tasks/jasmine_node_coverage/jasmine_node_coverage_runner.rb",
|
84
|
+
"lib/tasks/jasmine_node_coverage/js_coverage.rb",
|
73
85
|
"lib/tasks/javascript_lint/javascript_lint_parser.rb",
|
74
86
|
"lib/tasks/javascript_lint/javascript_lint_runner.rb",
|
75
87
|
"lib/tasks/js_test_driver/js_test_driver_config.rb",
|
@@ -103,7 +115,7 @@ Gem::Specification.new do |s|
|
|
103
115
|
s.homepage = %q{http://github.com/karl/loris}
|
104
116
|
s.rdoc_options = ["--charset=UTF-8"]
|
105
117
|
s.require_paths = ["lib"]
|
106
|
-
s.rubygems_version = %q{1.3.
|
118
|
+
s.rubygems_version = %q{1.3.7}
|
107
119
|
s.summary = %q{Automatically run javascript unit tests}
|
108
120
|
s.test_files = [
|
109
121
|
"spec/file_actioner_spec.rb",
|
@@ -126,16 +138,19 @@ Gem::Specification.new do |s|
|
|
126
138
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
127
139
|
s.specification_version = 3
|
128
140
|
|
129
|
-
if Gem::Version.new(Gem::
|
141
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
142
|
+
s.add_runtime_dependency(%q<json>, [">= 1.4.3"])
|
130
143
|
s.add_runtime_dependency(%q<bind>, [">= 0.2.6"])
|
131
144
|
s.add_runtime_dependency(%q<karl-growl>, [">= 1.0.6"])
|
132
145
|
s.add_runtime_dependency(%q<extensions>, [">= 0.6.0"])
|
133
146
|
else
|
147
|
+
s.add_dependency(%q<json>, [">= 1.4.3"])
|
134
148
|
s.add_dependency(%q<bind>, [">= 0.2.6"])
|
135
149
|
s.add_dependency(%q<karl-growl>, [">= 1.0.6"])
|
136
150
|
s.add_dependency(%q<extensions>, [">= 0.6.0"])
|
137
151
|
end
|
138
152
|
else
|
153
|
+
s.add_dependency(%q<json>, [">= 1.4.3"])
|
139
154
|
s.add_dependency(%q<bind>, [">= 0.2.6"])
|
140
155
|
s.add_dependency(%q<karl-growl>, [">= 1.0.6"])
|
141
156
|
s.add_dependency(%q<extensions>, [">= 0.6.0"])
|
data/loris.tmproj
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
<plist version="1.0">
|
4
4
|
<dict>
|
5
5
|
<key>currentDocument</key>
|
6
|
-
<string>lib/
|
6
|
+
<string>lib/filters/modified_filter.rb</string>
|
7
7
|
<key>documents</key>
|
8
8
|
<array>
|
9
9
|
<dict>
|
@@ -49,6 +49,20 @@
|
|
49
49
|
<key>firstVisibleLine</key>
|
50
50
|
<integer>0</integer>
|
51
51
|
</dict>
|
52
|
+
<key>lib/file_actioner.rb</key>
|
53
|
+
<dict>
|
54
|
+
<key>caret</key>
|
55
|
+
<dict>
|
56
|
+
<key>column</key>
|
57
|
+
<integer>0</integer>
|
58
|
+
<key>line</key>
|
59
|
+
<integer>27</integer>
|
60
|
+
</dict>
|
61
|
+
<key>firstVisibleColumn</key>
|
62
|
+
<integer>0</integer>
|
63
|
+
<key>firstVisibleLine</key>
|
64
|
+
<integer>0</integer>
|
65
|
+
</dict>
|
52
66
|
<key>lib/file_finder.rb</key>
|
53
67
|
<dict>
|
54
68
|
<key>caret</key>
|
@@ -93,6 +107,34 @@
|
|
93
107
|
<integer>16</integer>
|
94
108
|
</dict>
|
95
109
|
</dict>
|
110
|
+
<key>lib/filters/file_filter.rb</key>
|
111
|
+
<dict>
|
112
|
+
<key>caret</key>
|
113
|
+
<dict>
|
114
|
+
<key>column</key>
|
115
|
+
<integer>0</integer>
|
116
|
+
<key>line</key>
|
117
|
+
<integer>0</integer>
|
118
|
+
</dict>
|
119
|
+
<key>firstVisibleColumn</key>
|
120
|
+
<integer>0</integer>
|
121
|
+
<key>firstVisibleLine</key>
|
122
|
+
<integer>0</integer>
|
123
|
+
</dict>
|
124
|
+
<key>lib/filters/modified_filter.rb</key>
|
125
|
+
<dict>
|
126
|
+
<key>caret</key>
|
127
|
+
<dict>
|
128
|
+
<key>column</key>
|
129
|
+
<integer>20</integer>
|
130
|
+
<key>line</key>
|
131
|
+
<integer>17</integer>
|
132
|
+
</dict>
|
133
|
+
<key>firstVisibleColumn</key>
|
134
|
+
<integer>0</integer>
|
135
|
+
<key>firstVisibleLine</key>
|
136
|
+
<integer>0</integer>
|
137
|
+
</dict>
|
96
138
|
<key>lib/jasmine-node/specs.js</key>
|
97
139
|
<dict>
|
98
140
|
<key>caret</key>
|
@@ -112,14 +154,14 @@
|
|
112
154
|
<key>caret</key>
|
113
155
|
<dict>
|
114
156
|
<key>column</key>
|
115
|
-
<integer>
|
157
|
+
<integer>28</integer>
|
116
158
|
<key>line</key>
|
117
|
-
<integer>
|
159
|
+
<integer>97</integer>
|
118
160
|
</dict>
|
119
161
|
<key>firstVisibleColumn</key>
|
120
162
|
<integer>0</integer>
|
121
163
|
<key>firstVisibleLine</key>
|
122
|
-
<integer>
|
164
|
+
<integer>82</integer>
|
123
165
|
</dict>
|
124
166
|
<key>lib/outputs/growl_output.rb</key>
|
125
167
|
<dict>
|
@@ -149,6 +191,106 @@
|
|
149
191
|
<key>firstVisibleLine</key>
|
150
192
|
<integer>0</integer>
|
151
193
|
</dict>
|
194
|
+
<key>lib/poller.rb</key>
|
195
|
+
<dict>
|
196
|
+
<key>caret</key>
|
197
|
+
<dict>
|
198
|
+
<key>column</key>
|
199
|
+
<integer>0</integer>
|
200
|
+
<key>line</key>
|
201
|
+
<integer>13</integer>
|
202
|
+
</dict>
|
203
|
+
<key>firstVisibleColumn</key>
|
204
|
+
<integer>0</integer>
|
205
|
+
<key>firstVisibleLine</key>
|
206
|
+
<integer>0</integer>
|
207
|
+
</dict>
|
208
|
+
<key>lib/sleep_waiter.rb</key>
|
209
|
+
<dict>
|
210
|
+
<key>caret</key>
|
211
|
+
<dict>
|
212
|
+
<key>column</key>
|
213
|
+
<integer>30</integer>
|
214
|
+
<key>line</key>
|
215
|
+
<integer>2</integer>
|
216
|
+
</dict>
|
217
|
+
<key>columnSelection</key>
|
218
|
+
<false/>
|
219
|
+
<key>firstVisibleColumn</key>
|
220
|
+
<integer>0</integer>
|
221
|
+
<key>firstVisibleLine</key>
|
222
|
+
<integer>0</integer>
|
223
|
+
<key>selectFrom</key>
|
224
|
+
<dict>
|
225
|
+
<key>column</key>
|
226
|
+
<integer>31</integer>
|
227
|
+
<key>line</key>
|
228
|
+
<integer>2</integer>
|
229
|
+
</dict>
|
230
|
+
<key>selectTo</key>
|
231
|
+
<dict>
|
232
|
+
<key>column</key>
|
233
|
+
<integer>30</integer>
|
234
|
+
<key>line</key>
|
235
|
+
<integer>2</integer>
|
236
|
+
</dict>
|
237
|
+
</dict>
|
238
|
+
<key>lib/task_manager.rb</key>
|
239
|
+
<dict>
|
240
|
+
<key>caret</key>
|
241
|
+
<dict>
|
242
|
+
<key>column</key>
|
243
|
+
<integer>18</integer>
|
244
|
+
<key>line</key>
|
245
|
+
<integer>50</integer>
|
246
|
+
</dict>
|
247
|
+
<key>firstVisibleColumn</key>
|
248
|
+
<integer>0</integer>
|
249
|
+
<key>firstVisibleLine</key>
|
250
|
+
<integer>3</integer>
|
251
|
+
</dict>
|
252
|
+
<key>lib/tasks/closure_compiler/closure_compiler_config.rb</key>
|
253
|
+
<dict>
|
254
|
+
<key>caret</key>
|
255
|
+
<dict>
|
256
|
+
<key>column</key>
|
257
|
+
<integer>13</integer>
|
258
|
+
<key>line</key>
|
259
|
+
<integer>0</integer>
|
260
|
+
</dict>
|
261
|
+
<key>firstVisibleColumn</key>
|
262
|
+
<integer>0</integer>
|
263
|
+
<key>firstVisibleLine</key>
|
264
|
+
<integer>0</integer>
|
265
|
+
</dict>
|
266
|
+
<key>lib/tasks/closure_compiler/closure_compiler_parser.rb</key>
|
267
|
+
<dict>
|
268
|
+
<key>caret</key>
|
269
|
+
<dict>
|
270
|
+
<key>column</key>
|
271
|
+
<integer>0</integer>
|
272
|
+
<key>line</key>
|
273
|
+
<integer>29</integer>
|
274
|
+
</dict>
|
275
|
+
<key>firstVisibleColumn</key>
|
276
|
+
<integer>0</integer>
|
277
|
+
<key>firstVisibleLine</key>
|
278
|
+
<integer>0</integer>
|
279
|
+
</dict>
|
280
|
+
<key>lib/tasks/closure_compiler/closure_compiler_runner.rb</key>
|
281
|
+
<dict>
|
282
|
+
<key>caret</key>
|
283
|
+
<dict>
|
284
|
+
<key>column</key>
|
285
|
+
<integer>0</integer>
|
286
|
+
<key>line</key>
|
287
|
+
<integer>44</integer>
|
288
|
+
</dict>
|
289
|
+
<key>firstVisibleColumn</key>
|
290
|
+
<integer>0</integer>
|
291
|
+
<key>firstVisibleLine</key>
|
292
|
+
<integer>0</integer>
|
293
|
+
</dict>
|
152
294
|
<key>lib/tasks/coffeescript/coffeescript_runner.rb</key>
|
153
295
|
<dict>
|
154
296
|
<key>caret</key>
|
@@ -163,6 +305,34 @@
|
|
163
305
|
<key>firstVisibleLine</key>
|
164
306
|
<integer>0</integer>
|
165
307
|
</dict>
|
308
|
+
<key>lib/tasks/google_lint/google_lint_parser.rb</key>
|
309
|
+
<dict>
|
310
|
+
<key>caret</key>
|
311
|
+
<dict>
|
312
|
+
<key>column</key>
|
313
|
+
<integer>12</integer>
|
314
|
+
<key>line</key>
|
315
|
+
<integer>0</integer>
|
316
|
+
</dict>
|
317
|
+
<key>firstVisibleColumn</key>
|
318
|
+
<integer>0</integer>
|
319
|
+
<key>firstVisibleLine</key>
|
320
|
+
<integer>0</integer>
|
321
|
+
</dict>
|
322
|
+
<key>lib/tasks/google_lint/google_lint_runner.rb</key>
|
323
|
+
<dict>
|
324
|
+
<key>caret</key>
|
325
|
+
<dict>
|
326
|
+
<key>column</key>
|
327
|
+
<integer>31</integer>
|
328
|
+
<key>line</key>
|
329
|
+
<integer>14</integer>
|
330
|
+
</dict>
|
331
|
+
<key>firstVisibleColumn</key>
|
332
|
+
<integer>0</integer>
|
333
|
+
<key>firstVisibleLine</key>
|
334
|
+
<integer>0</integer>
|
335
|
+
</dict>
|
166
336
|
<key>lib/tasks/jasmine_node/jasmine_node_runner.rb</key>
|
167
337
|
<dict>
|
168
338
|
<key>caret</key>
|
@@ -177,6 +347,20 @@
|
|
177
347
|
<key>firstVisibleLine</key>
|
178
348
|
<integer>0</integer>
|
179
349
|
</dict>
|
350
|
+
<key>lib/tasks/js_test_driver/js_test_driver_config.rb</key>
|
351
|
+
<dict>
|
352
|
+
<key>caret</key>
|
353
|
+
<dict>
|
354
|
+
<key>column</key>
|
355
|
+
<integer>2</integer>
|
356
|
+
<key>line</key>
|
357
|
+
<integer>12</integer>
|
358
|
+
</dict>
|
359
|
+
<key>firstVisibleColumn</key>
|
360
|
+
<integer>0</integer>
|
361
|
+
<key>firstVisibleLine</key>
|
362
|
+
<integer>0</integer>
|
363
|
+
</dict>
|
180
364
|
<key>lib/tasks/list_task.rb</key>
|
181
365
|
<dict>
|
182
366
|
<key>caret</key>
|
@@ -210,9 +394,21 @@
|
|
210
394
|
<array>
|
211
395
|
<string>TODO</string>
|
212
396
|
<string>lib/loris.rb</string>
|
397
|
+
<string>lib/filters/file_filter.rb</string>
|
398
|
+
<string>lib/tasks/closure_compiler/closure_compiler_parser.rb</string>
|
399
|
+
<string>lib/tasks/closure_compiler/closure_compiler_runner.rb</string>
|
400
|
+
<string>lib/task_manager.rb</string>
|
401
|
+
<string>lib/file_actioner.rb</string>
|
402
|
+
<string>lib/poller.rb</string>
|
403
|
+
<string>lib/sleep_waiter.rb</string>
|
404
|
+
<string>lib/tasks/js_test_driver/js_test_driver_config.rb</string>
|
405
|
+
<string>lib/tasks/closure_compiler/closure_compiler_config.rb</string>
|
406
|
+
<string>lib/tasks/google_lint/google_lint_parser.rb</string>
|
407
|
+
<string>lib/tasks/google_lint/google_lint_runner.rb</string>
|
213
408
|
<string>lib/filters/ends_with_filter.rb</string>
|
214
409
|
<string>lib/directory_finder.rb</string>
|
215
410
|
<string>lib/file_finder.rb</string>
|
411
|
+
<string>lib/filters/modified_filter.rb</string>
|
216
412
|
<string>lib/tasks/coffeescript/coffeescript_runner.rb</string>
|
217
413
|
<string>lib/tasks/jasmine_node/jasmine_node_runner.rb</string>
|
218
414
|
<string>lib/jasmine-node/specs.js</string>
|
@@ -220,6 +416,6 @@
|
|
220
416
|
<key>showFileHierarchyDrawer</key>
|
221
417
|
<false/>
|
222
418
|
<key>windowFrame</key>
|
223
|
-
<string>{{0, 0}, {
|
419
|
+
<string>{{0, 0}, {1920, 1178}}</string>
|
224
420
|
</dict>
|
225
421
|
</plist>
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: loris
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 19
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 0.3.0
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Karl O'Keeffe
|
@@ -9,39 +15,73 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-
|
18
|
+
date: 2010-10-01 00:00:00 +01:00
|
13
19
|
default_executable: loris
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
22
|
+
name: json
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 1
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 4
|
33
|
+
- 3
|
34
|
+
version: 1.4.3
|
17
35
|
type: :runtime
|
18
|
-
|
19
|
-
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: bind
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
20
42
|
requirements:
|
21
43
|
- - ">="
|
22
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 27
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
- 2
|
49
|
+
- 6
|
23
50
|
version: 0.2.6
|
24
|
-
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
25
53
|
- !ruby/object:Gem::Dependency
|
26
54
|
name: karl-growl
|
27
|
-
|
28
|
-
|
29
|
-
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
30
58
|
requirements:
|
31
59
|
- - ">="
|
32
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 27
|
62
|
+
segments:
|
63
|
+
- 1
|
64
|
+
- 0
|
65
|
+
- 6
|
33
66
|
version: 1.0.6
|
34
|
-
|
67
|
+
type: :runtime
|
68
|
+
version_requirements: *id003
|
35
69
|
- !ruby/object:Gem::Dependency
|
36
70
|
name: extensions
|
37
|
-
|
38
|
-
|
39
|
-
|
71
|
+
prerelease: false
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
40
74
|
requirements:
|
41
75
|
- - ">="
|
42
76
|
- !ruby/object:Gem::Version
|
77
|
+
hash: 7
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
- 6
|
81
|
+
- 0
|
43
82
|
version: 0.6.0
|
44
|
-
|
83
|
+
type: :runtime
|
84
|
+
version_requirements: *id004
|
45
85
|
description: Automatically run javascript unit tests
|
46
86
|
email: loris@monket.net
|
47
87
|
executables:
|
@@ -67,6 +107,7 @@ files:
|
|
67
107
|
- features/support/env.rb
|
68
108
|
- lib/always_continuer.rb
|
69
109
|
- lib/browser_finder.rb
|
110
|
+
- lib/closure-compiler/compiler.jar
|
70
111
|
- lib/directory_finder.rb
|
71
112
|
- lib/file_actioner.rb
|
72
113
|
- lib/file_finder.rb
|
@@ -75,6 +116,8 @@ files:
|
|
75
116
|
- lib/filters/file_filter.rb
|
76
117
|
- lib/filters/modified_filter.rb
|
77
118
|
- lib/filters/starts_with_filter.rb
|
119
|
+
- lib/google-lint/fixjsstyle
|
120
|
+
- lib/google-lint/gjslint
|
78
121
|
- lib/icons/error.png
|
79
122
|
- lib/icons/failure.png
|
80
123
|
- lib/icons/info.png
|
@@ -98,11 +141,20 @@ files:
|
|
98
141
|
- lib/poller.rb
|
99
142
|
- lib/sleep_waiter.rb
|
100
143
|
- lib/task_manager.rb
|
144
|
+
- lib/tasks/closure_compiler/closure_compiler_config.rb
|
145
|
+
- lib/tasks/closure_compiler/closure_compiler_parser.rb
|
146
|
+
- lib/tasks/closure_compiler/closure_compiler_runner.rb
|
101
147
|
- lib/tasks/coffeescript/coffeescript_parser.rb
|
102
148
|
- lib/tasks/coffeescript/coffeescript_runner.rb
|
103
149
|
- lib/tasks/command_line_task.rb
|
150
|
+
- lib/tasks/google_lint/google_lint_config.rb
|
151
|
+
- lib/tasks/google_lint/google_lint_parser.rb
|
152
|
+
- lib/tasks/google_lint/google_lint_runner.rb
|
153
|
+
- lib/tasks/jasmine_node/jasmine_node_config.rb
|
104
154
|
- lib/tasks/jasmine_node/jasmine_node_parser.rb
|
105
155
|
- lib/tasks/jasmine_node/jasmine_node_runner.rb
|
156
|
+
- lib/tasks/jasmine_node_coverage/jasmine_node_coverage_runner.rb
|
157
|
+
- lib/tasks/jasmine_node_coverage/js_coverage.rb
|
106
158
|
- lib/tasks/javascript_lint/javascript_lint_parser.rb
|
107
159
|
- lib/tasks/javascript_lint/javascript_lint_runner.rb
|
108
160
|
- lib/tasks/js_test_driver/js_test_driver_config.rb
|
@@ -142,21 +194,27 @@ rdoc_options:
|
|
142
194
|
require_paths:
|
143
195
|
- lib
|
144
196
|
required_ruby_version: !ruby/object:Gem::Requirement
|
197
|
+
none: false
|
145
198
|
requirements:
|
146
199
|
- - ">="
|
147
200
|
- !ruby/object:Gem::Version
|
201
|
+
hash: 3
|
202
|
+
segments:
|
203
|
+
- 0
|
148
204
|
version: "0"
|
149
|
-
version:
|
150
205
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
206
|
+
none: false
|
151
207
|
requirements:
|
152
208
|
- - ">="
|
153
209
|
- !ruby/object:Gem::Version
|
210
|
+
hash: 3
|
211
|
+
segments:
|
212
|
+
- 0
|
154
213
|
version: "0"
|
155
|
-
version:
|
156
214
|
requirements: []
|
157
215
|
|
158
216
|
rubyforge_project:
|
159
|
-
rubygems_version: 1.3.
|
217
|
+
rubygems_version: 1.3.7
|
160
218
|
signing_key:
|
161
219
|
specification_version: 3
|
162
220
|
summary: Automatically run javascript unit tests
|