karl-loris 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/Rakefile +1 -1
  2. data/TODO +5 -5
  3. data/VERSION +1 -1
  4. data/features/step_definitons/all.rb +1 -1
  5. data/lib/filters/ends_with_filter.rb +1 -1
  6. data/lib/filters/extension_filter.rb +1 -1
  7. data/lib/filters/file_filter.rb +1 -1
  8. data/lib/filters/modified_filter.rb +1 -1
  9. data/lib/loris.rb +59 -16
  10. data/lib/outputs/growl_output.rb +1 -1
  11. data/lib/outputs/output_collection.rb +3 -3
  12. data/lib/outputs/shell_output.rb +1 -1
  13. data/lib/outputs/unix_console_clearing_output.rb +2 -2
  14. data/lib/outputs/windows_console_clearing_output.rb +2 -2
  15. data/lib/pinger.rb +23 -0
  16. data/lib/task_manager.rb +23 -5
  17. data/lib/tasks/command_line_task.rb +28 -0
  18. data/lib/tasks/javascript_lint/javascript_lint_parser.rb +45 -0
  19. data/lib/tasks/javascript_lint/javascript_lint_runner.rb +5 -1
  20. data/lib/tasks/js_test_driver/js_test_driver_config.rb +22 -0
  21. data/lib/tasks/js_test_driver/{js_test_driver_task.rb → js_test_driver_parser.rb} +1 -26
  22. data/lib/tasks/js_test_driver/js_test_driver_runner.rb +8 -2
  23. data/lib/tasks/js_test_driver/js_test_driver_server.rb +30 -0
  24. data/lib/tasks/jspec/{jspec_task.rb → jspec_parser.rb} +2 -26
  25. data/lib/tasks/jspec/jspec_runner.rb +4 -0
  26. data/lib/tasks/rspec/rspec_parser.rb +25 -0
  27. data/lib/tasks/rspec/rspec_runner.rb +5 -1
  28. data/lib/unix_process.rb +7 -0
  29. data/lib/windows_process.rb +9 -0
  30. data/loris.gemspec +16 -10
  31. data/spec/file_actioner_spec.rb +2 -2
  32. data/spec/list_task_spec.rb +5 -5
  33. data/spec/poller_spec.rb +1 -1
  34. data/spec/tasks/js_test_driver/js_test_driver_runner_spec.rb +7 -6
  35. data/spec/tasks/jspec/jspec_parser_spec.rb +28 -0
  36. metadata +14 -8
  37. data/lib/tasks/javascript_lint/javascript_lint_task.rb +0 -66
  38. data/lib/tasks/rspec/rspec_task.rb +0 -50
  39. data/spec/tasks/jspec/jspec_task_spec.rb +0 -45
data/Rakefile CHANGED
@@ -25,7 +25,7 @@ rescue LoadError
25
25
  end
26
26
 
27
27
 
28
- task :default => [:spec, :features]
28
+ task :default => :spec
29
29
 
30
30
  Spec::Rake::SpecTask.new(:spec) do |t|
31
31
  t.spec_files = Dir.glob('spec/**/*_spec.rb')
data/TODO CHANGED
@@ -1,21 +1,21 @@
1
+ * Work out what is going on with fork in windows (running second copy of Loris?)
2
+
1
3
  * Remove JsTestDriver.jar from lib dir
2
4
  * Tidy Windows related if statements
3
5
  * Tidy JSL filename removing
4
6
 
5
7
  * javascript lint not installed? (package if not already installed?)
6
-
7
8
  * JSpec not installed? (can require as gem)
8
9
 
9
- * Add JS Test Driver support
10
-
10
+ * Detect file rename
11
11
  * Detect file deletion/directory rename
12
12
 
13
+ * Factories to create tasks
14
+
13
15
  * Deal with filesystem exceptions
14
- * Deal with task exceptions
15
16
  * jspec task (just modified files?)
16
17
  * javascript lint task (just modified files?)
17
18
  * separate thread (create new and kill old)
18
19
  * listen for interrupt
19
- * detect file deletion
20
20
  * cucumber task
21
21
  * Tidy growl windows code
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.9
1
+ 0.0.10
@@ -65,5 +65,5 @@ Then /^I should NOT see "([^\"]*)" in the Loris output$/ do |text|
65
65
  end
66
66
 
67
67
  Then /^I should not see any errors$/ do
68
- get_background_error.strip().should == ""
68
+ get_background_error.strip.should == ""
69
69
  end
@@ -11,7 +11,7 @@ class EndsWithFilter
11
11
  return file_name.downcase.ends_with? @text
12
12
  end
13
13
 
14
- def complete()
14
+ def complete
15
15
  end
16
16
 
17
17
  end
@@ -14,7 +14,7 @@ class ExtensionFilter
14
14
  @file_class.extname(file_name).gsub( /^\./, '' ).downcase
15
15
  end
16
16
 
17
- def complete()
17
+ def complete
18
18
  end
19
19
 
20
20
  end
@@ -8,7 +8,7 @@ class FileFilter
8
8
  return @file_class.file?(path)
