js_spec 0.2.1 → 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 (45) hide show
  1. data/CHANGES +12 -0
  2. data/README +2 -1
  3. data/Rakefile +2 -3
  4. data/core/JSSpecExtensions.js +18 -16
  5. data/lib/js_spec/resources/{spec_runner.rb → spec.rb} +4 -8
  6. data/lib/js_spec/resources.rb +1 -10
  7. data/lib/js_spec.rb +19 -20
  8. data/spec/integration/integration_spec.rb +14 -3
  9. data/spec/integration/integration_spec_helper.rb +1 -2
  10. data/spec/unit/js_test_core/resources/spec_dir_spec.rb +35 -0
  11. data/spec/unit/js_test_core/resources/spec_file_spec.rb +33 -0
  12. data/spec/unit/unit_spec_helper.rb +9 -9
  13. metadata +7 -46
  14. data/core/jquery.js +0 -2992
  15. data/lib/js_spec/client.rb +0 -50
  16. data/lib/js_spec/guid.rb +0 -153
  17. data/lib/js_spec/rack/commonlogger.rb +0 -5
  18. data/lib/js_spec/rack.rb +0 -2
  19. data/lib/js_spec/rails_server.rb +0 -22
  20. data/lib/js_spec/resources/dir.rb +0 -60
  21. data/lib/js_spec/resources/file.rb +0 -32
  22. data/lib/js_spec/resources/runners/firefox_runner.rb +0 -71
  23. data/lib/js_spec/resources/runners.rb +0 -15
  24. data/lib/js_spec/resources/spec_dir_runner.rb +0 -15
  25. data/lib/js_spec/resources/spec_file_runner.rb +0 -15
  26. data/lib/js_spec/resources/suite.rb +0 -24
  27. data/lib/js_spec/resources/suite_finish.rb +0 -20
  28. data/lib/js_spec/resources/web_root.rb +0 -34
  29. data/lib/js_spec/server.rb +0 -98
  30. data/lib/js_spec/thin/backends/js_spec_server.rb +0 -9
  31. data/lib/js_spec/thin/js_spec_connection.rb +0 -42
  32. data/lib/js_spec/thin.rb +0 -3
  33. data/spec/unit/js_spec/client_spec.rb +0 -137
  34. data/spec/unit/js_spec/rails_server_spec.rb +0 -45
  35. data/spec/unit/js_spec/resources/dir_spec.rb +0 -84
  36. data/spec/unit/js_spec/resources/file_spec.rb +0 -87
  37. data/spec/unit/js_spec/resources/runner_spec.rb +0 -24
  38. data/spec/unit/js_spec/resources/runners/firefox_runner_spec.rb +0 -152
  39. data/spec/unit/js_spec/resources/spec_dir_runner_spec.rb +0 -48
  40. data/spec/unit/js_spec/resources/spec_file_runner_spec.rb +0 -20
  41. data/spec/unit/js_spec/resources/suite_finish_spec.rb +0 -42
  42. data/spec/unit/js_spec/resources/suite_spec.rb +0 -44
  43. data/spec/unit/js_spec/resources/web_root_spec.rb +0 -55
  44. data/spec/unit/js_spec/server_spec.rb +0 -154
  45. data/spec/unit/thin/js_spec_connection_spec.rb +0 -64
