jasmine-multi_json 1.3.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. data/.gitignore +13 -0
  2. data/.rspec +1 -0
  3. data/.travis.yml +58 -0
  4. data/Gemfile +8 -0
  5. data/HOW_TO_TEST.markdown +9 -0
  6. data/MIT.LICENSE +20 -0
  7. data/README.markdown +77 -0
  8. data/RELEASE.markdown +22 -0
  9. data/RELEASE_NOTES.markdown +6 -0
  10. data/Rakefile +62 -0
  11. data/generators/jasmine/jasmine_generator.rb +24 -0
  12. data/generators/jasmine/templates/INSTALL +9 -0
  13. data/generators/jasmine/templates/jasmine-example/SpecRunner.html +54 -0
  14. data/generators/jasmine/templates/jasmine-example/spec/PlayerSpec.js +58 -0
  15. data/generators/jasmine/templates/jasmine-example/spec/SpecHelper.js +9 -0
  16. data/generators/jasmine/templates/jasmine-example/src/Player.js +22 -0
  17. data/generators/jasmine/templates/jasmine-example/src/Song.js +7 -0
  18. data/generators/jasmine/templates/lib/tasks/jasmine.rake +8 -0
  19. data/generators/jasmine/templates/spec/javascripts/support/jasmine-rails.yml +81 -0
  20. data/generators/jasmine/templates/spec/javascripts/support/jasmine.yml +74 -0
  21. data/jasmine.gemspec +74 -0
  22. data/lib/generators/jasmine/examples/USAGE +11 -0
  23. data/lib/generators/jasmine/examples/examples_generator.rb +19 -0
  24. data/lib/generators/jasmine/examples/templates/app/assets/javascripts/jasmine_examples/Player.js +22 -0
  25. data/lib/generators/jasmine/examples/templates/app/assets/javascripts/jasmine_examples/Song.js +7 -0
  26. data/lib/generators/jasmine/examples/templates/spec/javascripts/helpers/SpecHelper.js +9 -0
  27. data/lib/generators/jasmine/examples/templates/spec/javascripts/jasmine_examples/PlayerSpec.js +58 -0
  28. data/lib/generators/jasmine/install/USAGE +11 -0
  29. data/lib/generators/jasmine/install/install_generator.rb +18 -0
  30. data/lib/generators/jasmine/install/templates/spec/javascripts/helpers/.gitkeep +0 -0
  31. data/lib/generators/jasmine/install/templates/spec/javascripts/support/jasmine.yml +76 -0
  32. data/lib/jasmine.rb +31 -0
  33. data/lib/jasmine/application.rb +21 -0
  34. data/lib/jasmine/asset_expander.rb +19 -0
  35. data/lib/jasmine/asset_pipeline_mapper.rb +16 -0
  36. data/lib/jasmine/asset_pipeline_utility.rb +19 -0
  37. data/lib/jasmine/base.rb +54 -0
  38. data/lib/jasmine/command_line_tool.rb +70 -0
  39. data/lib/jasmine/config.rb +85 -0
  40. data/lib/jasmine/configuration.rb +83 -0
  41. data/lib/jasmine/core_configuration.rb +28 -0
  42. data/lib/jasmine/dependencies.rb +59 -0
  43. data/lib/jasmine/firebug/firebug-1.6.2.xpi +0 -0
  44. data/lib/jasmine/firebug/firebug-1.7.0.xpi +0 -0
  45. data/lib/jasmine/firebug/firebug-license.txt +30 -0
  46. data/lib/jasmine/firebug/firebug.rb +30 -0
  47. data/lib/jasmine/javascripts/boot.js +28 -0
  48. data/lib/jasmine/page.rb +11 -0
  49. data/lib/jasmine/path_expander.rb +18 -0
  50. data/lib/jasmine/path_mapper.rb +29 -0
  51. data/lib/jasmine/railtie.rb +21 -0
  52. data/lib/jasmine/results.rb +19 -0
  53. data/lib/jasmine/results_processor.rb +38 -0
  54. data/lib/jasmine/rspec_formatter.rb +92 -0
  55. data/lib/jasmine/run.html.erb +18 -0
  56. data/lib/jasmine/run_specs.rb +36 -0
  57. data/lib/jasmine/runners/http.rb +71 -0
  58. data/lib/jasmine/selenium_driver.rb +41 -0
  59. data/lib/jasmine/server.rb +20 -0
  60. data/lib/jasmine/tasks/jasmine.rake +55 -0
  61. data/lib/jasmine/tasks/jasmine_rails3.rake +1 -0
  62. data/lib/jasmine/version.rb +3 -0
  63. data/lib/jasmine/yaml_config_parser.rb +54 -0
  64. data/lib/rack/jasmine/cache_control.rb +20 -0
  65. data/lib/rack/jasmine/focused_suite.rb +17 -0
  66. data/lib/rack/jasmine/runner.rb +27 -0
  67. data/spec/application_integration_spec.rb +15 -0
  68. data/spec/application_spec.rb +44 -0
  69. data/spec/asset_expander_spec.rb +42 -0
  70. data/spec/asset_pipeline_mapper_spec.rb +19 -0
  71. data/spec/base_spec.rb +14 -0
  72. data/spec/configuration_spec.rb +163 -0
  73. data/spec/dependencies_spec.rb +315 -0
  74. data/spec/fixture/Rakefile +4 -0
  75. data/spec/jasmine_command_line_tool_rakeless_spec.rb +20 -0
  76. data/spec/jasmine_command_line_tool_spec.rb +29 -0
  77. data/spec/jasmine_pojs_spec.rb +47 -0
  78. data/spec/jasmine_rails2_spec.rb +89 -0
  79. data/spec/jasmine_rails3_spec.rb +69 -0
  80. data/spec/jasmine_self_test_spec.rb +29 -0
  81. data/spec/page_spec.rb +23 -0
  82. data/spec/path_expander_spec.rb +96 -0
  83. data/spec/path_mapper_spec.rb +33 -0
  84. data/spec/rack/jasmine/runner_spec.rb +25 -0
  85. data/spec/results_processor_spec.rb +3 -0
  86. data/spec/results_spec.rb +27 -0
  87. data/spec/rspec_formatter_spec.rb +88 -0
  88. data/spec/server_spec.rb +48 -0
  89. data/spec/spec_helper.rb +55 -0
  90. data/spec/yaml_config_parser_spec.rb +182 -0
  91. metadata +310 -0