9
9
  end
10
10
 
11
- def complete()
11
+ def complete
12
12
  end
13
13
 
14
14
  end
@@ -13,7 +13,7 @@ class ModifiedFilter
13
13
  return @last_modified.nil? || modified > @last_modified
14
14
  end
15
15
 
16
- def complete()
16
+ def complete
17
17
  @last_modified = @modifieds.max
18
18
  @modifieds = []
19
19
  end
data/lib/loris.rb CHANGED
@@ -6,6 +6,8 @@ require 'bind'
6
6
  require 'rbconfig'
7
7
  require 'find'
8
8
  require 'Growl'
9
+ require 'yaml'
10
+ require 'uri'
9
11
 
10
12
 
11
13
  require 'file_finder'
@@ -14,6 +16,7 @@ require 'sleep_waiter'
14
16
  require 'always_continuer'
15
17
  require 'file_actioner'
16
18
  require 'task_manager'
19
+ require 'pinger'
17
20
 
18
21
  require 'filters/extension_filter'
19
22
  require 'filters/modified_filter'
@@ -27,14 +30,13 @@ require 'outputs/unix_console_clearing_output'
27
30
  require 'outputs/growl_output'
28
31
 
29
32
  require 'tasks/list_task'
30
- require 'tasks/jspec/jspec_task'
33
+ require 'tasks/command_line_task'
31
34
  require 'tasks/jspec/jspec_runner'
32
- require 'tasks/javascript_lint/javascript_lint_task'
35
+ require 'tasks/jspec/jspec_parser'
33
36
  require 'tasks/javascript_lint/javascript_lint_runner'
34
- require 'tasks/js_test_driver/js_test_driver_task'
35
- require 'tasks/js_test_driver/js_test_driver_runner'
36
- require 'tasks/rspec/rspec_task'
37
+ require 'tasks/javascript_lint/javascript_lint_parser'
37
38
  require 'tasks/rspec/rspec_runner'
39
+ require 'tasks/rspec/rspec_parser'
38
40
 
39
41
 
40
42
  include Config
@@ -62,8 +64,8 @@ module Loris
62
64
  @stream = stream
63
65
  end
64
66
 
65
- def run()
66
- @actioner.run()
67
+ def run
68
+ @actioner.run
67
69
  @stream.puts '[Poll complete]'
68
70
  @stream.flush
69
71
  end
@@ -78,7 +80,7 @@ module Loris
78
80
  is_windows = RUBY_PLATFORM =~ /mswin32/
79
81
  dir = Dir.pwd
80
82
  sleep_duration = 1
81
- jstd_jar = File.join(LIBDIR, 'JsTestDriver-1.0b.jar')
83
+ browser = is_windows ? 'C:/Program Files/Internet Explorer/iexplore.exe' : 'open'
82
84
 
83
85
  # Create object graph
84
86
  w = SleepWaiter.new(sleep_duration)
@@ -87,19 +89,19 @@ module Loris
87
89
  ff.add_filter(FileFilter.new(File))
88
90
  ff.add_filter(ModifiedFilter.new(File))
89
91
 
90
- cco = is_windows ? WindowsConsoleClearingOutput.new() : UnixConsoleClearingOutput.new()
92
+ cco = is_windows ? WindowsConsoleClearingOutput.new : UnixConsoleClearingOutput.new
91
93
 
92
- oc = OutputCollection.new()
94
+ oc = OutputCollection.new
93
95
  oc.add(ShellOutput.new($stdout))
94
96
  oc.add(cco) unless debug
95
97
  oc.add(GrowlOutput.new(Growl)) unless debug
96
98
 
97
99
  tm = TaskManager.new(oc)
98
- tm.add(ListTask.new()) if debug
99
- tm.add(JavascriptLintTask.new(JavascriptLintRunner.new(dir, ExtensionFilter.new(File, 'js')), dir))
100
- tm.add(JSpecTask.new(JSpecRunner.new(dir, ExtensionFilter.new(File, 'js'))))
101
- tm.add(JsTestDriverTask.new(JsTestDriverRunner.new(dir, jstd_jar, ExtensionFilter.new(File, 'js'))))
102
- tm.add(RSpecTask.new(RSpecRunner.new(dir, ExtensionFilter.new(File, 'rb'), EndsWithFilter.new('_spec.rb'))))
100
+ tm.add(ListTask.new) if debug
101
+ tm.add(CommandLineTask.new(JavascriptLintRunner.new(dir, ExtensionFilter.new(File, 'js')), JavascriptLintParser.new(dir)))
102
+ tm.add(CommandLineTask.new(JSpecRunner.new(dir, ExtensionFilter.new(File, 'js')), JSpecParser.new)) unless is_windows
103
+ tm.add(jsTestDriverTask(dir))
104
+ tm.add(CommandLineTask.new(RSpecRunner.new(dir, ExtensionFilter.new(File, 'rb'), EndsWithFilter.new('_spec.rb')), RSpecParser.new))
103
105
 
104
106
  a = FileActioner.new(ff, tm)
105
107
 
