ghostbuster 0.2.4 → 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.
Files changed (37) hide show
  1. data/.gitignore +2 -1
  2. data/Rakefile +66 -24
  3. data/lib/ghostbuster.coffee +13 -7
  4. data/lib/ghostbuster.rb +50 -12
  5. data/lib/ghostbuster/config.rb +3 -1
  6. data/lib/ghostbuster/version.rb +1 -1
  7. data/test/non_working_ghost/Gemfile +6 -0
  8. data/{ghost → test/non_working_ghost}/Ghostfile +1 -1
  9. data/{ghost → test/non_working_ghost}/config.ru +0 -0
  10. data/{ghost → test/non_working_ghost}/start.sh +0 -0
  11. data/{ghost → test/non_working_ghost}/stop.sh +0 -0
  12. data/test/non_working_ghost/test_ghost.coffee +15 -0
  13. data/test/non_working_ghost/test_ghostmore.coffee +9 -0
  14. data/{ghost → test/non_working_ghost}/test_withoutroot.js +0 -0
  15. data/{ghost → test/non_working_ghost}/views/form.erb +0 -0
  16. data/{ghost → test/non_working_ghost}/views/index.erb +0 -0
  17. data/{ghost → test/non_working_ghost}/views/slow.erb +0 -0
  18. data/test/server1/config.ru +23 -0
  19. data/test/server1/start.sh +3 -0
  20. data/test/server1/stop.sh +3 -0
  21. data/test/server1/views/form.erb +12 -0
  22. data/test/server1/views/index.erb +15 -0
  23. data/test/server1/views/slow.erb +12 -0
  24. data/test/working_ghost/Gemfile +6 -0
  25. data/test/working_ghost/Ghostfile +4 -0
  26. data/test/working_ghost/Rakefile +1 -0
  27. data/test/working_ghost/config.ru +23 -0
  28. data/test/working_ghost/start.sh +3 -0
  29. data/test/working_ghost/stop.sh +3 -0
  30. data/{ghost → test/working_ghost}/test_ghost.coffee +0 -14
  31. data/{ghost → test/working_ghost}/test_ghostmore.coffee +0 -7
  32. data/{ghost → test/working_ghost}/test_injs.js +1 -1
  33. data/test/working_ghost/views/form.erb +12 -0
  34. data/test/working_ghost/views/index.erb +15 -0
  35. data/test/working_ghost/views/slow.erb +12 -0
  36. metadata +63 -17
  37. data/log/thin.log +0 -24
data/.gitignore CHANGED
@@ -2,4 +2,5 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
- ghost/log/thin.log
5
+ *.png
6
+ this.log
data/Rakefile CHANGED
@@ -1,30 +1,72 @@
1
1
  require 'bundler/gem_tasks'
2
- $: << 'lib'
3
- require 'ghostbuster/install_rake'
4
2
 
5
- def test_output
6
- out = `bundle exec rake test:ghostbuster`
7
- $?.success? ? out.gsub(/server .*?\n/m, "server\n") : raise("there was a problem")
8
- end
3
+ STDOUT.sync = true
9
4
 
10
- desc "Run tests"
11
- task :test do
12
- out = test_output
13
- if File.read(File.join(File.dirname(__FILE__), 'test', 'output')) == out
14
- puts "Everything is great!"
15
- else
16
- puts out
17
- raise "Things aren't great."
5
+ namespace :test do
6
+ desc "Run test for `working' test suite (via binary)"
7
+ task :working_via_bin do
8
+ print "working_ghost via bin ... "
9
+ Dir.chdir("test/working_ghost") do
10
+ matcher = [/9 success, 0 failure, 1 pending/]
11
+ fork {
12
+ ENV['BUNDLE_GEMFILE'] = File.expand_path("./Gemfile")
13
+ `bundle install`
14
+ out = `bundle exec ghostbuster . 2>&1`
15
+ unless matcher.all?{|m|out[m]}
16
+ puts out
17
+ exit(1)
18
+ end
19
+ raise("There are a weird number of screenshots") unless Dir['*.png'].to_a.size == 12
20
+ exit
21
+ }
22
+ _, status = Process.wait2
23
+ puts status.success? ? "PASSED" : "FAILED"
24
+ end
18
25
  end
