jasmine 2.0.0.rc2 → 2.0.0.rc3

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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +9 -11
  3. data/Gemfile +4 -2
  4. data/HOW_TO_TEST.markdown +1 -1
  5. data/README.markdown +23 -14
  6. data/RELEASE.markdown +6 -13
  7. data/Rakefile +21 -23
  8. data/jasmine.gemspec +9 -16
  9. data/{generators/jasmine/templates/jasmine-example/spec → lib/generators/jasmine/examples/templates/spec/javascripts/helpers/jasmine_examples}/SpecHelper.js +0 -0
  10. data/lib/generators/jasmine/examples/templates/spec/javascripts/jasmine_examples/PlayerSpec.js +1 -1
  11. data/lib/generators/jasmine/install/templates/spec/javascripts/support/jasmine.yml +15 -2
  12. data/lib/generators/jasmine/install/templates/spec/javascripts/support/jasmine_helper.rb +2 -2
  13. data/lib/jasmine.rb +5 -7
  14. data/lib/jasmine/asset_bundle.rb +9 -10
  15. data/lib/jasmine/command_line_install.txt +13 -0
  16. data/lib/jasmine/command_line_tool.rb +100 -58
  17. data/lib/jasmine/config.rb +25 -13
  18. data/lib/jasmine/configuration.rb +21 -16
  19. data/lib/jasmine/dependencies.rb +1 -1
  20. data/lib/jasmine/formatters/console.rb +21 -13
  21. data/lib/jasmine/formatters/exit_code.rb +21 -0
  22. data/lib/jasmine/formatters/multi.rb +25 -0
  23. data/lib/jasmine/result.rb +46 -0
  24. data/lib/jasmine/run.html.erb +3 -1
  25. data/lib/jasmine/runners/phantom_jasmine_run.js +54 -0
  26. data/lib/jasmine/runners/phantom_js.rb +29 -0
  27. data/lib/jasmine/tasks/jasmine.rake +42 -21
  28. data/lib/jasmine/version.rb +1 -1
  29. data/spec/configuration_spec.rb +34 -72
  30. data/spec/fixture/coffee_spec.coffee +3 -0
  31. data/spec/fixture/failing_runner.rb +9 -0
  32. data/spec/fixture/failing_test.js +5 -0
  33. data/spec/fixture/large_test_suite_spec.js +20 -0
  34. data/spec/jasmine_command_line_tool_spec.rb +94 -52
  35. data/spec/jasmine_pojs_spec.rb +37 -21
  36. data/spec/jasmine_rails_spec.rb +89 -49
  37. data/spec/lib/jasmine/formatters/console_spec.rb +50 -35
  38. data/spec/lib/jasmine/formatters/multi_spec.rb +17 -0
  39. data/spec/performance/phantom_js_runner_performance_spec.rb +23 -0
  40. data/spec/result_spec.rb +34 -0
  41. data/spec/spec_helper.rb +40 -16
  42. metadata +34 -84
  43. data/generators/jasmine/jasmine_generator.rb +0 -25
  44. data/generators/jasmine/templates/INSTALL +0 -9
  45. data/generators/jasmine/templates/jasmine-example/spec/PlayerSpec.js +0 -58
  46. data/generators/jasmine/templates/jasmine-example/src/Player.js +0 -22
  47. data/generators/jasmine/templates/jasmine-example/src/Song.js +0 -7
  48. data/generators/jasmine/templates/lib/tasks/jasmine.rake +0 -8
  49. data/generators/jasmine/templates/spec/javascripts/support/jasmine-rails.yml +0 -81
  50. data/generators/jasmine/templates/spec/javascripts/support/jasmine.yml +0 -88
  51. data/generators/jasmine/templates/spec/javascripts/support/jasmine_helper.rb +0 -12
  52. data/lib/generators/jasmine/examples/templates/spec/javascripts/helpers/SpecHelper.js +0 -15
  53. data/lib/jasmine/firebug/firebug-1.6.2.xpi +0 -0
  54. data/lib/jasmine/firebug/firebug-1.7.0.xpi +0 -0
  55. data/lib/jasmine/firebug/firebug-license.txt +0 -30
  56. data/lib/jasmine/firebug/firebug.rb +0 -30
  57. data/lib/jasmine/formatters/base.rb +0 -9
  58. data/lib/jasmine/formatters/junit_xml.rb +0 -47
  59. data/lib/jasmine/reporters/api_reporter.rb +0 -38
  60. data/lib/jasmine/results.rb +0 -38
  61. data/lib/jasmine/results_processor.rb +0 -38
  62. data/lib/jasmine/run_specs.rb +0 -33
  63. data/lib/jasmine/runners/http.rb +0 -33
  64. data/lib/jasmine/selenium_driver.rb +0 -45
  65. data/spec/asset_expander_spec.rb +0 -13
  66. data/spec/asset_pipeline_mapper_spec.rb +0 -19
  67. data/spec/jasmine_command_line_tool_rakeless_spec.rb +0 -20
  68. data/spec/lib/jasmine/formatters/base_spec.rb +0 -9
  69. data/spec/lib/jasmine/formatters/junit_xml_spec.rb +0 -55
  70. data/spec/lib/jasmine/reporters/api_reporter_spec.rb +0 -53
  71. data/spec/lib/jasmine/runners/http_spec.rb +0 -21
  72. data/spec/results_processor_spec.rb +0 -3
  73. data/spec/results_spec.rb +0 -69
  74. data/spec/support/fake_selenium_driver.rb +0 -35