@@ -108,9 +110,50 @@ module Loris
108
110
  p = Poller.new(w, c, debug ? da : a)
109
111
 
110
112
  # Start!
111
- p.start()
113
+ p.start
112
114
 
113
115
  end
116
+
117
+ # Will need to be refactored into a factory
118
+ def jsTestDriverTask(dir)
119
+ require 'tasks/js_test_driver/js_test_driver_runner'
120
+ require 'tasks/js_test_driver/js_test_driver_parser'
121
+ require 'tasks/js_test_driver/js_test_driver_config'
122
+ require 'tasks/js_test_driver/js_test_driver_server'
123
+
124
+ jar = File.join(LIBDIR, 'JsTestDriver-1.0b.jar')
125
+ is_windows = RUBY_PLATFORM =~ /mswin32/
126
+ browser = is_windows ? 'C:/Program Files/Internet Explorer/iexplore.exe' : 'open'
127
+ sleep_time = is_windows ? 10 : 5
128
+
129
+ if is_windows
130
+ require 'windows_process'
131
+ else
132
+ require 'unix_process'
133
+ end
134
+
135
+ return CommandLineTask.new(
136
+ JsTestDriverRunner.new(
137
+ dir,
138
+ jar,
139
+ ExtensionFilter.new(File, 'js'),
140
+ JsTestDriverServer.new(
141
+ JsTestDriverConfig.new(
142
+ dir,
143
+ YAML,
144
+ URI
145
+ ),
146
+ Pinger.new,
147
+ is_windows ? WindowsProcess.new : UnixProcess.new,
148
+ jar,
149
+ browser,
150
+ sleep_time
151
+ )
152
+ ),
153
+ JsTestDriverParser.new
154
+ )
155
+ end
156
+
114
157
  end
115
158
 
116
159
  end
@@ -4,7 +4,7 @@ class GrowlOutput
4
4
  @growler = growler
5
5
  end
6
6
 
7
- def start_run()
7
+ def start_run
8
8
  end
9
9
 
10
10
  def add_result(result)
@@ -1,12 +1,12 @@
1
1
  class OutputCollection
2
2
 
3
- def initialize()
3
+ def initialize
4
4
  @outputs = []
5
5
  end
6
6
 
7
- def start_run()
7
+ def start_run
8
8
  @outputs.each do |output|
9
- output.start_run()
9
+ output.start_run
10
10
  end
11
11
  end
12
12
 
@@ -4,7 +4,7 @@ class ShellOutput
4
4
  @output = output
5
5
  end
6
6
 
7
- def start_run()
7
+ def start_run
8
8
  end
9
9
 
10
10
  def add_result(result)
@@ -1,9 +1,9 @@
1
1
  class UnixConsoleClearingOutput
2
2
 
3
- def initialize()
3
+ def initialize
4
4
  end
5
5
 
6
- def start_run()
6
+ def start_run
7
7
  system 'clear'
8
8
  end
9
9
 
@@ -1,9 +1,9 @@
1
1
  class WindowsConsoleClearingOutput
2
2
 
3
- def initialize()
3
+ def initialize
4
4
  end
5
5
 
6
- def start_run()
6
+ def start_run
7
7
  system 'cls'
8
8
  end
9
9
 
data/lib/pinger.rb ADDED
@@ -0,0 +1,23 @@
1
+ require 'socket'
2
+ require 'timeout'
3
+
4
+ class Pinger
5
+
6
+ def is_port_open?(ip, port)
7
+ begin
8
+ Timeout::timeout(1) do
9
+ begin
10
+ s = TCPSocket.new(ip, port)
11
+ s.close
12
+ return true
13
+ rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
14
+ return false
15
+ end
16
+ end
17
+ rescue Timeout::Error
18
+ end
19
+
20
+ return false
21
+ end
22
+
23
+ end
data/lib/task_manager.rb CHANGED
@@ -10,18 +10,36 @@ class TaskManager
10
10
  end
11
11
 
12
12
  def run(files)
13
- @output.start_run();
13
+ @output.start_run;
14
14
 
15
15
  @tasks.each do |task|
16
16
 
17
- result = task.run(files)
18
- if !result.nil?
19
- @output.add_result(result)
20
- break if [:error, :failure].include? result[:state]
17
+ begin
18
+ break if !run_task(files, task)
19
+ rescue Exception => ex
20
+ output_exception(ex)
21
21
  end
22
22
 
23
23
  end
24
24
 
25
25
  end
26
26
 
27
+ def run_task(files, task)
28
+ result = task.run(files)
29
+ return true if result.nil?
30
+
31
+ @output.add_result(result)
32
+ return !([:error, :failure].include? result[:state])
33
+ end
34
+
35
+ def output_exception(ex)
36
+ @output.add_result({
37
+ :state => :error,
38
+ :title => 'Task',
39
+ :summary => 'Exception',
40
+ :first => ex.message,
41
+ :detail => ex.backtrace
42
+ })
43
+ end
44
+
27
45
  end