@@ -1,137 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../unit_spec_helper")
2
-
3
- module JsSpec
4
- describe Client do
5
- describe '.run' do
6
- describe 'when successful' do
7
- before do
8
- request = Object.new
9
- mock(request).post("/runners/firefox", "selenium_host=localhost&selenium_port=4444")
10
- response = Object.new
11
- mock(response).body {""}
12
- mock(Net::HTTP).start(DEFAULT_HOST, DEFAULT_PORT).yields(request) {response}
13
- stub(Client).puts
14
- end
15
-
16
- it "returns true" do
17
- Client.run.should be_true
18
- end
19
-
20
- it "prints 'SUCCESS'" do
21
- mock(Client).puts("SUCCESS")
22
- Client.run
23
- end
24
- end
25
-
26
- describe 'when unsuccessful' do
27
- before do
28
- request = Object.new
29
- mock(request).post("/runners/firefox", "selenium_host=localhost&selenium_port=4444")
30
- response = Object.new
31
- mock(response).body {"the failure message"}
32
- mock(Net::HTTP).start(DEFAULT_HOST, DEFAULT_PORT).yields(request) {response}
33
- stub(Client).puts
34
- end
35
-
36
- it "returns false" do
37
- Client.run.should be_false
38
- end
39
-
40
- it "prints 'FAILURE' and the error message(s)" do
41
- mock(Client).puts("FAILURE")
42
- mock(Client).puts("the failure message")
43
- Client.run
44
- end
45
- end
46
-
47
- describe "arguments" do
48
- attr_reader :request, :response
49
- before do
50
- @request = Object.new
51
- @response = Object.new
52
- mock(response).body {""}
53
- mock(Net::HTTP).start(DEFAULT_HOST, DEFAULT_PORT).yields(request) {response}
54
- stub(Client).puts
55
- end
56
-
57
- describe "when passed a custom spec_url" do
58
- it "passes the spec_url as a post parameter" do
59
- spec_url = 'http://foobar.com/foo'
60
- mock(request).post(
61
- "/runners/firefox",
62
- "selenium_host=localhost&selenium_port=4444&spec_url=#{CGI.escape(spec_url)}"
63
- )
64
- Client.run(:spec_url => spec_url)
65
- end
66
- end
67
-
68
- describe "when passed a custom selenium host" do
69
- it "passes the selenium_host as a post parameter" do
70
- selenium_host = 'test-runner'
71
- mock(request).post(
72
- "/runners/firefox",
73
- "selenium_host=test-runner&selenium_port=4444"
74
- )
75
- Client.run(:selenium_host => selenium_host)
76
- end
77
- end
78
-
79
- describe "when passed a custom selenium port" do
80
- it "passes the selenium_port as a post parameter" do
81
- selenium_port = 5000
82
- mock(request).post(
83
- "/runners/firefox",
84
- "selenium_host=localhost&selenium_port=5000"
85
- )
86
- Client.run(:selenium_port => selenium_port)
87
- end
88
- end
89
- end
90
-
91
- end
92
-
93
- describe ".run_argv" do
94
- attr_reader :request, :response
95
- before do
96
- @request = Object.new
97
- @response = Object.new
98
- mock(response).body {""}
99
- mock(Net::HTTP).start(DEFAULT_HOST, DEFAULT_PORT).yields(request) {response}
100
- stub(Client).puts
101
- end
102
-
103
- describe "when passed a custom spec_url" do
104
- it "passes the spec_url as a post parameter" do
105
- spec_url = 'http://foobar.com/foo'
106
- mock(request).post(
107
- "/runners/firefox",
108
- "selenium_host=localhost&selenium_port=4444&spec_url=#{CGI.escape(spec_url)}"
109
- )
110
- Client.run_argv(['--spec_url', spec_url])
111
- end
112
- end
113
-
114
- describe "when passed a custom selenium host" do
115
- it "passes the selenium_host as a post parameter" do
116
- selenium_host = 'test-runner'
117
- mock(request).post(
118
- "/runners/firefox",
119
- "selenium_host=test-runner&selenium_port=4444"
120
- )
121
- Client.run_argv(['--selenium_host', selenium_host])
122
- end
123
- end
124
-
125
- describe "when passed a custom selenium port" do
126
- it "passes the selenium_port as a post parameter" do
127
- selenium_port = 5000
128
- mock(request).post(
129
- "/runners/firefox",
130
- "selenium_host=localhost&selenium_port=5000"
131
- )
132
- Client.run_argv(['--selenium_port', selenium_port.to_s])
133
- end
134
- end
135
- end
136
- end
137
- end
@@ -1,45 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../unit_spec_helper")
2
-
3
- module JsSpec
4
- describe RailsServer do
5
- it "subclasses Server" do
6
- RailsServer.superclass.should == Server
7
- end
8
-
9
- describe ".run" do
10
- attr_reader :rails_root
11
- before do
12
- @rails_root = "/rails/root"
13
- Server.instance = nil
14
- end
15
-
16
- it "initializes the RailsServer and runs the Thin Handler and sets Server.instance to the RailsServer instance" do
17
- host = DEFAULT_HOST
18
- port = DEFAULT_PORT
19
- server_instance = nil
20
- mock.proxy(RailsServer).new(
21
- rails_root,
22
- host,
23
- port
24
- ) do |new_instance|
25
- server_instance = new_instance
26
- end
27
-
28
- mock(EventMachine).run.yields
29
- mock(EventMachine).start_server(host, port, ::Thin::JsSpecConnection)
30
- RailsServer.run(rails_root)
31
- Server.instance.should == server_instance
32
- end
33
- end
34
-
35
- describe "#initialize" do
36
- it "sets the server paths based on the passed in rails root" do
37
- rails_root = "/rails/root"
38
- server = RailsServer.new(rails_root)
39
- server.spec_root_path.should == "#{rails_root}/spec/javascripts"
40
- server.implementation_root_path.should == "#{rails_root}/public/javascripts"
41
- server.public_path.should == "#{rails_root}/public"
42
- end
43
- end
44
- end
45
- end
@@ -1,84 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../../unit_spec_helper")
2
-
3
- module JsSpec
4
- module Resources
5
- describe Dir do
6
- attr_reader :dir, :absolute_path, :relative_path
7
-
8
- describe "in core dir" do
9
- before do
10
- @absolute_path = core_path
11
- @relative_path = "/core"
12
- @dir = Resources::Dir.new(absolute_path, relative_path)
13
- end
14
-
15
- describe "#locate when passed a name of a real file" do
16
- it "returns a Resources::File representing it" do
17
- file = dir.locate("JSSpec.css")
18
- file.relative_path.should == "/core/JSSpec.css"
19
- file.absolute_path.should == "#{core_path}/JSSpec.css"
20
- end
21
- end
22
- end
23
-
24
- describe "in specs dir" do
25
- before do
26
- @absolute_path = spec_root_path
27
- @relative_path = "/specs"
28
- @dir = Resources::Dir.new(absolute_path, relative_path)
29
- end
30
-
31
- it "has an absolute path" do
32
- dir.absolute_path.should == absolute_path
33
- end
34
-
35
- it "has a relative path" do
36
- dir.relative_path.should == relative_path
37
- end
38
-
39
- describe "#locate when passed the name with an extension" do
40
- it "when file exists, returns a Resources::File representing it" do
41
- file = dir.locate("failing_spec.js")
42
- file.relative_path.should == "/specs/failing_spec.js"
43
- file.absolute_path.should == "#{spec_root_path}/failing_spec.js"
44
- end
45
-
46
- it "when file does not exist, raises error" do
47
- lambda { dir.locate("nonexistent.js") }.should raise_error
48
- end
49
- end
50
-
51
- describe "#locate when passed a name without an extension" do
52
- it "when the name corresponds to a .js file in the directory, returns a SpecFileRunner for the file" do
53
- file_runner = dir.locate("failing_spec")
54
- file_runner.should be_an_instance_of(SpecFileRunner)
55
- file_runner.file.should == spec_file("/failing_spec.js")
56
- end
57
-
58
- it "when name corresponds to a subdirectory, returns a DirectoryRunner for the directory" do
59
- subdir = dir.locate("foo")
60
- subdir.should be_an_instance_of(Resources::Dir)
61
- subdir.should == spec_dir("/foo")
62
- end
63
-
64
- it "when name does not correspond to a .js file or directory, raises an error" do
65
- lambda do
66
- dir.locate("nonexistent")
67
- end.should raise_error
68
- end
69
- end
70
-
71
- describe Dir, "#glob" do
72
- it "returns an array of matching Files under this directory with the correct relative paths" do
73
- globbed_files = dir.glob("/**/*_spec.js")
74
-
75
- globbed_files.size.should == 3
76
- globbed_files.should contain_spec_file_with_correct_paths("/failing_spec.js")
77
- globbed_files.should contain_spec_file_with_correct_paths("/foo/failing_spec.js")
78
- globbed_files.should contain_spec_file_with_correct_paths("/foo/passing_spec.js")
79
- end
80
- end
81
- end
82
- end
83
- end
84
- end
@@ -1,87 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../../unit_spec_helper")
2
-
3
- module JsSpec
4
- module Resources
5
- describe File do
6
- attr_reader :request, :file
7
-
8
- before do
9
- stub(EventMachine).send_data
10
- stub(EventMachine).close_connection
11
- @file = Resources::File.new(absolute_path, relative_path)
12
- @request = create_request('get', relative_path)
13
- end
14
-
15
- def absolute_path
16
- "#{spec_root_path}/failing_spec.js"
17
- end
18
-
19
- def relative_path
20
- "/specs/failing_spec.js"
21
- end
22
-
23
- describe "#absolute_path" do
24
- it "returns the absolute path passed into the initializer" do
25
- file.absolute_path.should == absolute_path
26
- end
27
- end
28
-
29
- describe "#relative_path" do
30
- it "returns the relative path passed into the initializer" do
31
- file.relative_path.should == relative_path
32
- end
33
- end
34
-
35
- describe "#get" do
36
- attr_reader :response
37
- before do
38
- @response = Rack::Response.new
39
- end
40
-
41
- it "returns the contents of the file" do
42
- file.get(request, response)
43
- response.body.should == ::File.read(absolute_path)
44
- end
45
-
46
- describe "when File has an extension" do
47
- describe '.js' do
48
- it "sets Content-Type to text/javascript" do
49
- file.get(request,response)
50
- response.content_type.should == "text/javascript"
51
- end
52
- end
53
-
54
- describe '.css' do
55
- it "sets Content-Type to text/css" do
56
- file.get(request, response)
57
- response.content_type.should == "text/css"
58
- end
59
-
60
- def absolute_path
61
- "#{core_path}/JSSpec.css"
62
- end
63
-
64
- def relative_path
65
- "/core/JSSpec.css"
66
- end
67
- end
68
- end
69
- end
70
-
71
- describe "==" do
72
- it "returns true when passed a file with the same absolute and relative paths" do
73
- file.should == Resources::File.new(absolute_path, relative_path)
74
- end
75
-
76
- it "returns false when passed a file with a different absolute or relative path" do
77
- file.should_not == Resources::File.new(absolute_path, "bogus")
78
- file.should_not == Resources::File.new("bogus", relative_path)
79
- end
80
-
81
- it "when passed a Dir, returns false because File is not a Dir" do
82
- file.should_not == Resources::Dir.new(absolute_path, relative_path)
83
- end
84
- end
85
- end
86
- end
87
- end
@@ -1,24 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../../unit_spec_helper")
2
-
3
- module JsSpec
4
- module Resources
5
- describe Runners do
6
- attr_reader :runner
7
- before do
8
- @runner = Runners.new
9
- end
10
-
11
- describe "#locate" do
12
- it "when passed 'firefox', returns a Firefox1Runner" do
13
- runner.locate('firefox').is_a?(Runners::FirefoxRunner).should be_true
14
- end
15
-
16
- it "when not passed 'firefox', raises an error" do
17
- lambda do
18
- runner.locate('invalid')
19
- end.should raise_error
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,152 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../../../unit_spec_helper")
2
-
3
- module JsSpec
4
- module Resources
5
- describe Runners::FirefoxRunner do
6
- attr_reader :runner, :request, :response, :driver
7
-
8
- before do
9
- Thread.current[:connection] = connection
10
- @driver = "Selenium Driver"
11
- stub(Selenium::SeleniumDriver).new('localhost', 4444, '*firefox', 'http://0.0.0.0:8080') do
12
- driver
13
- end
14
- end
15
-
16
- describe "#post" do
17
- attr_reader :firefox_profile_path
18
- before do
19
- @request = Rack::Request.new( Rack::MockRequest.env_for('/runners/firefox') )
20
- @response = Rack::Response.new
21
- @runner = Runners::FirefoxRunner.new(request, response)
22
- stub(Thread).start.yields
23
- end
24
-
25
- it "keeps the connection open" do
26
- stub(driver).start
27
- stub(driver).open
28
- dont_allow(EventMachine).send_data
29
- dont_allow(EventMachine).close_connection
30
- runner.post(request, response)
31
-
32
- response.body.should be_empty
33
- end
34
-
35
- describe "when a selenium_host parameter is passed into the request" do
36
- before do
37
- request['selenium_host'] = "another-machine"
38
- stub(driver).start
39
- stub(driver).open
40
- end
41
-
42
- it "starts the Selenium Driver with the passed in selenium_host" do
43
- mock(Selenium::SeleniumDriver).new('another-machine', 4444, '*firefox', 'http://0.0.0.0:8080') do
44
- driver
45
- end
46
- runner.post(request, response)
47
- end
48
- end
49
-
50
- describe "when a selenium_host parameter is not passed into the request" do
51
- before do
52
- request['selenium_host'].should be_nil
53
- stub(driver).start
54
- stub(driver).open
55
- end
56
-
57
- it "starts the Selenium Driver from localhost" do
58
- mock(Selenium::SeleniumDriver).new('localhost', 4444, '*firefox', 'http://0.0.0.0:8080') do
59
- driver
60
- end
61
- runner.post(request, response)
62
- end
63
- end
64
-
65
- describe "when a selenium_port parameter is passed into the request" do
66
- before do
67
- request['selenium_port'] = "4000"
68
- stub(driver).start
69
- stub(driver).open
70
- end
71
-
72
- it "starts the Selenium Driver with the passed in selenium_port" do
73
- mock(Selenium::SeleniumDriver).new('localhost', 4000, '*firefox', 'http://0.0.0.0:8080') do
74
- driver
75
- end
76
- runner.post(request, response)
77
- end
78
- end
79
-
80
- describe "when a selenium_port parameter is not passed into the request" do
81
- before do
82
- request['selenium_port'].should be_nil
83
- stub(driver).start
84
- stub(driver).open
85
- end
86
-
87
- it "starts the Selenium Driver from localhost" do
88
- mock(Selenium::SeleniumDriver).new('localhost', 4444, '*firefox', 'http://0.0.0.0:8080') do
89
- driver
90
- end
91
- runner.post(request, response)
92
- end
93
- end
94
-
95
- describe "when a spec_url is passed into the request" do
96
- before do
97
- request['spec_url'] = "http://another-host:8080/specs/subdir"
98
- end
99
-
100
- it "runs Selenium with the passed in host and part to run the specified spec suite in Firefox" do
101
- mock(Selenium::SeleniumDriver).new('localhost', 4444, '*firefox', 'http://another-host:8080') do
102
- driver
103
- end
104
- mock(driver).start
105
- mock(driver).open("http://another-host:8080/specs/subdir?guid=#{runner.guid}")
106
-
107
- runner.post(request, response)
108
- end
109
- end
110
-
111
- describe "when a spec_url is not passed into the request" do
112
- before do
113
- request['spec_url'].should be_nil
114
- mock(Selenium::SeleniumDriver).new('localhost', 4444, '*firefox', 'http://0.0.0.0:8080') do
115
- driver
116
- end
117
- end
118
-
119
- it "uses Selenium to run the entire spec suite in Firefox" do
120
- mock(driver).start
121
- mock(driver).open("http://0.0.0.0:8080/specs?guid=#{runner.guid}")
122
-
123
- runner.post(request, response)
124
- end
125
- end
126
- end
127
-
128
- describe "#finalize" do
129
- before do
130
- @request = Rack::Request.new( Rack::MockRequest.env_for('/runners/firefox') )
131
- @response = Rack::Response.new
132
- @runner = Runners::FirefoxRunner.new(request, response)
133
- stub(driver).start
134
- stub(driver).open
135
- runner.post(request, response)
136
- end
137
-
138
- it "kills the browser, sends the response body, and close the connection" do
139
- mock(driver).stop
140
- data = ""
141
- stub(EventMachine).send_data do |signature, data, data_length|
142
- data << data
143
- end
144
- mock(connection).close_connection_after_writing
145
-
146
- runner.finalize("The text")
147
- data.should include("The text")
148
- end
149
- end
150
- end
151
- end
152
- end
@@ -1,48 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../../unit_spec_helper")
2
-
3
- module JsSpec
4
- module Resources
5
- describe SpecDirRunner do
6
- attr_reader :dir, :runner
7
-
8
- before do
9
- stub(EventMachine).send_data
10
- stub(EventMachine).close_connection
11
- @dir = Dir.new(spec_root_path, '/specs')
12
- @runner = SpecDirRunner.new(dir)
13
- end
14
-
15
- describe "#spec_files" do
16
- it "returns a File for each *_spec.js file in the directory" do
17
- spec_files = runner.spec_files
18
-
19
- spec_files.should contain_spec_file_with_correct_paths("/failing_spec.js")
20
- spec_files.should contain_spec_file_with_correct_paths("/foo/failing_spec.js")
21
- spec_files.should contain_spec_file_with_correct_paths("/foo/passing_spec.js")
22
- end
23
- end
24
-
25
- describe "#get" do
26
- attr_reader :html, :doc
27
- before do
28
- request = request('get', '/specs')
29
- response = Rack::Response.new
30
- runner.get(request, response)
31
- @html = response.body
32
- @doc = Hpricot(html)
33
- end
34
-
35
- it "returns script tags for each test javascript file" do
36
- doc.at("script[@src='/specs/failing_spec.js']").should exist
37
- end
38
-
39
- it "returns the js specs template" do
40
- doc.at("link[@href='/core/JSSpec.css']").should exist
41
- doc.at("script[@src='/core/JSSpec.js']").should exist
42
- doc.at("script[@src='/core/JSSpecExtensions.js']").should exist
43
- doc.at("body/#js_spec_content").should_not be_nil
44
- end
45
- end
46
- end
47
- end
48
- end
@@ -1,20 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../../unit_spec_helper")
2
-
3
- module JsSpec
4
- module Resources
5
- describe SpecFileRunner, "#spec_files" do
6
- attr_reader :absolute_path, :relative_path, :file, :runner
7
-
8
- before do
9
- @absolute_path = "#{spec_root_path}/failing_spec.js"
10
- @relative_path = "/specs/failing_spec.js"
11
- @file = File.new(absolute_path, relative_path)
12
- @runner = SpecFileRunner.new(file)
13
- end
14
-
15
- it "returns the single File to run in an Array" do
16
- runner.spec_files.should == [file]
17
- end
18
- end
19
- end
20
- end
@@ -1,42 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../../unit_spec_helper")
2
-
3
- module JsSpec
4
- module Resources
5
- describe SuiteFinish do
6
- attr_reader :stdout, :suite_finish, :suite
7
- before do
8
- @stdout = StringIO.new
9
- SuiteFinish.const_set(:STDOUT, stdout)
10
- @suite = Suite.new('foobar')
11
- @suite_finish = SuiteFinish.new(suite)
12
- end
13
-
14
- after do
15
- SuiteFinish.__send__(:remove_const, :STDOUT)
16
- end
17
-
18
- describe ".post" do
19
- describe "when the request has no guid" do
20
- it "writes the body of the request to stdout" do
21
- body = "The text in the POST body"
22
- request = Rack::Request.new({'rack.input' => StringIO.new("text=#{body}")})
23
- request.body.string.should == "text=#{body}"
24
- response = Rack::Response.new
25
-
26
- suite_finish.post(request, response)
27
- stdout.string.should == "#{body}\n"
28
- end
29
-
30
- it "returns an empty string" do
31
- body = "The text in the POST body"
32
- request = Rack::Request.new({'rack.input' => StringIO.new("text=#{body}")})
33
- request.body.string.should == "text=#{body}"
34
- response = Rack::Response.new
35
-
36
- suite_finish.post(request, response).should == ""
37
- end
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,44 +0,0 @@
1
- require File.expand_path("#{File.dirname(__FILE__)}/../../unit_spec_helper")
2
-
3
- module JsSpec
4
- module Resources
5
- describe Suite do
6
- attr_reader :stdout
7
- before do
8
- @stdout = StringIO.new
9
- Suite.const_set(:STDOUT, stdout)
10
- end
11
-
12
- after do
13
- Suite.__send__(:remove_const, :STDOUT)
14
- end
15
-
16
- describe ".locate" do
17
- it "when passed an identifier, returns an instance of Suite with the identifier" do
18
- instance = Suite.locate('foobar')
19
- instance.class.should == Suite
20
- instance.id.should == 'foobar'
21
- end
22
- end
23
-
24
- describe "#locate" do
25
- attr_reader :suite
26
- before do
27
- @suite = Suite.new('foobar')
28
- end
29
-
30
- it "when passed 'finish', returns a SuiteFinish that has access to the suite" do
31
- suite_finish = suite.locate('finish')
32
- suite_finish.class.should == SuiteFinish
33
- suite_finish.suite.should == suite
34
- end
35
-
36
- it "when not passed 'finish', raises ArgumentError" do
37
- lambda do
38
- suite.locate('invalid')
39
- end.should raise_error(ArgumentError, "Invalid path: invalid")
40
- end
41
- end
42
- end
43
- end
44
- end