teaspoon-jasmine 2.2.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 (34) hide show
  1. checksums.yaml +7 -0
  2. data/lib/teaspoon-jasmine.rb +4 -0
  3. data/lib/teaspoon/jasmine/assets/jasmine/1.3.1.js +2602 -0
  4. data/lib/teaspoon/jasmine/assets/jasmine/2.0.3.js +2593 -0
  5. data/lib/teaspoon/jasmine/assets/jasmine/2.1.3.js +2908 -0
  6. data/lib/teaspoon/jasmine/assets/jasmine/2.2.0.js +3048 -0
  7. data/lib/teaspoon/jasmine/assets/jasmine/MIT.LICENSE +20 -0
  8. data/lib/teaspoon/jasmine/assets/support/jasmine-jquery-1.7.0.js +720 -0
  9. data/lib/teaspoon/jasmine/assets/support/jasmine-jquery-2.0.0.js +812 -0
  10. data/lib/teaspoon/jasmine/assets/support/jasmine-jquery-2.1.0.js +832 -0
  11. data/lib/teaspoon/jasmine/assets/teaspoon-jasmine1.js +1447 -0
  12. data/lib/teaspoon/jasmine/assets/teaspoon-jasmine2.js +1490 -0
  13. data/lib/teaspoon/jasmine/assets/teaspoon/jasmine1.coffee +10 -0
  14. data/lib/teaspoon/jasmine/assets/teaspoon/jasmine1/fixture.coffee +29 -0
  15. data/lib/teaspoon/jasmine/assets/teaspoon/jasmine1/initialize.coffee +1 -0
  16. data/lib/teaspoon/jasmine/assets/teaspoon/jasmine1/reporters/html.coffee +13 -0
  17. data/lib/teaspoon/jasmine/assets/teaspoon/jasmine1/responder.coffee +23 -0
  18. data/lib/teaspoon/jasmine/assets/teaspoon/jasmine1/runner.coffee +32 -0
  19. data/lib/teaspoon/jasmine/assets/teaspoon/jasmine1/spec.coffee +37 -0
  20. data/lib/teaspoon/jasmine/assets/teaspoon/jasmine1/suite.coffee +8 -0
  21. data/lib/teaspoon/jasmine/assets/teaspoon/jasmine2.coffee +10 -0
  22. data/lib/teaspoon/jasmine/assets/teaspoon/jasmine2/fixture.coffee +19 -0
  23. data/lib/teaspoon/jasmine/assets/teaspoon/jasmine2/initialize.coffee +23 -0
  24. data/lib/teaspoon/jasmine/assets/teaspoon/jasmine2/reporters/console.coffee +18 -0
  25. data/lib/teaspoon/jasmine/assets/teaspoon/jasmine2/reporters/html.coffee +11 -0
  26. data/lib/teaspoon/jasmine/assets/teaspoon/jasmine2/responder.coffee +39 -0
  27. data/lib/teaspoon/jasmine/assets/teaspoon/jasmine2/runner.coffee +26 -0
  28. data/lib/teaspoon/jasmine/assets/teaspoon/jasmine2/spec.coffee +36 -0
  29. data/lib/teaspoon/jasmine/assets/teaspoon/jasmine2/suite.coffee +8 -0
  30. data/lib/teaspoon/jasmine/framework.rb +35 -0
  31. data/lib/teaspoon/jasmine/templates/spec_helper.coffee +32 -0
  32. data/lib/teaspoon/jasmine/templates/spec_helper.js +32 -0
  33. data/lib/teaspoon/jasmine/version.rb +5 -0
  34. metadata +92 -0