@@ -0,0 +1,28 @@
1
+ class CommandLineTask
2
+
3
+ def initialize(runner, parser)
4
+ @runner = runner
5
+ @parser = parser
6
+ end
7
+
8
+ def run(files)
9
+ all_files = files[:all]
10
+ modified_files = files[:filtered]
11
+
12
+ return nil if (!@runner.is_configured? all_files)
13
+ return nil if (!@runner.should_run? modified_files)
14
+
15
+ detail = @runner.execute
16
+
17
+ state, summary, first = @parser.parse_result(detail)
18
+
19
+ return {
20
+ :state => state,
21
+ :title => @runner.name,
22
+ :summary => summary,
23
+ :first => first,
24
+ :detail => detail
25
+ }
26
+ end
27
+
28
+ end
@@ -0,0 +1,45 @@
1
+ class JavascriptLintParser
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(/\([0-9]+\):([^:]*)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(/\([0-9]+\)/)[0].strip
30
+ return :warning, num_failures + ' Warnings', strip_dir(error_info)
31
+ end
32
+
33
+ return :success, 'All files are clean', ''
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
+ end
44
+
45
+ end
@@ -6,7 +6,11 @@ class JavascriptLintRunner
6
6
  @filter = filter
7
7
  end
8
8
 
9
- def execute()
9
+ def name
10
+ return 'Javascript Lint'
11
+ end
12
+
13
+ def execute
10
14
  return `jsl -conf "#{@config}" -nologo -nofilelisting 2>&1`
11
15
  end
12
16
 
@@ -0,0 +1,22 @@
1
+ class JsTestDriverConfig
2
+
3
+ def initialize(dir, yaml, uri)
4
+ @config_file = dir + '/jsTestDriver.conf'
5
+ @yaml = yaml
6
+ @uri = uri
7
+ end
8
+
9
+ def reload
10
+ @conf = @yaml.load_file(@config_file)
11
+ @server = @uri.parse(@conf['server'])
12
+ end
13
+
14
+ def host
15
+ return @server.host
16
+ end
17
+
18
+ def port
19
+ return @server.port
20
+ end
21
+
22
+ end
@@ -1,30 +1,5 @@
1
- class JsTestDriverTask
2
-
3
- def initialize(js_test_driver)
4
- @js_test_driver = js_test_driver
5
- end
6
-
7
- def run(files)
8
- all_files = files[:all]
9
- modified_files = files[:filtered]
10
-
11
- return nil if (!@js_test_driver.is_configured? all_files)
12
- return nil if (!@js_test_driver.should_run? modified_files)
13
-
14
- detail = @js_test_driver.execute()
15
-
16
- state, summary, first = parse_result(detail)
17
-
18
- return {
19
- :state => state,
20
- :title => 'JS Test Driver',
21
- :summary => summary,
22
- :first => first,
23
- :detail => detail
24
- }
25
- end
1
+ class JsTestDriverParser
26
2
 
27
- # Move to parse class
28
3
  def parse_result(detail)
29
4
  summary_line = detail.grep( /Total \d+ tests/ )[0]
30
5
 
@@ -1,13 +1,19 @@
1
1
  class JsTestDriverRunner
2
2
 
3
- def initialize(dir, jar, filter)
3
+ def initialize(dir, jar, filter, server)
4
4
  @config = dir + '/jsTestDriver.conf'
5
5
  @dir = dir
6
6
  @jar = jar
7
7
  @filter = filter
8
+ @server = server
8
9
  end
9
10
 
10
- def execute()
11
+ def name
12
+ return 'JS Test Driver'
13
+ end
14
+
15
+ def execute
16
+ @server.start_if_required
11
17
  return `java -jar "#{@jar}" --config "#{@config}" --tests all --verbose 2>&1`
12
18
  end
13
19
 
@@ -0,0 +1,30 @@
1
+ class JsTestDriverServer
2
+
3
+ def initialize(config, pinger, process, jar, browser, sleep_time)
4
+ @config = config
5
+ @pinger = pinger
6
+ @process = process
7
+ @jar = jar
8
+ @browser = browser
9
+ @sleep_time = sleep_time
10
+ end
11
+
12
+ def start_if_required
13
+ @config.reload
14
+
15
+ if @config.host == 'localhost' && server_not_running
16
+ start_server(@config.port)
17
+ end
18
+ end
19
+
20
+ def server_not_running
21
+ return !@pinger.is_port_open?('127.0.0.1', @config.port)
22
+ end
23
+
24
+ def start_server(port)
25
+ command = "java -jar \"#{@jar}\" --port #{port} --browser \"#{@browser}\" "
26
+ @process.create(command)
27
+ sleep @sleep_time
28
+ end
29
+
30
+ end
@@ -1,30 +1,6 @@
1
- class JSpecTask
1
+ class JSpecParser
2
2
 
3
- def initialize(jspec)
4
- @jspec = jspec
5
- end
6
-
7
- def run(files)
8
- all_files = files[:all]
9
- modified_files = files[:filtered]
10
-
11
- return nil if (!@jspec.is_configured? all_files)
12
- return nil if (!@jspec.should_run? modified_files)
13
-
14
- detail = @jspec.execute
15
-
16
- state, summary, first = parse_results(detail)
17
-
18
- return {
19
- :state => state,
20
- :title => 'JSpec',
21
- :summary => summary,
22
- :first => first,
23
- :detail => detail
24
- }
25
- end
26
-
27
- def parse_results(detail)
3
+ def parse_result(detail)
28
4
  summary_line = detail.grep( /Passes:/ )[0]
29
5
 
30
6
  if summary_line.nil?
@@ -6,6 +6,10 @@ class JSpecRunner
6
6
  @filter = filter
7
7
  end
8
8
 
9
+ def name
10
+ return 'JSpec'
11
+ end
12
+
9
13
  def execute
10
14
  return `jspec run --rhino --trace 2>&1`
11
15
  end
@@ -0,0 +1,25 @@
1
+ class RSpecParser
2
+
3
+ def parse_result(detail)
4
+ summary_line = detail.grep( /\d+ examples?, \d+ failures?/ )[0]
5
+
6
+ if summary_line.nil?
7
+ # error
8
+ error_info = (detail + "\nUnknown Error!").to_a[0].strip
9
+ return :error, 'Error', error_info
10
+ end
11
+
12
+ if summary_line =~ /([1-9]+) failures?/
13
+ num_errors = $1
14
+
15
+ items = detail.split("\n\n")
16
+
17
+ error_info = items[1].split("\n")[1]
18
+ return :failure, num_errors + ' Errors', error_info
19
+ end
20
+
21
+ return :success, 'All specs pass', ''
22
+
23
+ end
24
+
25
+ end
@@ -6,7 +6,11 @@ class RSpecRunner
6
6
  @spec_filter = spec_filter
7
7
  end
8
8
 
9
- def execute()
9
+ def name
10
+ return 'RSpec'
11
+ end
12
+
13
+ def execute
10
14
  return `spec . 2>&1`
11
15
  end
12
16
 
@@ -0,0 +1,7 @@
1
+ class UnixProcess
2
+
3
+ def create(command)
4
+ exec(command) if fork.nil?
5
+ end
6
+
7
+ end
@@ -0,0 +1,9 @@
1
+ require 'win32/process'
2
+
3
+ class WindowsProcess
4
+
5
+ def create(command)
6
+ exec(command) if Process.fork.nil?
7
+ end
8
+
9
+ 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.0.9"
8
+ s.version = "0.0.10"
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{2009-09-18}
12
+ s.date = %q{2009-09-21}
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}
@@ -50,18 +50,24 @@ Gem::Specification.new do |s|
50
50
  "lib/outputs/shell_output.rb",