19
- end
20
26
 
21
- desc "Update tests"
22
- task :'test:update' do
23
- File.open(File.join(File.dirname(__FILE__), 'test', 'output'), 'w') {|f| f << test_output}
24
- puts "Test output updated"
25
- end
27
+ desc "Run test for `working' test suite (via rake)"
28
+ task :working_via_rake do
29
+ print "working_ghost via rake ... "
30
+ Dir.chdir("test/working_ghost") do
31
+ matcher = [/9 success, 0 failure, 1 pending/]
32
+ fork {
33
+ ENV['BUNDLE_GEMFILE'] = File.expand_path("./Gemfile")
34
+ `bundle install`
35
+ out = `bundle exec rake test:ghostbuster 2>&1`
36
+ unless matcher.all?{|m|out[m]}
37
+ puts out
38
+ exit(1)
39
+ end
40
+ raise("There are a weird number of screenshots") unless Dir['*.png'].to_a.size == 12
41
+ exit
42
+ }
43
+ _, status = Process.wait2
44
+ puts status.success? ? "PASSED" : "FAILED"
45
+ end
46
+ end
26
47
 
27
- desc "Show output"
28
- task :"test:output" do
29
- puts test_output
30
- end
48
+ desc "Run test for `non_working' test suite"
49
+ task :non_working do
50
+ print "non_working_ghost ... "
51
+ Dir.chdir("test/non_working_ghost") do
52
+ matcher = [/0 success, 5 failure, 0 pending/, /Bad link traversal\s+Assert location failed: Excepted http:\/\/127\.0\.0\.1:4567\/not-correct, got http:\/\/127\.0\.0\.1:4567\//, /Form input not equal\s+Assert first for selector #out did not meet expectations/, /This test will explode!\s+I hate you!/, /This test has no succeed\s+This test took too long/]
53
+ fork {
54
+ ENV['BUNDLE_GEMFILE'] = File.expand_path("./Gemfile")
55
+ `bundle install`
56
+ out = `bundle exec ghostbuster . 2>&1`
57
+ begin
58
+ matcher.each{|m| out[m] or raise("Couldn't match for #{m.inspect}")}
59
+ exit
60
+ rescue
61
+ puts $!.message
62
+ puts out
63
+ exit(1)
64
+ end
65
+ }
66
+ _, status = Process.wait2
67
+ puts status.success? ? "PASSED" : "FAILED"
68
+ end
69
+ end
70
+ end
71
+
72
+ task :test => [:'test:working_via_bin', :'test:working_via_rake', :'test:non_working']
@@ -10,7 +10,11 @@ class Test
10
10
  @assertions = []
11
11
  @seenCallbacks = []
12
12
  @assertionIndex = 0
13
- nameForRender: -> "#{@runner.suite.screenshot_dir}/#{@runner.nameForRender()}-#{@name.toLowerCase()}".replace(///\s///g, '_').replace(///'///g, '')
13
+ nameForRender: ->
14
+ name = "#{@runner.suite.screenshot_dir}/#{@runner.nameForRender()}-#{@name.toLowerCase()}"
15
+ name = name.replace(///\s///g, '_')
16
+ name = name.replace(///'///g, '')
17
+ "#{name}-#{++@assertionIndex}.png"
14
18
  getLastError: -> @runner.lastErrors[@name]
15
19
  resetLastError: -> delete @runner.lastErrors[@name]
16
20
  setLastError: (error) ->
@@ -56,6 +60,8 @@ class Test
56
60
  test.seenCallbacks.push getCallback # traversing links causes this to get re-fired.
57
61
  switch status
58
62
  when 'success'
63
+ if test.runner.useScreenshots()
64
+ test.page.render test.nameForRender()
59
65
  test.body = new Body(test)
60
66
  getCallback.call(test) if getCallback
61
67
  when 'fail'
@@ -69,18 +75,17 @@ class Test
69
75
  @stopTestTimer()
70
76
  @callback(false, msg)
71
77
  assert: (opts, valueFetcher) ->
72
- @assertions.push(new Assertion(this, ++@assertionIndex, opts, valueFetcher))
78
+ @assertions.push(new Assertion(this, opts, valueFetcher))
73
79
  @assertions[0].start() if @assertions.length == 1
74
80
  wait: (time, callback) ->
75
81
  test = this
76
82
  setTimeout (-> callback.call(test)), time * 1000
77
83
 
78
84
  class Assertion
79
- constructor: (@test, @idx, @opts, @fetcher) ->
85
+ constructor: (@test, @opts, @fetcher) ->
80
86
  @count = 0
81
87
  @totalTime = if @opts['total'] then @opts['total'] * 1000 else 1000
82
88
  @everyTime = if @opts['every'] then @opts['every'] else 75
83
- nameForRender: -> "#{@test.nameForRender()}-#{@idx}.png"
84
89
  start: ->
85
90
  test = @test
86
91
  assertion = this
@@ -99,7 +104,7 @@ class Assertion
99
104
  test.assertions.splice(test.assertions.indexOf(assertion), 1)
100
105
  clearTimeout assertion.fatal
101
106
  if test.runner.useScreenshots()
102
- test.page.render assertion.nameForRender()
107
+ test.page.render test.nameForRender()
103
108
  if test.assertions.length > 0
104
109
  test.assertions[0].start()
105
110
  else
@@ -144,7 +149,7 @@ class Body
144
149
  var evaluator = function() {
145
150
  try {
146
151
  var assertionCallback = #{assertionCallback.toString()};
147
- var count = document.querySelector('#{selector}').length;
152
+ var count = document.querySelectorAll('#{selector}').length;
148
153
  var ret = assertionCallback(count);
149
154
  if (ret) {
150
155
  return true;
@@ -313,7 +318,8 @@ class TestFile
313
318
  console.log " \033[31m\u2717\033[0m #{name}\n #{@lastErrors[name] || "There was a problem"}"
314
319
  console.log ""
315
320
  @suite.report(success, failure, pending)
316
- console.log "GhostBuster"
321
+
322
+ console.log "Running tests..."
317
323
 
318
324
  class TestSuite
319
325
  constructor: (@args) ->
data/lib/ghostbuster.rb CHANGED
@@ -1,3 +1,6 @@
1
+ require 'fileutils'
2
+ require 'digest/md5'
3
+
1
4
  require 'ghostbuster/version'
2
5
  require 'ghostbuster/shell'
3
6
  require 'ghostbuster/config'
@@ -8,30 +11,40 @@ class Ghostbuster
8
11
  autoload :Runner, 'ghostbuster/runner'
9
12
 
10
13
  def initialize(path)
14
+ STDOUT.sync = true
11
15
  @path = path && File.exist?(path) ? path : '.'
12
16
  @dir = File.directory?(@path) ? @path : File.basename(@path)
13
17
  @file = File.directory?(@dir) ? File.join(@dir, 'Ghostfile') : @dir
14
18
  @ghost_lib = File.expand_path(File.join(File.dirname(__FILE__), "ghostbuster.coffee"))
15
- @config = Config.new(@file)
16
- STDOUT.sync = true
17
19
  end
18
20
 
19
21
  def run
20
22
  status = 1
21
23
  Dir.chdir(@dir) do
24
+ load_config
22
25
  spinner "Starting server" do
23
26
  sh @config.start_command
24
27
  sleep 2
25
28
  end
26
29
  begin
27
- _, status = Process.waitpid2 fork { exec("#{@config.phantom_bin} #{@ghost_lib} #{@config.screenshots?} #{@config.screenshot_x} #{@config.screenshot_y} #{File.expand_path(@config.screenshot_dir)} #{Dir[@config.pattern].to_a.join(' ')}") }
30
+ _, status = Process.waitpid2 fork {
31
+ exec("#{@config.phantom_bin} #{@ghost_lib} #{@config.screenshots?} #{@config.screenshot_x} #{@config.screenshot_y} #{@temporary_screenshot_dir} #{Dir[@config.pattern].to_a.join(' ')}")
32
+ }
33
+ spinner "Copying screenshots" do
34
+ compress_and_copy_screenshots if status.success? && @config.screenshots?
35
+ end
28
36
  ensure
29
37
  spinner "Stopping server" do
30
38
  sh @config.stop_command
31
39
  end
40
+ if @config.screenshots?
41
+ spinner "Cleaning up temporary screenshots" do
42
+ cleanup_screenshots
43
+ end
44
+ end
32
45
  end
33
46
  end
34
- exit(status)
47
+ exit(status.to_i)
35
48
  end
36
49
 
37
50
  def self.run(path)
@@ -39,22 +52,47 @@ class Ghostbuster
39
52
  end
40
53
 
41
54
  private
55
+ def compress_and_copy_screenshots
56
+ FileUtils.rm_f(File.join(@config.screenshot_dir, "*.png"))
57
+ files = Dir[File.join(@temporary_screenshot_dir, '*.png')].to_a
58
+ files.map{|f| f[/(.*?)-\d+\.png$/, 1]}.uniq.each do |cluster|
59
+ images = files.select{|f| f[cluster]}.sort_by{|f| Integer(f[/\-(\d+)\.png$/, 1])}
60
+ idx = 0
61
+ while idx < (images.size - 1)
62
+ if Digest::MD5.file(images[idx]) == Digest::MD5.file(images[idx + 1])
63
+ images.slice!(idx + 1)
64
+ else
65
+ idx += 1
66
+ end
67
+ end
68
+ images.each_with_index do |f, idx|
69
+ FileUtils.mv(f, File.join(@config.screenshot_dir, "#{File.basename(f)[/(.*?)\-\d+\.png$/, 1]}-%03d.png" % (idx + 1)))
70
+ end
71
+ end
72
+ end
73
+
74
+ def cleanup_screenshots
75
+ FileUtils.rm_rf @temporary_screenshot_dir
76
+ end
77
+
78
+ def load_config
79
+ @config = Config.new(@file)
80
+ @temporary_screenshot_dir = File.join(@config.temp_dir, "ghost-#{Process.pid}-#{Time.new.to_i}")
81
+ FileUtils.mkdir_p(@temporary_screenshot_dir) if @config.screenshots?
82
+ end
83
+
42
84
  def spinner(msg, &blk)
43
- STDOUT.sync = true
44
- print msg
45
- print " "
46
85
  spin = Thread.new do
47
86
  i = 0
87
+ s = '/-\\|'
48
88
  loop do
49
- s = '/-\\|'
50
- print s[i % 4].chr
89
+ print "\r#{msg} #{s[i % 4].chr}"
51
90
  i += 1
52
- sleep 0.1
53
- print "\b"
91
+ sleep 0.05
54
92
  end
55
93
  end
56
94
  yield
57
95
  spin.kill
58
- puts
96
+ puts "\r#{msg} ✓"
59
97
  end
60
98
  end
@@ -1,6 +1,6 @@
1
1
  class Ghostbuster
2
2
  class Config
3
- attr_accessor :pattern, :screenshot_dir, :start_command, :stop_command, :phantom_bin
3
+ attr_accessor :pattern, :screenshot_dir, :start_command, :stop_command, :phantom_bin, :temp_dir
4
4
  attr_reader :screenshot_x, :screenshot_y
5
5
  def initialize(path_to_file = nil)
6
6
  @config_file = path_to_file || './Ghostfile'
@@ -9,10 +9,12 @@ class Ghostbuster
9
9
  @phantom_bin = File.join(ENV['HOME'], '.ghostbuster', 'phantomjs')
10
10
  @screenshot_dir = "."
11
11
  @screenshots = true
12
+ @temp_dir = "/tmp"
12
13
  @start_command, @stop_command = "./start.sh", "./stop.sh"
13
14
  if File.exist?(@config_file)
14
15
  instance_eval File.read(@config_file), @config_file, 1
15
16
  end
17
+ @screenshot_dir = File.expand_path(@screenshot_dir)
16
18
  end
17
19
 
18
20
  def ghost
@@ -1,3 +1,3 @@
1
1
  class Ghostbuster
2
- VERSION = '0.2.4'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -0,0 +1,6 @@
1
+ source :rubygems
2
+
3
+ gem 'ghostbuster', :path => '../..'
4
+ gem 'thin'
5
+ gem 'sinatra'
6
+ gem 'rake'
@@ -1,4 +1,4 @@
1
1
  ghost.pattern = "test_*.{coffee,js}"
2
- ghost.do_not_take_screenshots! # or do_not_takescreenshots! defaults to true
2
+ ghost.take_screenshots! # or do_not_takescreenshots! defaults to true
3
3
  ghost.screenshot_dir = '.'
4
4
  ghost.screenshot_dimensions 800, 2000
File without changes
File without changes
File without changes
@@ -0,0 +1,15 @@
1
+ phantom.test.root = "http://127.0.0.1:4567"
2
+
3
+ phantom.test.add "Bad link traversal", ->
4
+ @get '/', ->
5
+ @body.click 'a'
6
+ @body.assertLocation('/not-correct')
7
+ @succeed()
8
+
9
+ phantom.test.add "Form input not equal", ->
10
+ @get '/form', ->
11
+ @body.input "#in", "this is my input"
12
+ @body.click "#btn"
13
+ @body.assertFirst '#out', (out) ->
14
+ out.innerHTML == 'this is NOT my input'
15
+ @succeed()
@@ -0,0 +1,9 @@
1
+ phantom.test.root = "http://127.0.0.1:4567"
2
+
3
+
4
+ phantom.test.add "This test will explode!", ->
5
+ throw "I hate you!"
6
+
7
+ phantom.test.add "This test has no succeed", ->
8
+ @get '/form', ->
9
+ "so, like, this test sucks"
File without changes
File without changes
File without changes
@@ -0,0 +1,23 @@
1
+ require 'rubygems'
2
+ require 'sinatra'
3
+
4
+ class App < Sinatra::Base
5
+ get "/" do
6
+ erb :index
7
+ end
8
+
9
+ get "/form" do
10
+ erb :form
11
+ end
12
+
13
+ get "/slow" do
14
+ erb :slow
15
+ end
16
+
17
+ get "/slow-index" do
18
+ sleep 2
19
+ erb :index
20
+ end
21
+ end
22
+
23
+ run App
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ bundle exec thin --port 4567 -P thin.pid -d -R config.ru start
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ bundle exec thin --port 4567 -P thin.pid -d -R config.ru stop
@@ -0,0 +1,12 @@
1
+ <html>
2
+ <head>
3
+ <title>This is my index</title>
4
+ </head>
5
+ <body>
6
+ <form>
7
+ <input type="text" id="in">
8
+ <input type="button" id="btn" onclick="document.getElementById('out').innerHTML = document.getElementById('in').value;">
9
+ </form>
10
+ <p id="out"></p>
11
+ </body>
12
+ </html>
@@ -0,0 +1,15 @@
1
+ <html>
2
+ <head>
3
+ <title>This is my index</title>
4
+ </head>
5
+ <body>
6
+ <h1>First header</h1>
7
+ <p>This is my paragraph</p>
8
+ <ul>
9
+ <li>List item 1</li>
10
+ <li>List item 2</li>
11
+ <li>List item 3</li>
12
+ </ul>
13
+ <a href="/form">form</a>
14
+ </body>
15
+ </html>
@@ -0,0 +1,12 @@
1
+ <html>
2
+ <head>
3
+ <title>This is my index</title>
4
+ </head>
5
+ <body>
6
+ <form>
7
+ <input type="text" id="in">
8
+ <input type="button" id="btn" onclick="setTimeout( function() { document.getElementById('out').innerHTML = document.getElementById('in').value;}, 2000);">
9
+ </form>
10
+ <p id="out"></p>
11
+ </body>
12
+ </html>
@@ -0,0 +1,6 @@
1
+ source :rubygems
2
+
3
+ gem 'ghostbuster', :path => '../..'
4
+ gem 'thin'
5
+ gem 'sinatra'
6
+ gem 'rake'
@@ -0,0 +1,4 @@
1
+ ghost.pattern = "test_*.{coffee,js}"
2
+ ghost.take_screenshots! # or do_not_takescreenshots! defaults to true
3
+ ghost.screenshot_dir = '.'
4
+ ghost.screenshot_dimensions 800, 2000
@@ -0,0 +1 @@
1
+ require 'ghostbuster/install_rake'
@@ -0,0 +1,23 @@
1
+ require 'rubygems'
2
+ require 'sinatra'
3
+
4
+ class App < Sinatra::Base
5
+ get "/" do
6
+ erb :index
7
+ end
8
+
9
+ get "/form" do
10
+ erb :form
11
+ end
12
+
13
+ get "/slow" do
14
+ erb :slow
15
+ end
16
+
17
+ get "/slow-index" do
18
+ sleep 2
19
+ erb :index
20
+ end
21
+ end
22
+
23
+ run App
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ source ../server1/start.sh
@@ -0,0 +1,3 @@
1
+ #!/bin/bash
2
+
3
+ source ../server1/stop.sh
@@ -27,17 +27,3 @@ phantom.test.add "Link traversal", ->
27
27
  @body.click 'a'
28
28
  @body.assertLocation('/form')
29
29
  @succeed()
30
-
31
- phantom.test.add "Bad link traversal", ->
32
- @get '/', ->
33
- @body.click 'a'
34
- @body.assertLocation('/not-correct')
35
- @succeed()
36
-
37
- phantom.test.add "Form input not equal", ->
38
- @get '/form', ->
39
- @body.input "#in", "this is my input"
40
- @body.click "#btn"
41
- @body.assertFirst '#out', (out) ->
42
- out.innerHTML == 'this is NOT my input'
43
- @succeed()
@@ -31,10 +31,3 @@ phantom.test.add "Before block var", ->
31
31
  @body.assertFirst '#out', (out) ->
32
32
  out.innerHTML == 'sample'
33
33
  @succeed()
34
-
35
- phantom.test.add "This test will explode!", ->
36
- throw "I hate you!"
37
-
38
- phantom.test.add "This test has no succeed", ->
39
- @get '/form', ->
40
- "so, like, this test sucks"
@@ -2,7 +2,7 @@ phantom.test.root = "http://127.0.0.1:4567"
2
2
 
3
3
  phantom.test.add("Test for 3 li's", function() {
4
4
  this.get('/', function() {
5
- this.body.assertCount('li', function(count) { return count == 3})
5
+ this.body.assertCount('li', function(count) { return count == 3 })
6
6
  })
7
7
  this.succeed();
8
8
  });
@@ -0,0 +1,12 @@
1
+ <html>
2
+ <head>
3
+ <title>This is my index</title>
4
+ </head>
5
+ <body>
6
+ <form>
7
+ <input type="text" id="in">
8
+ <input type="button" id="btn" onclick="document.getElementById('out').innerHTML = document.getElementById('in').value;">
9
+ </form>
10
+ <p id="out"></p>
11
+ </body>
12
+ </html>
@@ -0,0 +1,15 @@
1
+ <html>
2
+ <head>
3
+ <title>This is my index</title>
4
+ </head>
5
+ <body>
6
+ <h1>First header</h1>
7
+ <p>This is my paragraph</p>
8
+ <ul>
9
+ <li>List item 1</li>
10
+ <li>List item 2</li>
11
+ <li>List item 3</li>
12
+ </ul>
13
+ <a href="/form">form</a>
14
+ </body>
15
+ </html>
@@ -0,0 +1,12 @@
1
+ <html>
2
+ <head>
3
+ <title>This is my index</title>
4
+ </head>
5
+ <body>
6
+ <form>
7
+ <input type="text" id="in">
8
+ <input type="button" id="btn" onclick="setTimeout( function() { document.getElementById('out').innerHTML = document.getElementById('in').value;}, 2000);">
9
+ </form>
10
+ <p id="out"></p>
11
+ </body>
12
+ </html>
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ghostbuster
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 4
10
- version: 0.2.4
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Josh Hull
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-08-31 00:00:00 -07:00
18
+ date: 2011-09-01 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -97,17 +97,6 @@ files:
97
97
  - Rakefile
98
98
  - bin/ghostbuster
99
99
  - bin/setup-ghostbuster
100
- - ghost/Ghostfile
101
- - ghost/config.ru
102
- - ghost/start.sh
103
- - ghost/stop.sh
104
- - ghost/test_ghost.coffee
105
- - ghost/test_ghostmore.coffee
106
- - ghost/test_injs.js
107
- - ghost/test_withoutroot.js
108
- - ghost/views/form.erb
109
- - ghost/views/index.erb
110
- - ghost/views/slow.erb
111
100
  - ghostbuster.gemspec
112
101
  - lib/ghostbuster.coffee
113
102
  - lib/ghostbuster.rb
@@ -117,8 +106,36 @@ files:
117
106
  - lib/ghostbuster/runner.rb
118
107
  - lib/ghostbuster/shell.rb
119
108
  - lib/ghostbuster/version.rb
120
- - log/thin.log
109
+ - test/non_working_ghost/Gemfile
110
+ - test/non_working_ghost/Ghostfile
111
+ - test/non_working_ghost/config.ru
112
+ - test/non_working_ghost/start.sh
113
+ - test/non_working_ghost/stop.sh
114
+ - test/non_working_ghost/test_ghost.coffee
115
+ - test/non_working_ghost/test_ghostmore.coffee
116
+ - test/non_working_ghost/test_withoutroot.js
117
+ - test/non_working_ghost/views/form.erb
118
+ - test/non_working_ghost/views/index.erb
119
+ - test/non_working_ghost/views/slow.erb
121
120
  - test/output
121
+ - test/server1/config.ru
122
+ - test/server1/start.sh
123
+ - test/server1/stop.sh
124
+ - test/server1/views/form.erb
125
+ - test/server1/views/index.erb
126
+ - test/server1/views/slow.erb
127
+ - test/working_ghost/Gemfile
128
+ - test/working_ghost/Ghostfile
129
+ - test/working_ghost/Rakefile
130
+ - test/working_ghost/config.ru
131
+ - test/working_ghost/start.sh
132
+ - test/working_ghost/stop.sh
133
+ - test/working_ghost/test_ghost.coffee
134
+ - test/working_ghost/test_ghostmore.coffee
135
+ - test/working_ghost/test_injs.js
136
+ - test/working_ghost/views/form.erb
137
+ - test/working_ghost/views/index.erb
138
+ - test/working_ghost/views/slow.erb
122
139
  has_rdoc: true
123
140
  homepage: https://github.com/joshbuddy/ghostbuster
124
141
  licenses: []
@@ -154,4 +171,33 @@ signing_key:
154
171
  specification_version: 3
155
172
  summary: Integration testing ftw
156
173
  test_files:
174
+ - test/non_working_ghost/Gemfile
175
+ - test/non_working_ghost/Ghostfile
176
+ - test/non_working_ghost/config.ru
177
+ - test/non_working_ghost/start.sh
178
+ - test/non_working_ghost/stop.sh
179
+ - test/non_working_ghost/test_ghost.coffee
180
+ - test/non_working_ghost/test_ghostmore.coffee
181
+ - test/non_working_ghost/test_withoutroot.js
182
+ - test/non_working_ghost/views/form.erb
183
+ - test/non_working_ghost/views/index.erb
184
+ - test/non_working_ghost/views/slow.erb
157
185
  - test/output
186
+ - test/server1/config.ru
187
+ - test/server1/start.sh
188
+ - test/server1/stop.sh
189
+ - test/server1/views/form.erb
190
+ - test/server1/views/index.erb
191
+ - test/server1/views/slow.erb
192
+ - test/working_ghost/Gemfile
193
+ - test/working_ghost/Ghostfile
194
+ - test/working_ghost/Rakefile
195
+ - test/working_ghost/config.ru
196
+ - test/working_ghost/start.sh
197
+ - test/working_ghost/stop.sh
198
+ - test/working_ghost/test_ghost.coffee
199
+ - test/working_ghost/test_ghostmore.coffee
200
+ - test/working_ghost/test_injs.js
201
+ - test/working_ghost/views/form.erb
202
+ - test/working_ghost/views/index.erb
203
+ - test/working_ghost/views/slow.erb
data/log/thin.log DELETED
@@ -1,24 +0,0 @@
1
- >> Writing PID to thin.pid
2
- >> Exiting!
3
- /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/gems/thin-1.2.11/lib/rack/adapter/loader.rb:35:in `read': No such file or directory - config.ru (Errno::ENOENT)
4
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/gems/thin-1.2.11/lib/rack/adapter/loader.rb:35:in `load'
5
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/gems/thin-1.2.11/lib/thin/controllers/controller.rb:181:in `load_rackup_config'
6
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/gems/thin-1.2.11/lib/thin/controllers/controller.rb:71:in `start'
7
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/gems/thin-1.2.11/lib/thin/runner.rb:185:in `send'
8
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/gems/thin-1.2.11/lib/thin/runner.rb:185:in `run_command'
9
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/gems/thin-1.2.11/lib/thin/runner.rb:151:in `run!'
10
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/gems/thin-1.2.11/bin/thin:6
11
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/bin/thin:19:in `load'
12
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/bin/thin:19
13
- >> Writing PID to thin.pid
14
- >> Exiting!
15
- /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/gems/thin-1.2.11/lib/rack/adapter/loader.rb:35:in `read': No such file or directory - config.ru (Errno::ENOENT)
16
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/gems/thin-1.2.11/lib/rack/adapter/loader.rb:35:in `load'
17
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/gems/thin-1.2.11/lib/thin/controllers/controller.rb:181:in `load_rackup_config'
18
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/gems/thin-1.2.11/lib/thin/controllers/controller.rb:71:in `start'
19
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/gems/thin-1.2.11/lib/thin/runner.rb:185:in `send'
20
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/gems/thin-1.2.11/lib/thin/runner.rb:185:in `run_command'
21
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/gems/thin-1.2.11/lib/thin/runner.rb:151:in `run!'
22
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/gems/thin-1.2.11/bin/thin:6
23
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/bin/thin:19:in `load'
24
- from /Users/joshbuddy/.rvm/gems/ree-1.8.7-2011.03/bin/thin:19