@@ -0,0 +1,10 @@
1
+ #= require teaspoon/teaspoon
2
+ #= require_self
3
+ #= require_tree ./jasmine1
4
+
5
+ unless jasmine?
6
+ throw new Teaspoon.Error('Jasmine 1 not found -- use `suite.use_framework :jasmine` and adjust or remove the `suite.javascripts` directive.')
7
+
8
+ @Teaspoon ?= {}
9
+ @Teaspoon.Jasmine1 ?= {}
10
+ @Teaspoon.Jasmine1.Reporters ?= {}
@@ -0,0 +1,29 @@
1
+ #= require teaspoon/fixture
2
+
3
+ class Teaspoon.Jasmine1.Fixture extends Teaspoon.Fixture
4
+
5
+ @load: ->
6
+ args = arguments
7
+ throw "Teaspoon can't load fixtures outside of describe." unless @env().currentSuite || @env().currentSpec
8
+ if @env().currentSuite
9
+ @env().beforeEach => fixture.__super__.constructor.load.apply(@, args)
10
+ @env().afterEach => @cleanup()
11
+ super
12
+ else
13
+ @env().currentSpec.after => @cleanup()
14
+ super
15
+
16
+
17
+ @set: ->
18
+ args = arguments
19
+ throw "Teaspoon can't load fixtures outside of describe." unless @env().currentSuite || @env().currentSpec
20
+ if @env().currentSuite
21
+ @env().beforeEach => fixture.__super__.constructor.set.apply(@, args)
22
+ @env().afterEach => @cleanup()
23
+ super
24
+ else
25
+ @env().currentSpec.after => @cleanup()
26
+ super
27
+
28
+
29
+ @env: -> window.jasmine.getEnv()
@@ -0,0 +1 @@
1
+ Teaspoon.setFramework(Teaspoon.Jasmine1)
@@ -0,0 +1,13 @@
1
+ #= require teaspoon/reporters/html
2
+
3
+ class Teaspoon.Jasmine1.Reporters.HTML extends Teaspoon.Reporters.HTML
4
+
5
+ readConfig: ->
6
+ super
7
+ jasmine.CATCH_EXCEPTIONS = @config["use-catch"]
8
+
9
+
10
+ envInfo: ->
11
+ ver = jasmine.getEnv().version()
12
+ verString = [ver.major, ver.minor, ver.build].join(".")
13
+ "jasmine #{verString} revision #{ver.revision}"
@@ -0,0 +1,23 @@
1
+ class Teaspoon.Jasmine1.Responder
2
+
3
+ constructor: (@reporter) ->
4
+
5
+
6
+ reportRunnerStarting: (runner) ->
7
+ @reporter.reportRunnerStarting(total: runner.specs().length)
8
+
9
+
10
+ reportRunnerResults: ->
11
+ @reporter.reportRunnerResults()
12
+
13
+
14
+ reportSuiteResults: (suite) ->
15
+ @reporter.reportSuiteResults(new Teaspoon.Jasmine1.Suite(suite))
16
+
17
+
18
+ reportSpecStarting: (spec) ->
19
+ @reporter.reportSpecStarting(new Teaspoon.Jasmine1.Spec(spec))
20
+
21
+
22
+ reportSpecResults: (spec) ->
23
+ @reporter.reportSpecResults(new Teaspoon.Jasmine1.Spec(spec))
@@ -0,0 +1,32 @@
1
+ #= require teaspoon/runner
2
+
3
+ class Teaspoon.Jasmine1.Runner extends Teaspoon.Runner
4
+
5
+ constructor: ->
6
+ @env = window.jasmine.getEnv()
7
+ super
8
+ @env.execute()
9
+
10
+
11
+ setup: ->
12
+ @env.updateInterval = 1000
13
+
14
+ # add the spec filter
15
+ if grep = @params["grep"]
16
+ @env.specFilter = (spec) -> spec.getFullName().indexOf(grep) == 0
17
+
18
+ # add the reporter
19
+ reporter = new (@getReporter())()
20
+ responder = new Teaspoon.Jasmine1.Responder(reporter)
21
+ @env.addReporter(responder)
22
+
23
+ # add fixture support
24
+ @addFixtureSupport()
25
+
26
+
27
+ addFixtureSupport: ->
28
+ return unless jasmine.getFixtures && @fixturePath
29
+ jasmine.getFixtures().containerId = "teaspoon-fixtures"
30
+ jasmine.getFixtures().fixturesPath = @fixturePath
31
+ jasmine.getStyleFixtures().fixturesPath = @fixturePath
32
+ jasmine.getJSONFixtures().fixturesPath = @fixturePath
@@ -0,0 +1,37 @@
1
+ class Teaspoon.Jasmine1.Spec
2
+
3
+ constructor: (@spec) ->
4
+ @fullDescription = @spec.getFullName()
5
+ @description = @spec.description
6
+ @link = "?grep=#{encodeURIComponent(@fullDescription)}"
7
+ @parent = @spec.suite
8
+ @suiteName = @parent.getFullName()
9
+ @viewId = @spec.viewId
10
+ @pending = @spec.pending
11
+
12
+
13
+ errors: ->
14
+ return [] unless @spec.results
15
+ for item in @spec.results().getItems()
16
+ continue if item.passed()
17
+ {message: item.message, stack: item.trace.stack}
18
+
19
+
20
+ getParents: ->
21
+ return @parents if @parents
22
+ @parents ||= []
23
+ parent = @parent
24
+ while parent
25
+ parent = new Teaspoon.Jasmine1.Suite(parent)
26
+ @parents.unshift(parent)
27
+ parent = parent.parent
28
+ @parents
29
+
30
+
31
+ result: ->
32
+ results = @spec.results()
33
+ status = "failed"
34
+ status = "passed" if results.passed()
35
+ status = "pending" if @spec.pending
36
+ status: status
37
+ skipped: results.skipped
@@ -0,0 +1,8 @@
1
+ class Teaspoon.Jasmine1.Suite
2
+
3
+ constructor: (@suite) ->
4
+ @fullDescription = @suite.getFullName()
5
+ @description = @suite.description
6
+ @link = "?grep=#{encodeURIComponent(@fullDescription)}"
7
+ @parent = @suite.parentSuite
8
+ @viewId = @suite.viewId
@@ -0,0 +1,10 @@
1
+ #= require teaspoon/teaspoon
2
+ #= require_self
3
+ #= require_tree ./jasmine2
4
+
5
+ unless jasmineRequire?
6
+ throw new Teaspoon.Error('Jasmine 2 not found -- use `suite.use_framework :jasmine` and adjust or remove the `suite.javascripts` directive.')
7
+
8
+ @Teaspoon ?= {}
9
+ @Teaspoon.Jasmine2 ?= {}
10
+ @Teaspoon.Jasmine2.Reporters ?= {}
@@ -0,0 +1,19 @@
1
+ #= require teaspoon/fixture
2
+
3
+ class Teaspoon.Jasmine2.Fixture extends Teaspoon.Fixture
4
+
5
+ @load: ->
6
+ args = arguments
7
+ @env().beforeEach => fixture.__super__.constructor.load.apply(@, args)
8
+ @env().afterEach => @cleanup()
9
+ super
10
+
11
+
12
+ @set: ->
13
+ args = arguments
14
+ @env().beforeEach => fixture.__super__.constructor.set.apply(@, args)
15
+ @env().afterEach => @cleanup()
16
+ super
17
+
18
+
19
+ @env: -> window.jasmine.getEnv()
@@ -0,0 +1,23 @@
1
+ Teaspoon.setFramework(Teaspoon.Jasmine2)
2
+
3
+ # Jasmine 2 runs the spec filter when the #it block are evaluated. This
4
+ # means we need to set the filter upon page load, instead of when the
5
+ # runner is initialized. Since Jasmine is loaded into the page first, then
6
+ # the tests, then Teaspoon is initialized, this is set up to run early in
7
+ # the boot process.
8
+ setupSpecFilter = (env) ->
9
+ if grep = Teaspoon.Runner::getParams()["grep"]
10
+ env.specFilter = (spec) ->
11
+ spec.getFullName().indexOf(grep) == 0
12
+
13
+ extend = (destination, source) ->
14
+ for property of source
15
+ destination[property] = source[property]
16
+ destination
17
+
18
+
19
+ # Set up Jasmine 2
20
+ window.jasmine = jasmineRequire.core(jasmineRequire)
21
+ env = window.jasmine.getEnv()
22
+ setupSpecFilter(env)
23
+ extend(window, jasmineRequire.interface(jasmine, env))
@@ -0,0 +1,18 @@
1
+ #= require teaspoon/reporters/console
2
+
3
+ class Teaspoon.Jasmine2.Reporters.Console extends Teaspoon.Reporters.Console
4
+
5
+ reportRunnerStarting: ->
6
+ @currentAssertions = []
7
+ @log
8
+ type: "runner"
9
+ total: null
10
+ start: JSON.parse(JSON.stringify(@start))
11
+
12
+
13
+ reportRunnerResults: =>
14
+ @log
15
+ type: "result"
16
+ elapsed: ((new Teaspoon.Date().getTime() - @start.getTime()) / 1000).toFixed(5)
17
+ coverage: window.__coverage__
18
+ Teaspoon.finished = true
@@ -0,0 +1,11 @@
1
+ #= require teaspoon/reporters/html
2
+
3
+ class Teaspoon.Jasmine2.Reporters.HTML extends Teaspoon.Reporters.HTML
4
+
5
+ readConfig: ->
6
+ super
7
+ jasmine.CATCH_EXCEPTIONS = @config["use-catch"]
8
+
9
+
10
+ envInfo: ->
11
+ "jasmine #{jasmine.version}"
@@ -0,0 +1,39 @@
1
+ class Teaspoon.Jasmine2.Responder
2
+
3
+ constructor: (@reporter) ->
4
+
5
+
6
+ jasmineStarted: (runner) ->
7
+ @reporter.reportRunnerStarting(total: runner.totalSpecsDefined)
8
+
9
+
10
+ jasmineDone: ->
11
+ @reporter.reportRunnerResults()
12
+
13
+
14
+ suiteStarted: (suite) ->
15
+ if @currentSuite # suite already running, we're nested
16
+ suite.parent = @currentSuite
17
+ @currentSuite = suite
18
+
19
+ @reporter.reportSuiteStarting(new Teaspoon.Jasmine2.Suite(suite))
20
+
21
+
22
+ suiteDone: (suite) ->
23
+ @currentSuite = @currentSuite.parent
24
+
25
+ @reporter.reportSuiteResults(new Teaspoon.Jasmine2.Suite(suite))
26
+
27
+
28
+ specStarted: (spec) ->
29
+ # Jasmine 2 reports the spec starting even though it may
30
+ # be filtered out, but there's no way to tell.
31
+ # TODO: Is there a way to clean this up?
32
+ if jasmine.getEnv().specFilter(getFullName: -> spec.fullName)
33
+ spec.parent = @currentSuite
34
+ @reporter.reportSpecStarting(new Teaspoon.Jasmine2.Spec(spec))
35
+
36
+
37
+ specDone: (spec) ->
38
+ spec.parent = @currentSuite
39
+ @reporter.reportSpecResults(new Teaspoon.Jasmine2.Spec(spec))
@@ -0,0 +1,26 @@
1
+ #= require teaspoon/runner
2
+
3
+ class Teaspoon.Jasmine2.Runner extends Teaspoon.Runner
4
+
5
+ constructor: ->
6
+ @env = window.jasmine.getEnv()
7
+ super
8
+ @env.execute()
9
+
10
+
11
+ setup: ->
12
+ # add the responder
13
+ reporter = new (@getReporter())()
14
+ responder = new Teaspoon.Jasmine2.Responder(reporter)
15
+ @env.addReporter(responder)
16
+
17
+ # add fixture support
18
+ @addFixtureSupport()
19
+
20
+
21
+ addFixtureSupport: ->
22
+ return unless jasmine.getFixtures && @fixturePath
23
+ jasmine.getFixtures().containerId = "teaspoon-fixtures"
24
+ jasmine.getFixtures().fixturesPath = @fixturePath
25
+ jasmine.getStyleFixtures().fixturesPath = @fixturePath
26
+ jasmine.getJSONFixtures().fixturesPath = @fixturePath
@@ -0,0 +1,36 @@
1
+ class Teaspoon.Jasmine2.Spec
2
+
3
+ constructor: (@spec) ->
4
+ @fullDescription = @spec.fullName
5
+ @description = @spec.description
6
+ @link = "?grep=#{encodeURIComponent(@fullDescription)}"
7
+ @parent = @spec.parent
8
+ @suiteName = @parent.fullName
9
+ @viewId = @spec.id
10
+ @pending = @spec.status == "pending"
11
+
12
+
13
+ errors: ->
14
+ return [] unless @spec.failedExpectations.length
15
+ for item in @spec.failedExpectations
16
+ {message: item.message, stack: item.stack}
17
+
18
+
19
+ getParents: ->
20
+ return @parents if @parents
21
+ @parents ||= []
22
+ parent = @parent
23
+ while parent
24
+ parent = new Teaspoon.Jasmine2.Suite(parent)
25
+ @parents.unshift(parent)
26
+ parent = parent.parent
27
+ @parents
28
+
29
+
30
+ result: ->
31
+ status: @status()
32
+ skipped: @spec.status == "disabled"
33
+
34
+
35
+ status: ->
36
+ if @spec.status == "disabled" then "passed" else @spec.status
@@ -0,0 +1,8 @@
1
+ class Teaspoon.Jasmine2.Suite
2
+
3
+ constructor: (@suite) ->
4
+ @fullDescription = @suite.fullName
5
+ @description = @suite.description
6
+ @link = "?grep=#{encodeURIComponent(@fullDescription)}"
7
+ @parent = @suite.parent
8
+ @viewId = @suite.id
@@ -0,0 +1,35 @@
1
+ require "teaspoon/framework/base"
2
+
3
+ module Teaspoon
4
+ module Jasmine
5
+ class Framework < Teaspoon::Framework::Base
6
+ # specify the framework name
7
+ framework_name :jasmine
8
+
9
+ # register standard versions
10
+ register_version "1.3.1", "jasmine/1.3.1.js",
11
+ dependencies: ["teaspoon-jasmine1.js"],
12
+ dev_deps: ["teaspoon/jasmine1.js"]
13
+
14
+ versions = ["2.0.3", "2.1.3", "2.2.0"]
15
+
16
+ versions.each do |version|
17
+ register_version version, "jasmine/#{version}.js",
18
+ dependencies: ["teaspoon-jasmine2.js"],
19
+ dev_deps: ["teaspoon/jasmine2.js"]
20
+ end
21
+
22
+ # add asset paths
23
+ add_asset_path File.expand_path("../../../teaspoon/jasmine/assets", __FILE__)
24
+
25
+ # add custom install templates
26
+ add_template_path File.expand_path("../../../teaspoon/jasmine/templates", __FILE__)
27
+
28
+ # specify where to install, and add installation steps.
29
+ install_to "spec" do
30
+ ext = options[:coffee] ? ".coffee" : ".js"
31
+ copy_file "spec_helper#{ext}", "spec/javascripts/spec_helper#{ext}"
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,32 @@
1
+ # Teaspoon includes some support files, but you can use anything from your own support path too.
2
+ # require support/jasmine-jquery-1.7.0
3
+ # require support/jasmine-jquery-2.0.0
4
+ # require support/jasmine-jquery-2.1.0
5
+ # require support/sinon
6
+ # require support/your-support-file
7
+ #
8
+ # PhantomJS (Teaspoons default driver) doesn't have support for Function.prototype.bind, which has caused confusion.
9
+ # Use this polyfill to avoid the confusion.
10
+ #= require support/bind-poly
11
+ #
12
+ # You can require your own javascript files here. By default this will include everything in application, however you
13
+ # may get better load performance if you require the specific files that are being used in the spec that tests them.
14
+ #= require application
15
+ #
16
+ # Deferring execution
17
+ # If you're using CommonJS, RequireJS or some other asynchronous library you can defer execution. Call
18
+ # Teaspoon.execute() after everything has been loaded. Simple example of a timeout:
19
+ #
20
+ # Teaspoon.defer = true
21
+ # setTimeout(Teaspoon.execute, 1000)
22
+ #
23
+ # Matching files
24
+ # By default Teaspoon will look for files that match _spec.{js,js.coffee,.coffee}. Add a filename_spec.js file in your
25
+ # spec path and it'll be included in the default suite automatically. If you want to customize suites, check out the
26
+ # configuration in teaspoon_env.rb
27
+ #
28
+ # Manifest
29
+ # If you'd rather require your spec files manually (to control order for instance) you can disable the suite matcher in
30
+ # the configuration and use this file as a manifest.
31
+ #
32
+ # For more information: http://github.com/modeset/teaspoon
@@ -0,0 +1,32 @@
1
+ // Teaspoon includes some support files, but you can use anything from your own support path too.
2
+ // require support/jasmine-jquery-1.7.0
3
+ // require support/jasmine-jquery-2.0.0
4
+ // require support/jasmine-jquery-2.1.0
5
+ // require support/sinon
6
+ // require support/your-support-file
7
+ //
8
+ // PhantomJS (Teaspoons default driver) doesn't have support for Function.prototype.bind, which has caused confusion.
9
+ // Use this polyfill to avoid the confusion.
10
+ //= require support/bind-poly
11
+ //
12
+ // You can require your own javascript files here. By default this will include everything in application, however you
13
+ // may get better load performance if you require the specific files that are being used in the spec that tests them.
14
+ //= require application
15
+ //
16
+ // Deferring execution
17
+ // If you're using CommonJS, RequireJS or some other asynchronous library you can defer execution. Call
18
+ // Teaspoon.execute() after everything has been loaded. Simple example of a timeout:
19
+ //
20
+ // Teaspoon.defer = true
21
+ // setTimeout(Teaspoon.execute, 1000)
22
+ //
23
+ // Matching files
24
+ // By default Teaspoon will look for files that match _spec.{js,js.coffee,.coffee}. Add a filename_spec.js file in your
25
+ // spec path and it'll be included in the default suite automatically. If you want to customize suites, check out the
26
+ // configuration in teaspoon_env.rb
27
+ //
28
+ // Manifest
29
+ // If you'd rather require your spec files manually (to control order for instance) you can disable the suite matcher in
30
+ // the configuration and use this file as a manifest.
31
+ //
32
+ // For more information: http://github.com/modeset/teaspoon