51
51
  "lib/outputs/unix_console_clearing_output.rb",
52
52
  "lib/outputs/windows_console_clearing_output.rb",
53
+ "lib/pinger.rb",
53
54
  "lib/poller.rb",
54
55
  "lib/sleep_waiter.rb",
55
56
  "lib/task_manager.rb",
57
+ "lib/tasks/command_line_task.rb",
58
+ "lib/tasks/javascript_lint/javascript_lint_parser.rb",
56
59
  "lib/tasks/javascript_lint/javascript_lint_runner.rb",
57
- "lib/tasks/javascript_lint/javascript_lint_task.rb",
60
+ "lib/tasks/js_test_driver/js_test_driver_config.rb",
61
+ "lib/tasks/js_test_driver/js_test_driver_parser.rb",
58
62
  "lib/tasks/js_test_driver/js_test_driver_runner.rb",
59
- "lib/tasks/js_test_driver/js_test_driver_task.rb",
63
+ "lib/tasks/js_test_driver/js_test_driver_server.rb",
64
+ "lib/tasks/jspec/jspec_parser.rb",
60
65
  "lib/tasks/jspec/jspec_runner.rb",
61
- "lib/tasks/jspec/jspec_task.rb",
62
66
  "lib/tasks/list_task.rb",
67
+ "lib/tasks/rspec/rspec_parser.rb",
63
68
  "lib/tasks/rspec/rspec_runner.rb",
64
- "lib/tasks/rspec/rspec_task.rb",
69
+ "lib/unix_process.rb",
70
+ "lib/windows_process.rb",
65
71
  "loris.gemspec",
66
72
  "loris.tmproj",
67
73
  "spec/file_actioner_spec.rb",
@@ -76,8 +82,8 @@ Gem::Specification.new do |s|
76
82
  "spec/task_manager_spec.rb",
77
83
  "spec/tasks/javascript_lint/javascript_lint_runner_spec.rb",
78
84
  "spec/tasks/js_test_driver/js_test_driver_runner_spec.rb",
79
- "spec/tasks/jspec/jspec_runner_spec.rb",
80
- "spec/tasks/jspec/jspec_task_spec.rb"
85
+ "spec/tasks/jspec/jspec_parser_spec.rb",
86
+ "spec/tasks/jspec/jspec_runner_spec.rb"
81
87
  ]