@@ -0,0 +1,41 @@
1
+ module Jasmine
2
+ class SeleniumDriver
3
+ def initialize(browser, http_address)
4
+ require 'selenium-webdriver'
5
+ selenium_server = if ENV['SELENIUM_SERVER']
6
+ ENV['SELENIUM_SERVER']
7
+ elsif ENV['SELENIUM_SERVER_PORT']
8
+ "http://localhost:#{ENV['SELENIUM_SERVER_PORT']}/wd/hub"
9
+ end
10
+ options = if browser == "firefox" && ENV["JASMINE_FIREBUG"]
11
+ require File.join(File.dirname(__FILE__), "firebug/firebug")
12
+ profile = Selenium::WebDriver::Firefox::Profile.new
13
+ profile.enable_firebug
14
+ {:profile => profile}
15
+ end || {}
16
+ @driver = if selenium_server
17
+ Selenium::WebDriver.for :remote, :url => selenium_server, :desired_capabilities => browser.to_sym
18
+ else
19
+ Selenium::WebDriver.for browser.to_sym, options
20
+ end
21
+ @http_address = http_address
22
+ end
23
+
24
+ def connect
25
+ @driver.navigate.to @http_address
26
+ end
27
+
28
+ def disconnect
29
+ @driver.quit
30
+ end
31
+
32
+ def eval_js(script)
33
+ result = @driver.execute_script(script)
34
+ MultiJson.load("{\"result\":#{result}}", :max_nesting => false)["result"]
35
+ end
36
+
37
+ def json_generate(obj)
38
+ MultiJson.dump(obj)
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,20 @@
1
+ module Jasmine
2
+ class Server
3
+ def initialize(port = 8888, application = nil)
4
+ @port = port
5
+ @application = application
6
+ end
7
+
8
+ def start
9
+ if Jasmine::Dependencies.legacy_rack?
10
+ handler = Rack::Handler.get('webrick')
11
+ handler.run(@application, :Port => @port, :AccessLog => [])
12
+ else
13
+ server = Rack::Server.new(:Port => @port, :AccessLog => [])
14
+ # workaround for Rack bug, when Rack > 1.2.1 is released Rack::Server.start(:app => Jasmine.app(self)) will work
15
+ server.instance_variable_set(:@app, @application)
16
+ server.start
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,55 @@
1
+ namespace :jasmine do
2
+ task :require do
3
+ require 'jasmine'
4
+ end
5
+
6
+ task :require_json do
7
+ begin
8
+ require 'multi_json'
9
+ rescue LoadError
10
+ puts "You must have a JSON library installed to run jasmine:ci. Try \"gem install multi_json\""
11
+ exit
12
+ end
13
+ end
14
+
15
+ desc "Run continuous integration tests"
16
+ task :ci => ["jasmine:require_json", "jasmine:require"] do
17
+ if Jasmine::Dependencies.rspec2?
18
+ require "rspec"
19
+ require "rspec/core/rake_task"
20
+ else
21
+ require "spec"
22
+ require 'spec/rake/spectask'
23
+ end
24
+
25
+ if Jasmine::Dependencies.rspec2?
26
+ RSpec::Core::RakeTask.new(:jasmine_continuous_integration_runner) do |t|
27
+ t.rspec_opts = ["--colour", "--format", ENV['JASMINE_SPEC_FORMAT'] || "progress"]
28
+ t.verbose = true
29
+ if Jasmine::Dependencies.rails_3_asset_pipeline?
30
+ t.rspec_opts += ["-r #{File.expand_path(File.join(::Rails.root, 'config', 'environment'))}"]
31
+ end
32
+ t.pattern = [Jasmine.runner_filepath]
33
+ end
34
+ else
35
+ Spec::Rake::SpecTask.new(:jasmine_continuous_integration_runner) do |t|
36
+ t.spec_opts = ["--color", "--format", ENV['JASMINE_SPEC_FORMAT'] || "specdoc"]
37
+ t.verbose = true
38
+ t.spec_files = [Jasmine.runner_filepath]
39
+ end
40
+ end
41
+ Rake::Task["jasmine_continuous_integration_runner"].invoke
42
+ end
43
+
44
+ task :server => "jasmine:require" do
45
+ port = ENV['JASMINE_PORT'] || 8888
46
+ puts "your tests are here:"
47
+ puts " http://localhost:#{port}/"
48
+ Jasmine.load_configuration_from_yaml
49
+ app = Jasmine::Application.app(Jasmine.config)
50
+ Jasmine::Server.new(port, app).start
51
+ end
52
+ end
53
+
54
+ desc "Run specs via server"
55
+ task :jasmine => ['jasmine:server']
@@ -0,0 +1 @@
1
+ task "jasmine:require" => [:environment]
@@ -0,0 +1,3 @@
1
+ module Jasmine
2
+ VERSION = "1.3.1.1"
3
+ end
@@ -0,0 +1,54 @@
1
+ module Jasmine
2
+ class YamlConfigParser
3
+ def initialize(path, pwd, path_expander = lambda {}, yaml_loader = lambda {})
4
+ @path = path
5
+ @path_expander = path_expander
6
+ @pwd = pwd
7
+ @yaml_loader = yaml_loader
8
+ end
9
+
10
+ def src_dir
11
+ return @pwd unless loaded_yaml['src_dir']
12
+ File.join(@pwd, loaded_yaml['src_dir'])
13
+ end
14
+
15
+ def spec_dir
16
+ return File.join(@pwd, 'spec', 'javascripts') unless loaded_yaml['spec_dir']
17
+ File.join(@pwd, loaded_yaml['spec_dir'])
18
+ end
19
+
20
+ def jasmine_dir
21
+ return nil unless loaded_yaml['jasmine_dir']
22
+ File.join(@pwd, loaded_yaml['jasmine_dir'])
23
+ end
24
+
25
+ def src_files
26
+ @path_expander.call(src_dir, loaded_yaml['src_files'] || [])
27
+ end
28
+
29
+ def jasmine_files
30
+ @path_expander.call(jasmine_dir, loaded_yaml['jasmine_files'] || [])
31
+ end
32
+
33
+ def jasmine_css_files
34
+ @path_expander.call(jasmine_dir, loaded_yaml['jasmine_css_files'] || [])
35
+ end
36
+
37
+ def spec_files
38
+ @path_expander.call(spec_dir, loaded_yaml['spec_files'] || [])
39
+ end
40
+
41
+ def helpers
42
+ @path_expander.call(spec_dir, loaded_yaml['helpers'] || [])
43
+ end
44
+
45
+ def css_files
46
+ @path_expander.call(src_dir, loaded_yaml['stylesheets'] || [])
47
+ end
48
+
49
+ private
50
+ def loaded_yaml
51
+ @yaml_loader.call(@path)
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,20 @@
1
+ module Rack
2
+ module Jasmine
3
+
4
+ class CacheControl
5
+ def initialize(app)
6
+ @app, @content_type = app
7
+ end
8
+
9
+ def call(env)
10
+ status, headers, body = @app.call(env)
11
+ headers = Rack::Utils::HeaderHash.new(headers)
12
+ headers['Cache-Control'] ||= "max-age=0, private, must-revalidate"
13
+ headers['Pragma'] ||= "no-cache"
14
+ [status, headers, body]
15
+ end
16
+ end
17
+
18
+ end
19
+ end
20
+
@@ -0,0 +1,17 @@
1
+ module Rack
2
+ module Jasmine
3
+
4
+ class FocusedSuite
5
+ def initialize(runner_config)
6
+ @runner_config = runner_config
7
+ end
8
+
9
+ def call(env)
10
+ run_adapter = Rack::Jasmine::RunAdapter.new(@runner_config)
11
+ run_adapter.run(env["PATH_INFO"])
12
+ end
13
+ end
14
+
15
+ end
16
+ end
17
+
@@ -0,0 +1,27 @@
1
+ module Rack
2
+ module Jasmine
3
+
4
+ class Runner
5
+ def initialize(page)
6
+ @page = page
7
+ end
8
+
9
+ def call(env)
10
+ @path = env["PATH_INFO"]
11
+ return not_found if @path != "/"
12
+ [
13
+ 200,
14
+ { 'Content-Type' => 'text/html'},
15
+ [@page.render]
16
+ ]
17
+ end
18
+
19
+ def not_found
20
+ [404, {"Content-Type" => "text/plain",
21
+ "X-Cascade" => "pass"},
22
+ ["File not found: #{@path}\n"]]
23
+ end
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Jasmine::Application" do
4
+
5
+ it "includes no-cache headers for specs" do
6
+ pending
7
+ get "/__spec__/example_spec.js"
8
+ last_response.headers.should have_key("Cache-Control")
9
+ last_response.headers["Cache-Control"].should == "max-age=0, private, must-revalidate"
10
+ last_response.headers['Pragma'].each do |key|
11
+ last_response.headers[key].should == 'no-cache'
12
+ end
13
+ end
14
+
15
+ end
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ #Rspec 1 doesn't correctly pass blocks to stubs, so skip (covered by integration tests)
4
+ #https://groups.google.com/forum/?fromgroups=#!topic/rspec/XT7paH2asCo
5
+
6
+ if Jasmine::Dependencies.rspec2?
7
+ describe "Jasmine::Application" do
8
+ it "should map paths provided by the config" do
9
+ handler1 = double(:handler1)
10
+ handler2 = double(:handler2)
11
+ app1 = double(:app1)
12
+ app2 = double(:app2)
13
+ rack_path_map = {"/foo" => lambda { handler1 }, "/bar" => lambda { handler2 }}
14
+ config = double(:config, :rack_path_map => rack_path_map, :rack_apps => [])
15
+ builder = double("Rack::Builder.new")
16
+ #Rack::Builder instance evals, so builder.run is invalid syntax,
17
+ #this is the only way to stub out the 'run' dsl it gives to the block.
18
+ Jasmine::Application.stub(:run).with(handler1).and_return(app1)
19
+ Jasmine::Application.stub(:run).with(handler2).and_return(app2)
20
+
21
+ builder.should_receive(:map).twice do |path, &app|
22
+ if path == '/foo'
23
+ app.call.should == app1
24
+ elsif path == '/bar'
25
+ app.call.should == app2
26
+ else
27
+ raise "Unexpected path passed"
28
+ end
29
+ end
30
+
31
+ Jasmine::Application.app(config, builder).should == builder
32
+ end
33
+ it "should run rack apps provided by the config" do
34
+ app1 = double(:app1)
35
+ app2 = double(:app2)
36
+ block = lambda { "foo" }
37
+ config = double(:config, :rack_path_map => [], :rack_apps => [[app1, nil], [app2, block]])
38
+ builder = double("Rack::Builder.new")
39
+ builder.should_receive(:use).with(app1)
40
+ builder.should_receive(:use).with(app2, &block)
41
+ Jasmine::Application.app(config, builder).should == builder
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe Jasmine::AssetExpander do
4
+ it "expands asset files" do
5
+ bundled_asset = double(:bundled_asset,
6
+ :to_a => ['asset1', 'asset2'],
7
+ :pathname => double(:pathname, :to_s => '/some_src_dir/asset_file'))
8
+
9
+ bundled_asset_getter = lambda do |filepath, ext|
10
+ if filepath == 'asset_file' && ext == 'js'
11
+ bundled_asset
12
+ end
13
+ end
14
+
15
+ asset_path_getter = lambda do |asset|
16
+ if asset == 'asset1'
17
+ 'asset1_path'
18
+ elsif asset == 'asset2'
19
+ 'asset2_path'
20
+ end
21
+ end
22
+
23
+ expander = Jasmine::AssetExpander.new(bundled_asset_getter, asset_path_getter)
24
+ expanded_assets = expander.expand('/some_src_dir', 'asset_file')
25
+ expanded_assets.should == ['/asset_file?body=true',
26
+ '/asset1_path?body=true',
27
+ '/asset2_path?body=true']
28
+ end
29
+
30
+ it "return nil if no bundled asset is found" do
31
+ bundled_asset = nil
32
+ bundled_asset_getter = lambda do |filepath, ext|
33
+ if filepath == 'asset_file' && ext == 'js'
34
+ bundled_asset
35
+ end
36
+ end
37
+
38
+ expander = Jasmine::AssetExpander.new(bundled_asset_getter, lambda {})
39
+ expanded_assets = expander.expand('/some_src_dir', 'asset_file')
40
+ expanded_assets.should be_nil
41
+ end
42
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe Jasmine::AssetPipelineMapper do
4
+ it "expands asset paths if available" do
5
+ expander = lambda do |dir, path|
6
+ if dir == "/some_location/" && path == 'asset1'
7
+ ['asset1', 'asset2']
8
+ elsif dir == "/some_location/" && path == 'asset2'
9
+ ['asset1', 'asset3']
10
+ end
11
+
12
+ end
13
+ config = double(:config, :src_dir => "/some_location/")
14
+
15
+ mapper = Jasmine::AssetPipelineMapper.new(config, expander)
16
+
17
+ mapper.map_src_paths(['asset1', 'asset2', 'asset4']).should == ['asset1', 'asset2', 'asset3', 'asset4']
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe Jasmine do
4
+ it "should provide the root path" do
5
+ File.stub(:dirname).and_return('lib/jasmine')
6
+ File.should_receive(:expand_path) { |path| path }
7
+ Jasmine.root.should == 'lib/jasmine'
8
+ end
9
+ it "should append passed file paths" do
10
+ File.stub(:dirname).and_return('lib/jasmine')
11
+ File.should_receive(:expand_path) { |path| path }
12
+ Jasmine.root('subdir1', 'subdir2').should == File.join('lib/jasmine', 'subdir1', 'subdir2')
13
+ end
14
+ end
@@ -0,0 +1,163 @@
1
+ require 'spec_helper'
2
+
3
+ describe Jasmine::Configuration do
4
+ let(:test_mapper1) do
5
+ Class.new do
6
+ def initialize(config)
7
+ @config = config
8
+ end
9
+ def map_src_paths(paths)
10
+ paths.map { |f| "mapped_src/#{f}" }
11
+ end
12
+ def map_jasmine_paths(paths)
13
+ paths.map { |f| "mapped_jasmine/#{f}" }
14
+ end
15
+ def map_spec_paths(paths)
16
+ paths.map { |f| "mapped_spec/#{f}" }
17
+ end
18
+ def map_boot_paths(paths)
19
+ paths.map { |f| "mapped_boot/#{f}" }
20
+ end
21
+ end
22
+ end
23
+ let(:test_mapper2) do
24
+ Class.new do
25
+ def initialize(config)
26
+ @config = config
27
+ end
28
+ def map_src_paths(paths)
29
+ paths.map { |f| "#{f}/src" }
30
+ end
31
+ def map_jasmine_paths(paths)
32
+ paths.map { |f| "#{f}/jasmine" }
33
+ end
34
+ def map_spec_paths(paths)
35
+ paths.map { |f| "#{f}/spec" }
36
+ end
37
+ def map_boot_paths(paths)
38
+ paths.map { |f| "#{f}/boot" }
39
+ end
40
+ end
41
+ end
42
+ let(:test_mapper3) do
43
+ Class.new do
44
+ def initialize(config)
45
+ @config = config
46
+ end
47
+ end
48
+ end
49
+
50
+ describe "returning css files" do
51
+ it "returns mapped jasmine_css_files + css_files" do
52
+ config = Jasmine::Configuration.new()
53
+ config.add_path_mapper(lambda { |c| test_mapper1.new(c) })
54
+ config.add_path_mapper(lambda { |c| test_mapper2.new(c) })
55
+ config.add_path_mapper(lambda { |c| test_mapper3.new(c) })
56
+ config.css_files.should == []
57
+ config.jasmine_css_files = lambda { ["jasmine_css"] }
58
+ config.css_files = lambda { ["css"] }
59
+ config.css_files.should == ['mapped_jasmine/jasmine_css/jasmine', 'mapped_src/css/src']
60
+ end
61
+ end
62
+
63
+ describe "returning javascript files" do
64
+ it "returns the jasmine core files, then srcs, then specs, then boot" do
65
+ config = Jasmine::Configuration.new()
66
+ config.add_path_mapper(lambda { |c| test_mapper1.new(c) })
67
+ config.add_path_mapper(lambda { |c| test_mapper2.new(c) })
68
+ config.add_path_mapper(lambda { |c| test_mapper3.new(c) })
69
+ config.js_files.should == []
70
+ config.jasmine_files = lambda { ['jasmine'] }
71
+ config.src_files = lambda { ['src'] }
72
+ config.boot_files = lambda { ['boot'] }
73
+ config.spec_files = lambda { ['spec'] }
74
+ config.js_files.should == [
75
+ 'mapped_jasmine/jasmine/jasmine',
76
+ 'mapped_src/src/src',
77
+ 'mapped_spec/spec/spec',
78
+ 'mapped_boot/boot/boot',
79
+ ]
80
+ end
81
+ end
82
+
83
+ describe "returning rack map" do
84
+ it "permits arbitrary rack app path mapping" do
85
+ config = Jasmine::Configuration.new()
86
+ result = double
87
+ config.add_rack_path('some/path', lambda { result })
88
+ map = config.rack_path_map
89
+ map['some/path'].should be
90
+ map['some/path'].call.should == result
91
+ end
92
+
93
+ end
94
+
95
+ describe "rack apps" do
96
+ it "permits the addition of arbitary rack apps" do
97
+ config = Jasmine::Configuration.new()
98
+ app = double
99
+ config.add_rack_app(app)
100
+ config.rack_apps.should == [[app, nil]]
101
+ end
102
+ it "permits the addition of arbitary rack apps with arbitrary config" do
103
+ config = Jasmine::Configuration.new()
104
+ app = double
105
+ block = lambda { "foo" }
106
+ config.add_rack_app(app, &block)
107
+ config.rack_apps.should == [[app, block]]
108
+ end
109
+ end
110
+
111
+ describe "port" do
112
+ it "returns new port and caches return value" do
113
+ config = Jasmine::Configuration.new()
114
+ Jasmine.stub(:find_unused_port).and_return('1234')
115
+ config.port.should == '1234'
116
+ Jasmine.stub(:find_unused_port).and_return('4321')
117
+ config.port.should == '1234'
118
+ end
119
+ it "returns port if configured" do
120
+ config = Jasmine::Configuration.new()
121
+ config.port = '5678'
122
+ Jasmine.stub(:find_unused_port).and_return('1234')
123
+ config.port.should == '5678'
124
+ end
125
+ end
126
+
127
+ describe "browser" do
128
+ it "should default to firefox" do
129
+ Jasmine::Configuration.new().browser.should == 'firefox'
130
+ end
131
+
132
+ it "returns browser if set" do
133
+ config = Jasmine::Configuration.new()
134
+ config.browser = 'foo'
135
+ config.browser.should == 'foo'
136
+ end
137
+ end
138
+
139
+ describe "result_batch_size" do
140
+ it "should default to 50" do
141
+ Jasmine::Configuration.new().result_batch_size.should == 50
142
+ end
143
+
144
+ it "returns result_batch_size if set" do
145
+ config = Jasmine::Configuration.new()
146
+ config.result_batch_size = 25
147
+ config.result_batch_size.should == 25
148
+ end
149
+ end
150
+
151
+ describe "host" do
152
+ it "should default to localhost" do
153
+ Jasmine::Configuration.new().host.should == 'http://localhost'
154
+ end
155
+
156
+ it "returns host if set" do
157
+ config = Jasmine::Configuration.new()
158
+ config.host = 'foo'
159
+ config.host.should == 'foo'
160
+ end
161
+ end
162
+ end
163
+