@@ -1,38 +0,0 @@
1
- module Jasmine
2
- module Reporters
3
- #TODO: where does this live?
4
- class ApiReporter < Struct.new(:driver, :batch_size)
5
- STARTED_JS = "return jsApiReporter && jsApiReporter.started"
6
- FINISHED_JS = "return jsApiReporter && jsApiReporter.finished"
7
-
8
- def started?
9
- driver.eval_js STARTED_JS
10
- end
11
-
12
- def finished?
13
- driver.eval_js FINISHED_JS
14
- end
15
-
16
- def results
17
- index = 0
18
- spec_results = []
19
-
20
- loop do
21
- slice = get_results_slice(index)
22
- spec_results << slice
23
- index += batch_size
24
-
25
- break if slice.size < batch_size
26
- end
27
-
28
- spec_results.flatten
29
- end
30
-
31
- private
32
-
33
- def get_results_slice(index)
34
- driver.eval_js("return jsApiReporter.specResults(#{index}, #{batch_size})")
35
- end
36
- end
37
- end
38
- end
@@ -1,38 +0,0 @@
1
- module Jasmine
2
- class Results
3
- attr_reader :results
4
-
5
- def initialize(raw_results)
6
- @results = raw_results.map {|raw| Result.new(raw) }
7
- end
8
-
9
- def failures
10
- @results.select { |result|
11
- result.status == "failed"
12
- }
13
- end
14
-
15
- def pending_specs
16
- @results.select { |result|
17
- result.status == "pending"
18
- }
19
- end
20
-
21
- def size
22
- @results.size
23
- end
24
-
25
- class Result < OpenStruct
26
- def full_name
27
- fullName
28
- end
29
-
30
- def failed_expectations
31
- failedExpectations.map { |e|
32
- short_stack = e["stack"].split("\n").slice(0, 7).join("\n")
33
- OpenStruct.new(:message => e["message"], :stack => short_stack)
34
- }
35
- end
36
- end
37
- end
38
- end
@@ -1,38 +0,0 @@
1
- module Jasmine
2
- class ResultsProcessor
3
-
4
- def initialize(config)
5
- @config = config
6
- end
7
-
8
- def process(results_hash, suites_hash)
9
- Jasmine::Results.new(results_hash, suites_hash, example_locations)
10
- end
11
-
12
- def example_locations
13
- # example_locations = {}
14
- # example_name_parts = []
15
- # previous_indent_level = 0
16
- # @config.spec_files_full_paths.each do |filename|
17
- # line_number = 1
18
- # File.open(filename, "r") do |file|
19
- # file.readlines.each do |line|
20
- # match = /^(\s*)(describe|it)\s*\(\s*["'](.*)["']\s*,\s*function/.match(line)
21
- # if (match)
22
- # indent_level = match[1].length / 2
23
- # example_name = match[3]
24
- # example_name_parts[indent_level] = example_name
25
-
26
- # full_example_name = example_name_parts.slice(0, indent_level + 1).join(" ")
27
- # example_locations[full_example_name] = "#{filename}:#{line_number}: in `it'"
28
- # end
29
- # line_number += 1
30
- # end
31
- # end
32
- # end
33
- # example_locations
34
- {}
35
- end
36
-
37
- end
38
- end
@@ -1,33 +0,0 @@
1
- $:.unshift(ENV['JASMINE_GEM_PATH']) if ENV['JASMINE_GEM_PATH'] # for gem testing purposes
2
-
3
- require 'rubygems'
4
- require 'jasmine'
5
- require 'rspec'
6
-
7
- Jasmine.load_configuration_from_yaml
8
-
9
- config = Jasmine.config
10
-
11
- server = Jasmine::Server.new(config.port, Jasmine::Application.app(config))
12
- driver = Jasmine::SeleniumDriver.new(config.browser, "#{config.host}:#{config.port}/")
13
- t = Thread.new do
14
- begin
15
- server.start
16
- rescue ChildProcess::TimeoutError
17
- end
18
- # # ignore bad exits
19
- end
20
- t.abort_on_exception = true
21
- Jasmine::wait_for_listener(config.port, 'jasmine server')
22
- puts 'jasmine server started.'
23
-
24
- reporter = Jasmine::Reporters::ApiReporter.new(driver, config.result_batch_size)
25
- raw_results = Jasmine::Runners::HTTP.new(driver, reporter).run
26
- results = Jasmine::Results.new(raw_results)
27
-
28
- config.formatters.each do |formatter_class|
29
- formatter = formatter_class.new(results)
30
- formatter.format()
31
- end
32
-
33
- exit results.failures.size
@@ -1,33 +0,0 @@
1
- module Jasmine
2
- module Runners
3
- class HTTP < Struct.new(:driver, :reporter)
4
- def run
5
- driver.connect
6
- ensure_connection_established
7
- wait_for_suites_to_finish_running
8
-
9
- results = reporter.results
10
-
11
- driver.disconnect
12
- results
13
- end
14
-
15
- private
16
-
17
- def ensure_connection_established
18
- started = Time.now
19
- until reporter.started? do
20
- raise "couldn't connect to Jasmine after 60 seconds" if (started + 60 < Time.now)
21
- sleep 0.1
22
- end
23
- end
24
-
25
- def wait_for_suites_to_finish_running
26
- puts "Waiting for suite to finish in browser ..."
27
- until reporter.finished? do
28
- sleep 0.1
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,45 +0,0 @@
1
- module Jasmine
2
- require 'json'
3
- class SeleniumDriver
4
- def initialize(browser, http_address)
5
- require 'selenium-webdriver'
6
-
7
- selenium_server = if Jasmine.config.selenium_server
8
- Jasmine.config.selenium_server
9
- elsif Jasmine.config.selenium_server_port
10
- "http://localhost:#{Jasmine.config.selenium_server_port}/wd/hub"
11
- end
12
- options = if browser == 'firefox-firebug'
13
- require File.join(File.dirname(__FILE__), 'firebug/firebug')
14
- (profile = Selenium::WebDriver::Firefox::Profile.new)
15
- profile.enable_firebug
16
- {:profile => profile}
17
- end || {}
18
- @driver = if Jasmine.config.webdriver
19
- Jasmine.config.webdriver
20
- elsif selenium_server
21
- Selenium::WebDriver.for :remote, :url => selenium_server, :desired_capabilities => browser.to_sym
22
- else
23
- Selenium::WebDriver.for browser.to_sym, options
24
- end
25
- @http_address = http_address
26
- end
27
-
28
- def connect
29
- @driver.navigate.to @http_address
30
- end
31
-
32
- def disconnect
33
- @driver.quit
34
- end
35
-
36
- def eval_js(script)
37
- result = @driver.execute_script(script)
38
- JSON.parse("{\"result\":#{result.to_json}}", :max_nesting => false)['result']
39
- end
40
-
41
- def json_generate(obj)
42
- JSON.generate(obj)
43
- end
44
- end
45
- end
@@ -1,13 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Jasmine::AssetExpander do
4
- it "expands asset files" do
5
- bundled_asset = double(:bundled_asset, :assets => ['asset1_path', 'asset2_path'])
6
- bundled_asset_factory = double(:bundled_asset_factory)
7
- bundled_asset_factory.should_receive(:new).with('asset_file').and_return(bundled_asset)
8
- expander = Jasmine::AssetExpander.new(bundled_asset_factory)
9
- expanded_assets = expander.expand('/some_src_dir', 'asset_file')
10
- expanded_assets.should == ['/asset1_path?body=true',
11
- '/asset2_path?body=true']
12
- end
13
- end
@@ -1,19 +0,0 @@
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
@@ -1,20 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "Jasmine command line tool" do
4
- context "when rake has not been required yet" do
5
- before :each do
6
- temp_dir_before
7
- Dir::chdir @tmp
8
- end
9
-
10
- after :each do
11
- temp_dir_after
12
- end
13
-
14
- it "should append to an existing Rakefile" do
15
- FileUtils.cp("#{@old_dir}/spec/fixture/Rakefile", @tmp)
16
- output = capture_stdout { Jasmine::CommandLineTool.new.process ["init"] }
17
- output.should =~ /Jasmine has been installed with example specs./
18
- end
19
- end
20
- end
@@ -1,9 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Jasmine::Formatters::BaseFormatter do
4
- it 'raises an error on summary to teach people a lesson' do
5
- expect {
6
- Jasmine::Formatters::BaseFormatter.new.format
7
- }.to(raise_error(NotImplementedError))
8
- end
9
- end
@@ -1,55 +0,0 @@
1
- require 'spec_helper'
2
- require 'nokogiri'
3
-
4
- describe Jasmine::Formatters::JUnitXml do
5
- describe '#summary' do
6
- describe 'when the full suite passes' do
7
- it 'shows the spec counts' do
8
- results = OpenStruct.new(:size => 1, :failures => [], :pending_specs => [],
9
- :results => [passing_result(fullName: 'Passing test', description: 'test')])
10
- subject = Jasmine::Formatters::JUnitXml.new(results)
11
-
12
- xml = Nokogiri::XML(subject.summary)
13
-
14
- testsuite = xml.xpath('/testsuites/testsuite').first
15
- testsuite['tests'].should == '1'
16
- testsuite['failures'].should == '0'
17
- testsuite['name'].should == 'Passing'
18
-
19
- xml.xpath('//testcase').size.should == 1
20
- xml.xpath('//testcase').first['name'].should == 'test'
21
- end
22
- end
23
-
24
- describe 'when there are failures' do
25
- it 'shows the spec counts' do
26
- results = OpenStruct.new(:size => 2, :failures => [failing_result], :pending_specs=> [],
27
- :results => [passing_result, failing_result])
28
- subject = Jasmine::Formatters::JUnitXml.new(results)
29
-
30
- xml = Nokogiri::XML(subject.summary)
31
-
32
- testsuite = xml.xpath('/testsuites/testsuite').first
33
- testsuite['tests'].should == '1'
34
- testsuite['failures'].should == '0'
35
-
36
- testsuite = xml.xpath('/testsuites/testsuite')[1]
37
- testsuite['tests'].should == '1'
38
- testsuite['failures'].should == '1'
39
-
40
- xml.xpath('//testcase').size.should == 2
41
- xml.xpath('//testcase/failure').size.should == 1
42
- xml.xpath('//testcase/failure').first['message'].should == 'a failure message'
43
- xml.xpath('//testcase/failure').first.content.should == 'a stack trace'
44
- end
45
- end
46
- end
47
-
48
- def failing_result(options = {})
49
- Jasmine::Results::Result.new(failing_raw_result.merge(options))
50
- end
51
-
52
- def passing_result(options = {})
53
- Jasmine::Results::Result.new(passing_raw_result.merge(options))
54
- end
55
- end
@@ -1,53 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Jasmine::Reporters::ApiReporter do
4
- let(:driver) { FakeSeleniumDriver.new }
5
- let(:batch_size) { 3 }
6
- subject { Jasmine::Reporters::ApiReporter.new(driver, batch_size) }
7
-
8
- describe '#started?' do
9
- it "reflects that Jasmine has started" do
10
- driver.should_receive(:eval_js).with(Jasmine::Reporters::ApiReporter::STARTED_JS).and_return(false)
11
-
12
- driver.start
13
-
14
- subject.should_not be_started
15
-
16
- driver.should_receive(:eval_js).with(Jasmine::Reporters::ApiReporter::STARTED_JS).and_return(true)
17
-
18
- driver.start
19
-
20
- subject.should be_started
21
- end
22
- end
23
-
24
- describe '#finished?' do
25
- it "reflects that Jasmine has finished" do
26
- driver.should_receive(:eval_js).with(Jasmine::Reporters::ApiReporter::FINISHED_JS).and_return(false)
27
-
28
- subject.should_not be_finished
29
-
30
- driver.should_receive(:eval_js).with(Jasmine::Reporters::ApiReporter::FINISHED_JS).and_return(true)
31
-
32
- driver.finish
33
-
34
- subject.should be_finished
35
- end
36
- end
37
-
38
- describe "#results" do
39
- it "gets all of the results" do
40
- driver.should_receive(:eval_js).with("return jsApiReporter.specResults(0, 3)").and_return(driver.results.slice(0, 3))
41
- driver.should_receive(:eval_js).with("return jsApiReporter.specResults(3, 3)").and_return(driver.results.slice(3, 4))
42
-
43
- results = subject.results
44
-
45
- results.size.should == 4
46
- results[0]['id'].should == 1
47
- results[1]['id'].should == 2
48
- results[2]['id'].should == 3
49
- results[3]['id'].should == 4
50
- end
51
- end
52
-
53
- end
@@ -1,21 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Jasmine::Runners::HTTP do
4
- let(:driver) { FakeSeleniumDriver.new }
5
- let(:batch_size) { 3 }
6
- let(:reporter) { Jasmine::Reporters::ApiReporter.new(driver, batch_size) }
7
- subject { Jasmine::Runners::HTTP.new(driver, reporter) }
8
-
9
- describe '#run' do
10
- it "gets the results from the Jasmine HTML page" do
11
- driver.should_receive(:connect)
12
- driver.should_receive(:disconnect)
13
- reporter.should_receive(:results).and_return(driver.results)
14
- reporter.stub(:started?).and_return(true)
15
- reporter.stub(:finished?).and_return(true)
16
-
17
- results = subject.run
18
- results.size.should == 4
19
- end
20
- end
21
- end
@@ -1,3 +0,0 @@
1
- describe Jasmine::ResultsProcessor do
2
-
3
- end
data/spec/results_spec.rb DELETED
@@ -1,69 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Jasmine::Results do
4
- describe "#failures" do
5
- it "should report all the failing spec" do
6
- subject = Jasmine::Results.new([failing_raw_result, failing_raw_result])
7
- subject.failures.size.should == 2
8
-
9
- subject = Jasmine::Results.new([failing_raw_result, passing_raw_result])
10
- subject.failures.size.should == 1
11
- end
12
- end
13
-
14
- describe "#pending_specs" do
15
- it "should report all the pending specs" do
16
- subject = Jasmine::Results.new([pending_raw_result, pending_raw_result])
17
- subject.pending_specs.size.should == 2
18
-
19
- subject = Jasmine::Results.new([pending_raw_result, passing_raw_result])
20
- subject.pending_specs.size.should == 1
21
- end
22
- end
23
-
24
- describe "#size" do
25
- it "should report the spec count" do
26
- subject = Jasmine::Results.new([failing_raw_result, failing_raw_result])
27
- subject.size.should == 2
28
-
29
- subject = Jasmine::Results.new([failing_raw_result])
30
- subject.size.should == 1
31
- end
32
- end
33
-
34
- end
35
-
36
- describe Jasmine::Results::Result do
37
- describe "data accessors" do
38
- it "delegates to raw results" do
39
- result = Jasmine::Results::Result.new("status" => "failed")
40
- result.status.should == "failed"
41
- end
42
-
43
- it "remaps important camelCase names to snake_case" do
44
- result = Jasmine::Results::Result.new(failing_raw_result)
45
- result.full_name.should == "a suite with a failing spec"
46
- end
47
-
48
- it "exposes failed expectations" do
49
- result = Jasmine::Results::Result.new(failing_raw_result)
50
-
51
- expectation = result.failed_expectations[0]
52
- expectation.message.should == "a failure message"
53
- expectation.stack.should == "a stack trace"
54
- end
55
-
56
- it "exposes only the last 7 lines of the stack trace" do
57
- raw_result = failing_raw_result
58
- raw_result["failedExpectations"][0]["stack"] = "1\n2\n3\n4\n5\n6\n7\n8\n9"
59
-
60
- result = Jasmine::Results::Result.new(raw_result)
61
- expectation = result.failed_expectations[0].stack
62
- expectation.should match(/1/)
63
- expectation.should match(/7/)
64
- expectation.should_not match(/8/)
65
- expectation.should_not match(/9/)
66
- end
67
- end
68
- end
69
-