82
88
  s.homepage = %q{http://github.com/karl/loris}
83
89
  s.rdoc_options = ["--charset=UTF-8"]
@@ -97,8 +103,8 @@ Gem::Specification.new do |s|
97
103
  "spec/task_manager_spec.rb",
98
104
  "spec/tasks/javascript_lint/javascript_lint_runner_spec.rb",
99
105
  "spec/tasks/js_test_driver/js_test_driver_runner_spec.rb",
100
- "spec/tasks/jspec/jspec_runner_spec.rb",
101
- "spec/tasks/jspec/jspec_task_spec.rb"
106
+ "spec/tasks/jspec/jspec_parser_spec.rb",
107
+ "spec/tasks/jspec/jspec_runner_spec.rb"
102
108
  ]
103
109
 
104
110
  if s.respond_to? :specification_version then
@@ -15,7 +15,7 @@ describe FileActioner do
15
15
  tm.should_receive(:run).with(files)
16
16
 
17
17
  fa = FileActioner.new(ff, tm)
18
- fa.run()
18
+ fa.run
19
19
 
20
20
  end
21
21
 
@@ -32,7 +32,7 @@ describe FileActioner do
32
32
  tm.should_not_receive(:run)
33
33
 
34
34
  fa = FileActioner.new(ff, tm)
35
- fa.run()
35
+ fa.run
36
36
 
37
37
  end
38
38
 
@@ -10,7 +10,7 @@ describe ListTask do
10
10
  end
11
11
 
12
12
  it "should output the given paths" do
13
- oa = ListTask.new()
13
+ oa = ListTask.new
14
14
  result = oa.run(@files)
15
15
 
16
16
  result[:detail].should eql "/path/to.file\n"
@@ -26,28 +26,28 @@ describe ListTask do
26
26
  end
27
27
 
28
28
  it "should return a title" do
29
- oa = ListTask.new()
29
+ oa = ListTask.new
30
30
  result = oa.run(@files)
31
31
 
32
32
  result[:title].should eql "List"
33
33
  end
34
34
 
35
35
  it "should return success always" do
36
- oa = ListTask.new()
36
+ oa = ListTask.new
37
37
  result = oa.run(@files)
38
38
 
39
39
  result[:state].should eql :success
40
40
  end
41
41
 
42
42
  it "should return summary for 1 file" do
43
- oa = ListTask.new()
43
+ oa = ListTask.new
44
44
  result = oa.run(@files)
45
45
 
46
46
  result[:first].should eql @files[:filtered][0]
47
47
  end
48
48
 
49
49
  it "should return summary for 3 files" do
50
- oa = ListTask.new()
50
+ oa = ListTask.new
51
51
  result = oa.run({ :filtered => ['first.file','second.file','third.file'] })
52
52
 
53
53
  result[:first].should eql "3 files."
data/spec/poller_spec.rb CHANGED
@@ -20,7 +20,7 @@ describe Poller do
20
20
 
21
21
  it "should wait and call action while contunuer returns true" do
22
22
  p = Poller.new(@waiter, @continuer, @action)
23
- p.start()
23
+ p.start
24
24
  end
25
25
 
26
26
  end
@@ -5,6 +5,7 @@ describe JsTestDriverRunner do
5
5
  before do
6
6
  @jar = '/path/to/jsTestDriver.jar'
7
7
  @filter = mock('JS Extension Filter')
8
+ @server = mock('JS Test Driver Server')
8
9
  end
9
10
 
10
11
  describe "is_configured?" do
@@ -14,7 +15,7 @@ describe JsTestDriverRunner do
14
15
  dir = '/a/dir/structure'
15
16
  all_files = ['/a/dir/structure/jsTestDriver.conf']
16
17
 
17
- runner = JsTestDriverRunner.new(dir, @jar, @filter)
18
+ runner = JsTestDriverRunner.new(dir, @jar, @filter, @server)
18
19
 
19
20
  runner.is_configured?(all_files).should be_true
20
21
 
@@ -25,7 +26,7 @@ describe JsTestDriverRunner do
25
26
  dir = '/a/dir/structure'
26
27
  all_files = ['/a/dir/structure/other.conf']
27
28
 
28
- runner = JsTestDriverRunner.new(dir, @jar, @filter)
29
+ runner = JsTestDriverRunner.new(dir, @jar, @filter, @server)
29
30
 
30
31
  runner.is_configured?(all_files).should be_false
31
32
 
@@ -41,7 +42,7 @@ describe JsTestDriverRunner do
41
42
  modified_files = ['/a/dir/structure/another_dir/example.js']
42
43
  @filter.should_receive(:filter).and_return(true)
43
44
 
44
- runner = JsTestDriverRunner.new(dir, @jar, @filter)
45
+ runner = JsTestDriverRunner.new(dir, @jar, @filter, @server)
45
46
 
46
47
  runner.should_run?(modified_files).should be_true
47
48
 
@@ -54,7 +55,7 @@ describe JsTestDriverRunner do
54
55
  @filter.should_receive(:filter).ordered.and_return(false)
55
56
  @filter.should_receive(:filter).ordered.and_return(true)
56
57
 
57
- runner = JsTestDriverRunner.new(dir, @jar, @filter)
58
+ runner = JsTestDriverRunner.new(dir, @jar, @filter, @server)
58
59
 
59
60
  runner.should_run?(modified_files).should be_true
60
61
 
@@ -66,7 +67,7 @@ describe JsTestDriverRunner do
66
67
  modified_files = ['/a/dir/structure/nonjs.file']
67
68
  @filter.should_receive(:filter).ordered.and_return(false)
68
69
 
69
- runner = JsTestDriverRunner.new(dir, @jar, @filter)
70
+ runner = JsTestDriverRunner.new(dir, @jar, @filter, @server)
70
71
 
71
72
  runner.should_run?(modified_files).should be_false
72
73
 
@@ -78,7 +79,7 @@ describe JsTestDriverRunner do
78
79
  modified_files = ['/a/dir/structure/jsTestDriver.conf']
79
80
  @filter.should_receive(:filter).ordered.and_return(false)
80
81
 
81
- runner = JsTestDriverRunner.new(dir, @jar, @filter)
82
+ runner = JsTestDriverRunner.new(dir, @jar, @filter, @server)
82
83
 
83
84
  runner.should_run?(modified_files).should be_true
84
85
 
@@ -0,0 +1,28 @@
1
+ require 'lib/tasks/jspec/jspec_parser.rb'
2
+
3
+ describe JSpecParser do
4
+
5
+ it "should return error if unable to parse jspec output" do
6
+ jspec_parser = JSpecParser.new
7
+ state, summary, first = jspec_parser.parse_result('A JSpec error message here...')
8
+
9
+ state.should eql :error
10
+ end
11
+
12
+ it "should return success if all tests pass" do
13
+ jspec_parser = JSpecParser.new
14
+ state, summary, first = jspec_parser.parse_result('Passes: 3 Failures: 0')
15
+
16
+ state.should eql :success
17
+ end
18
+
19
+ it "should return failure if any test fails" do
20
+ jspec_parser = JSpecParser.new
21
+ state, summary, first = jspec_parser.parse_result('Passes: 2 Failures: 1')
22
+
23
+ state.should eql :failure
24
+ end
25
+
26
+ end
27
+
28
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: karl-loris
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karl O'Keeffe
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-18 00:00:00 -07:00
12
+ date: 2009-09-21 00:00:00 -07:00
13
13
  default_executable: loris
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -83,18 +83,24 @@ files:
83
83
  - lib/outputs/shell_output.rb
84
84
  - lib/outputs/unix_console_clearing_output.rb
85
85
  - lib/outputs/windows_console_clearing_output.rb
86
+ - lib/pinger.rb
86
87
  - lib/poller.rb
87
88
  - lib/sleep_waiter.rb
88
89
  - lib/task_manager.rb
90
+ - lib/tasks/command_line_task.rb
91
+ - lib/tasks/javascript_lint/javascript_lint_parser.rb
89
92
  - lib/tasks/javascript_lint/javascript_lint_runner.rb
90
- - lib/tasks/javascript_lint/javascript_lint_task.rb
93
+ - lib/tasks/js_test_driver/js_test_driver_config.rb
94
+ - lib/tasks/js_test_driver/js_test_driver_parser.rb
91
95
  - lib/tasks/js_test_driver/js_test_driver_runner.rb
92
- - lib/tasks/js_test_driver/js_test_driver_task.rb
96
+ - lib/tasks/js_test_driver/js_test_driver_server.rb
97
+ - lib/tasks/jspec/jspec_parser.rb
93
98
  - lib/tasks/jspec/jspec_runner.rb
94
- - lib/tasks/jspec/jspec_task.rb
95
99
  - lib/tasks/list_task.rb
100
+ - lib/tasks/rspec/rspec_parser.rb
96
101
  - lib/tasks/rspec/rspec_runner.rb
97
- - lib/tasks/rspec/rspec_task.rb
102
+ - lib/unix_process.rb
103
+ - lib/windows_process.rb
98
104
  - loris.gemspec
99
105
  - loris.tmproj
100
106
  - spec/file_actioner_spec.rb
@@ -109,8 +115,8 @@ files:
109
115
  - spec/task_manager_spec.rb
110
116
  - spec/tasks/javascript_lint/javascript_lint_runner_spec.rb
111
117
  - spec/tasks/js_test_driver/js_test_driver_runner_spec.rb
118
+ - spec/tasks/jspec/jspec_parser_spec.rb
112
119
  - spec/tasks/jspec/jspec_runner_spec.rb
113
- - spec/tasks/jspec/jspec_task_spec.rb
114
120
  has_rdoc: false
115
121
  homepage: http://github.com/karl/loris
116
122
  licenses:
@@ -151,5 +157,5 @@ test_files:
151
157
  - spec/task_manager_spec.rb
152
158
  - spec/tasks/javascript_lint/javascript_lint_runner_spec.rb
153
159
  - spec/tasks/js_test_driver/js_test_driver_runner_spec.rb
160
+ - spec/tasks/jspec/jspec_parser_spec.rb
154
161
  - spec/tasks/jspec/jspec_runner_spec.rb
155
- - spec/tasks/jspec/jspec_task_spec.rb
@@ -1,66 +0,0 @@
1
- class JavascriptLintTask
2
-
3
- def initialize(javascript_lint, dir)
4
- @javascript_lint = javascript_lint
5
- @dir = dir
6
-
7
- # TODO: Tidy!
8
- if (RUBY_PLATFORM =~ /mswin32/)
9
- @dir = @dir.gsub('/', '\\')
10
- end
11
-
12
- end
13
-
14
- def run(files)
15
- all_files = files[:all]
16
- modified_files = files[:filtered]
17
-
18
- return nil if (!@javascript_lint.is_configured? all_files)
19
- return nil if (!@javascript_lint.should_run? modified_files)
20
-
21
- detail = @javascript_lint.execute()
22
-
23
- state, summary, first = parse_result(detail)
24
-
25
- # TODO: Tidy!
26
- # Move to function/class w/ win32 related code
27
- if (first[0, @dir.length] == @dir)
28
- first = first[(@dir.length + 1)..-1]
29
- end
30
-
31
- return {
32
- :state => state,
33
- :title => 'Javascript Lint',
34
- :summary => summary,
35
- :first => first,
36
- :detail => detail
37
- }
38
- end
39
-
40
- # Move to parse class
41
- def parse_result(detail)
42
- summary_line = detail.grep( /\d+\s+error.*,\s+\d+\s+warning.*/ )[0]
43
-
44
- if summary_line.nil?
45
- # error
46
- error_info = (detail + "\nUnknown Error!").to_a[0].strip
47
- return :error, 'Error', error_info
48
- end
49
-
50
- if summary_line =~ /([1-9]+)\d*\s+error/
51
- num_failures = $1
52
- error_info = detail.grep(/\([0-9]+\):([^:]*)Error:/)[0].strip
53
- return :failure, num_failures + ' Errors', error_info
54
- end
55
-
56
- if summary_line =~ /([1-9]+)\d*\s+warning/
57
- num_failures = $1
58
- error_info = detail.grep(/\([0-9]+\)/)[0].strip
59
- return :warning, num_failures + ' Warnings', error_info
60
- end
61
-
62
- return :success, 'All files are clean', ''
63
-
64
- end
65
-
66
- end
@@ -1,50 +0,0 @@
1
- class RSpecTask
2
-
3
- def initialize(rspec)
4
- @rspec = rspec
5
- end
6
-
7
- def run(files)
8
- all_files = files[:all]
9
- modified_files = files[:filtered]
10
-
11
- return nil if (!@rspec.is_configured? all_files)
12
- return nil if (!@rspec.should_run? modified_files)
13
-
14
- detail = @rspec.execute()
15
-
16
- state, summary, first = parse_result(detail)
17
-
18
- return {
19
- :state => state,
20
- :title => 'RSpec',
21
- :summary => summary,
22
- :first => first,
23
- :detail => detail
24
- }
25
- end
26
-
27
- # Move to parse class
28
- def parse_result(detail)
29
- summary_line = detail.grep( /\d+ examples?, \d+ failures?/ )[0]
30
-
31
- if summary_line.nil?
32
- # error
33
- error_info = (detail + "\nUnknown Error!").to_a[0].strip
34
- return :error, 'Error', error_info
35
- end
36
-
37
- if summary_line =~ /([1-9]+) failures?/
38
- num_errors = $1
39
-
40
- items = detail.split("\n\n")
41
-
42
- error_info = items[1].split("\n")[1]
43
- return :failure, num_errors + ' Errors', error_info
44
- end
45
-
46
- return :success, 'All specs pass', ''
47
-
48
- end
49
-
50
- end
@@ -1,45 +0,0 @@
1
- require 'lib/tasks/jspec/jspec_task.rb'
2
-
3
- describe JSpecTask do
4
-
5
- before do
6
- @files = {
7
- :all => [],
8
- :filtered => []
9
- }
10
-
11
- @jspec = mock('JSpec Runner')
12
- @jspec.should_receive(:is_configured?).and_return(true)
13
- @jspec.should_receive(:should_run?).and_return(true)
14
- end
15
-
16
- it "should return error if unable to parse jspec output" do
17
- @jspec.should_receive(:execute).and_return('A JSpec error message here...')
18
-
19
- jspec_task = JSpecTask.new(@jspec)
20
- result = jspec_task.run(@files)
21
-
22
- result[:state].should eql :error
23
- end
24
-
25
- it "should return success if all tests pass" do
26
- @jspec.should_receive(:execute).and_return('Passes: 3 Failures: 0')
27
-
28
- jspec_task = JSpecTask.new(@jspec)
29
- result = jspec_task.run(@files)
30
-
31
- result[:state].should eql :success
32
- end
33
-
34
- it "should return failure if any test fails" do
35
- @jspec.should_receive(:execute).and_return('Passes: 2 Failures: 1')
36
-
37
- jspec_task = JSpecTask.new(@jspec)
38
- result = jspec_task.run(@files)
39
-
40
- result[:state].should eql :failure
41
- end
42
-
43
- end
44
-
45
-