evergreen 1.0.0.rc → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. data/README.rdoc +10 -2
  2. data/config/routes.rb +1 -1
  3. data/lib/evergreen.rb +2 -6
  4. data/lib/evergreen/application.rb +38 -59
  5. data/lib/evergreen/cli.rb +2 -2
  6. data/lib/evergreen/runner.rb +6 -3
  7. data/lib/evergreen/server.rb +1 -5
  8. data/lib/evergreen/suite.rb +1 -13
  9. data/lib/evergreen/tasks.rb +1 -1
  10. data/lib/evergreen/version.rb +1 -1
  11. data/lib/jasmine/Contribute.markdown +44 -0
  12. data/lib/jasmine/Gemfile +4 -6
  13. data/lib/jasmine/MIT.LICENSE +1 -1
  14. data/lib/jasmine/README.markdown +17 -14
  15. data/lib/jasmine/Rakefile +21 -170
  16. data/lib/jasmine/Release.markdown +40 -0
  17. data/lib/jasmine/images/jasmine_favicon.png +0 -0
  18. data/lib/jasmine/jasmine-core.gemspec +22 -0
  19. data/lib/jasmine/jshint/jshint.js +5919 -0
  20. data/lib/jasmine/jshint/run.js +99 -0
  21. data/lib/jasmine/lib/jasmine-core.rb +36 -0
  22. data/lib/jasmine/lib/jasmine-core/example/SpecRunner.html +54 -0
  23. data/lib/jasmine/{example → lib/jasmine-core/example}/spec/PlayerSpec.js +0 -0
  24. data/lib/jasmine/{example → lib/jasmine-core/example}/spec/SpecHelper.js +3 -3
  25. data/lib/jasmine/{example → lib/jasmine-core/example}/src/Player.js +0 -0
  26. data/lib/jasmine/{example → lib/jasmine-core/example}/src/Song.js +0 -0
  27. data/lib/jasmine/lib/{jasmine-html.js → jasmine-core/jasmine-html.js} +6 -4
  28. data/lib/jasmine/lib/{jasmine.css → jasmine-core/jasmine.css} +0 -0
  29. data/lib/jasmine/lib/{jasmine.js → jasmine-core/jasmine.js} +103 -48
  30. data/lib/jasmine/lib/{json2.js → jasmine-core/json2.js} +0 -0
  31. data/lib/jasmine/lib/jasmine-core/version.rb +6 -0
  32. data/lib/jasmine/spec/console/ConsoleReporterSpec.js +451 -0
  33. data/lib/jasmine/spec/{suites → core}/BaseSpec.js +0 -0
  34. data/lib/jasmine/spec/{suites → core}/CustomMatchersSpec.js +0 -0
  35. data/lib/jasmine/spec/{suites → core}/EnvSpec.js +3 -2
  36. data/lib/jasmine/spec/{suites → core}/ExceptionsSpec.js +46 -4
  37. data/lib/jasmine/spec/{suites → core}/JsApiReporterSpec.js +1 -1
  38. data/lib/jasmine/spec/{suites → core}/MatchersSpec.js +87 -44
  39. data/lib/jasmine/spec/{suites → core}/MockClockSpec.js +0 -0
  40. data/lib/jasmine/spec/{suites → core}/MultiReporterSpec.js +3 -3
  41. data/lib/jasmine/spec/{suites → core}/NestedResultsSpec.js +0 -0
  42. data/lib/jasmine/spec/{suites → core}/PrettyPrintSpec.js +0 -6
  43. data/lib/jasmine/spec/{suites → core}/QueueSpec.js +0 -0
  44. data/lib/jasmine/spec/{suites → core}/ReporterSpec.js +0 -0
  45. data/lib/jasmine/spec/{suites → core}/RunnerSpec.js +0 -0
  46. data/lib/jasmine/spec/{suites → core}/SpecRunningSpec.js +14 -9
  47. data/lib/jasmine/spec/{suites → core}/SpecSpec.js +1 -1
  48. data/lib/jasmine/spec/{suites → core}/SpySpec.js +0 -0
  49. data/lib/jasmine/spec/{suites → core}/SuiteSpec.js +0 -0
  50. data/lib/jasmine/spec/{suites → core}/UtilSpec.js +0 -1
  51. data/lib/jasmine/spec/{suites → core}/WaitsForBlockSpec.js +32 -1
  52. data/lib/jasmine/spec/html/MatchersHtmlSpec.js +38 -0
  53. data/lib/jasmine/spec/html/PrettyPrintHtmlSpec.js +8 -0
  54. data/lib/jasmine/spec/{suites → html}/TrivialReporterSpec.js +3 -2
  55. data/lib/jasmine/spec/node_suite.js +127 -0
  56. data/lib/jasmine/spec/runner.html +44 -45
  57. data/lib/jasmine/spec/templates/runner.html.erb +49 -0
  58. data/lib/jasmine/spec/templates/script_tag.html.erb +1 -0
  59. data/lib/jasmine/src/SourcesList.json +7 -0
  60. data/lib/jasmine/src/console/ConsoleReporter.js +177 -0
  61. data/lib/jasmine/src/{Block.js → core/Block.js} +1 -1
  62. data/lib/jasmine/src/{Env.js → core/Env.js} +13 -8
  63. data/lib/jasmine/src/{JsApiReporter.js → core/JsApiReporter.js} +0 -0
  64. data/lib/jasmine/src/{Matchers.js → core/Matchers.js} +24 -7
  65. data/lib/jasmine/src/{MultiReporter.js → core/MultiReporter.js} +0 -0
  66. data/lib/jasmine/src/{NestedResults.js → core/NestedResults.js} +0 -0
  67. data/lib/jasmine/src/{PrettyPrinter.js → core/PrettyPrinter.js} +2 -1
  68. data/lib/jasmine/src/{Queue.js → core/Queue.js} +0 -0
  69. data/lib/jasmine/src/{Reporter.js → core/Reporter.js} +0 -0
  70. data/lib/jasmine/src/{Runner.js → core/Runner.js} +1 -1
  71. data/lib/jasmine/src/{Spec.js → core/Spec.js} +2 -1
  72. data/lib/jasmine/src/{Suite.js → core/Suite.js} +1 -1
  73. data/lib/jasmine/src/{WaitsBlock.js → core/WaitsBlock.js} +3 -1
  74. data/lib/jasmine/src/{WaitsForBlock.js → core/WaitsForBlock.js} +4 -2
  75. data/lib/jasmine/src/{base.js → core/base.js} +52 -24
  76. data/lib/jasmine/src/{mock-timeout.js → core/mock-timeout.js} +0 -0
  77. data/lib/jasmine/src/{util.js → core/util.js} +1 -1
  78. data/lib/jasmine/src/html/TrivialReporter.js +6 -4
  79. data/lib/jasmine/src/templates/example_project_jasmine_tags.html.erb +3 -0
  80. data/lib/jasmine/src/templates/version.js.erb +6 -0
  81. data/lib/jasmine/src/templates/version.rb.erb +6 -0
  82. data/lib/jasmine/src/version.js +6 -0
  83. data/lib/jasmine/src/version.json +2 -2
  84. data/lib/jasmine/tasks/build_dist.rb +48 -0
  85. data/lib/jasmine/tasks/build_specs.rb +50 -0
  86. data/lib/jasmine/tasks/docs.rb +17 -0
  87. data/lib/jasmine/tasks/helpers.rb +50 -0
  88. data/lib/jasmine/tasks/pages.rb +13 -0
  89. data/lib/jasmine/tasks/spec.rb +37 -0
  90. data/lib/jasmine/tasks/standalone.rb +91 -0
  91. data/lib/jasmine/tasks/version.rb +5 -0
  92. data/lib/tasks/evergreen.rake +1 -1
  93. data/spec/evergreen_spec.rb +6 -7
  94. data/spec/runner_spec.rb +1 -1
  95. data/spec/spec_helper.rb +5 -8
  96. metadata +95 -77
  97. data/lib/jasmine/cruise_config.rb +0 -21
  98. data/lib/jasmine/example/SpecRunner.html +0 -27
  99. data/lib/jasmine/images/fail-16.png +0 -0
  100. data/lib/jasmine/images/fail.png +0 -0
  101. data/lib/jasmine/images/go-16.png +0 -0
  102. data/lib/jasmine/images/go.png +0 -0
  103. data/lib/jasmine/images/pending-16.png +0 -0
  104. data/lib/jasmine/images/pending.png +0 -0
  105. data/lib/jasmine/images/question-bk.png +0 -0
  106. data/lib/jasmine/images/questionbk-16.png +0 -0
  107. data/lib/jasmine/images/spinner.gif +0 -0
@@ -16,6 +16,14 @@ isolation from your application. If you need a tool that tests how your
16
16
  JavaScript integrates with your application you should use an integration
17
17
  testing framework, such as {Capybara}[http://github.com/jnicklas/capybara].
18
18
 
19
+ == Community
20
+
21
+ Please ask questions on the {mailing
22
+ list}[http://groups.google.com/group/ruby-evergreen]. If you have found a
23
+ reproducible error, please {file it on
24
+ GitHub}[https://github.com/jnicklas/evergreen/issues]. Do not contact the
25
+ maintainers directly.
26
+
19
27
  == Installation
20
28
 
21
29
  Install as a Ruby gem:
@@ -28,12 +36,12 @@ Evergreen assumes a file and directory structure, place all your javascript
28
36
  code inside ./public and all spec files inside ./spec/javascripts. All spec
29
37
  files should end in _spec.js. For example:
30
38
 
31
- public/widget.js
39
+ public/javascripts/widget.js
32
40
  spec/javascripts/widget_spec.js
33
41
 
34
42
  You can require files from the public directory inside your spec file:
35
43
 
36
- require('/widget.js')
44
+ require('/javascripts/widget.js')
37
45
 
38
46
  describe('a widget', function() {
39
47
  ...
@@ -1,3 +1,3 @@
1
1
  Rails.application.routes.draw do
2
- mount Evergreen.build_application, :at => '/evergreen'
2
+ mount Evergreen::Application, :at => '/evergreen'
3
3
  end
@@ -15,19 +15,15 @@ module Evergreen
15
15
  autoload :Template, 'evergreen/template'
16
16
 
17
17
  class << self
18
- attr_accessor :driver, :public_dir, :template_dir, :spec_dir, :root, :mounted_at
18
+ attr_accessor :driver, :public_dir, :template_dir, :spec_dir, :root, :mounted_at, :application
19
19
 
20
20
  def configure
21
21
  yield self
22
22
  end
23
23
 
24
- def extensions(&block)
25
- @extensions = block if block
26
- @extensions
27
- end
28
-
29
24
  def use_defaults!
30
25
  configure do |config|
26
+ config.application = Evergreen::Application
31
27
  config.driver = :selenium
32
28
  config.public_dir = 'public'
33
29
  config.spec_dir = 'spec/javascripts'
@@ -1,71 +1,50 @@
1
1
  module Evergreen
2
- class << self
3
- attr_writer :application
2
+ class Application < Sinatra::Base
3
+ set :static, false
4
+ set :root, File.expand_path('.', File.dirname(__FILE__))
4
5
 
5
- def application
6
- @application ||= build_application
7
- end
8
-
9
- def build_application
10
- Rack::Builder.new do
11
- instance_eval(&Evergreen.extensions) if Evergreen.extensions
12
-
13
- map "/jasmine" do
14
- use Rack::Static, :urls => ["/"], :root => File.expand_path('../jasmine/lib', File.dirname(__FILE__))
15
- run lambda { |env| [404, {}, "No such file"]}
16
- end
6
+ helpers do
7
+ def url(path)
8
+ Evergreen.mounted_at.to_s + path.to_s
9
+ end
17
10
 
18
- map "/resources" do
19
- use Rack::Static, :urls => ["/"], :root => File.expand_path('resources', File.dirname(__FILE__))
20
- run lambda { |env| [404, {}, "No such file"]}
21
- end
11
+ def render_spec(spec)
12
+ spec.read if spec
13
+ rescue StandardError => error
14
+ erb :_spec_error, :locals => { :error => error }
15
+ end
16
+ end
22
17
 
23
- map "/" do
24
- app = Class.new(Sinatra::Base).tap do |app|
25
- app.reset!
26
- app.class_eval do
27
- set :static, true
28
- set :root, File.expand_path('.', File.dirname(__FILE__))
29
- set :public_folder, File.expand_path(File.join(Evergreen.root, Evergreen.public_dir), File.dirname(__FILE__))
18
+ get '/' do
19
+ @suite = Evergreen::Suite.new
20
+ erb :list
21
+ end
30
22
 
31
- helpers do
32
- def url(path)
33
- Evergreen.mounted_at.to_s + path.to_s
34
- end
23
+ get '/run/all' do
24
+ @suite = Evergreen::Suite.new
25
+ @js_spec_helper = @suite.get_spec('spec_helper.js')
26
+ @coffee_spec_helper = @suite.get_spec('spec_helper.coffee')
27
+ erb :run
28
+ end
35
29
 
36
- def render_spec(spec)
37
- spec.read if spec
38
- rescue StandardError => error
39
- erb :_spec_error, :locals => { :error => error }
40
- end
41
- end
30
+ get '/run/*' do |name|
31
+ @suite = Evergreen::Suite.new
32
+ @spec = @suite.get_spec(name)
33
+ @js_spec_helper = @suite.get_spec('spec_helper.js')
34
+ @coffee_spec_helper = @suite.get_spec('spec_helper.coffee')
35
+ erb :run
36
+ end
42
37
 
43
- get '/' do
44
- @suite = Evergreen::Suite.new
45
- erb :list
46
- end
38
+ get "/jasmine/*" do |path|
39
+ send_file File.expand_path(File.join('../jasmine/lib/jasmine-core', path), File.dirname(__FILE__))
40
+ end
47
41
 
48
- get '/run/all' do
49
- @suite = Evergreen::Suite.new
50
- @js_spec_helper = @suite.get_spec('spec_helper.js')
51
- @coffee_spec_helper = @suite.get_spec('spec_helper.coffee')
52
- erb :run
53
- end
42
+ get "/resources/*" do |path|
43
+ send_file File.expand_path(File.join('resources', path), File.dirname(__FILE__))
44
+ end
54
45
 
55
- get '/run/*' do |name|
56
- @suite = Evergreen::Suite.new
57
- @spec = @suite.get_spec(name)
58
- @js_spec_helper = @suite.get_spec('spec_helper.js')
59
- @coffee_spec_helper = @suite.get_spec('spec_helper.coffee')
60
- erb :run
61
- end
62
- end
63
- end
64
- run app
65
- end
66
- end.tap do |app|
67
- def app.inspect; '<Evergreen Application>'; end
68
- end
46
+ get '/*' do |path|
47
+ send_file File.join(Evergreen.root, Evergreen.public_dir, path)
69
48
  end
70
49
  end
71
50
  end
@@ -16,10 +16,10 @@ module Evergreen
16
16
 
17
17
  case command
18
18
  when "serve"
19
- Evergreen::Suite.new.serve
19
+ Evergreen::Server.new.serve
20
20
  return true
21
21
  when "run"
22
- return Evergreen::Suite.new.run
22
+ return Evergreen::Runner.new.run
23
23
  else
24
24
  puts "no such command '#{command}'"
25
25
  return false
@@ -87,8 +87,7 @@ module Evergreen
87
87
 
88
88
  attr_reader :suite, :io
89
89
 
90
- def initialize(suite, io=STDOUT)
91
- @suite = suite
90
+ def initialize(io=STDOUT)
92
91
  @io = io
93
92
  end
94
93
 
@@ -136,7 +135,11 @@ module Evergreen
136
135
  end
137
136
 
138
137
  def session
139
- @session ||= Capybara::Session.new(Evergreen.driver, suite.application)
138
+ @session ||= Capybara::Session.new(Evergreen.driver, Evergreen.application)
139
+ end
140
+
141
+ def suite
142
+ @suite ||= Evergreen::Suite.new
140
143
  end
141
144
 
142
145
  protected
@@ -2,10 +2,6 @@ module Evergreen
2
2
  class Server
3
3
  attr_reader :suite
4
4
 
5
- def initialize(suite)
6
- @suite = suite
7
- end
8
-
9
5
  def serve
10
6
  server.boot
11
7
  Launchy.open(server.url(Evergreen.mounted_at.to_s + '/'))
@@ -15,7 +11,7 @@ module Evergreen
15
11
  protected
16
12
 
17
13
  def server
18
- @server ||= Capybara::Server.new(suite.application)
14
+ @server ||= Capybara::Server.new(Evergreen.application)
19
15
  end
20
16
  end
21
17
  end
@@ -1,6 +1,6 @@
1
1
  module Evergreen
2
2
  class Suite
3
- attr_reader :runner, :server, :driver, :application
3
+ attr_reader :driver
4
4
 
5
5
  def initialize
6
6
  paths = [
@@ -9,10 +9,6 @@ module Evergreen
9
9
  "#{ENV["HOME"]}/.evergreen"
10
10
  ]
11
11
  paths.each { |path| load(path) if File.exist?(path) }
12
-
13
- @runner = Runner.new(self)
14
- @server = Server.new(self)
15
- @application = Evergreen.application
16
12
  end
17
13
 
18
14
  def root
@@ -23,14 +19,6 @@ module Evergreen
23
19
  Evergreen.mounted_at
24
20
  end
25
21
 
26
- def run
27
- runner.run
28
- end
29
-
30
- def serve
31
- server.serve
32
- end
33
-
34
22
  def get_spec(name)
35
23
  Spec.new(self, name)
36
24
  end
@@ -4,7 +4,7 @@ require 'evergreen'
4
4
  namespace :spec do
5
5
  desc "Run JavaScript specs via Evergreen"
6
6
  task :javascripts => :environment do
7
- result = Evergreen::Suite.new.run
7
+ result = Evergreen::Runner.new.run
8
8
  Kernel.exit(1) unless result
9
9
  end
10
10
  end
@@ -1,3 +1,3 @@
1
1
  module Evergreen
2
- VERSION = '1.0.0.rc'
2
+ VERSION = '1.0.0'
3
3
  end
@@ -0,0 +1,44 @@
1
+ # Developing for Jasmine Core
2
+
3
+ ## How to Contribute
4
+
5
+ We welcome your contributions - Thanks for helping make Jasmine a better project for everyone. Please review the backlog and discussion lists (the main group - [http://groups.google.com/group/jasmine-js](http://groups.google.com/group/jasmine-js) and the developer's list - [http://groups.google.com/group/jasmine-js-dev](http://groups.google.com/group/jasmine-js-dev)) before starting work - what you're looking for may already have been done. If it hasn't, the community can help make your contribution better.
6
+
7
+ ## How to write new Jasmine code
8
+
9
+ Or, How to make a successful pull request
10
+
11
+ * _Do not change the public interface_. Lots of projects depend on Jasmine and if you aren't careful you'll break them
12
+ * _Be environment agnostic_ - server-side developers are just as important as browser developers
13
+ * _Be browser agnostic_ - if you must rely on browser-specific functionality, please write it in a way that degrades gracefully
14
+ * _Write specs_ - Jasmine's a testing framework; don't add functionality without test-driving it
15
+ * _Ensure the *entire* test suite is green_ in all the big browsers, Node, and JSHint - your contribution shouldn't break Jasmine for other users
16
+
17
+ Follow these tips and your pull request, patch, or suggestion is much more likely to be integrated.
18
+
19
+ ## Environment
20
+
21
+ Ruby, RubyGems and Rake are used in order to script the various file interactions. You will need to run on a system that supports Ruby in order to run Jasmine's specs.
22
+
23
+ Node.js is used to run most of the specs (the HTML-independent code) and should be present. Additionally, the JS Hint project scrubs the source code as part of the spec process.
24
+
25
+ ## Development
26
+
27
+ All source code belongs in `src/`. The `core/` directory contains the bulk of Jasmine's functionality. This code should remain browser- and environment-agnostic. If your feature or fix cannot be, as mentioned above, please degrade gracefully. Any code that should only be in a non-browser environment should live in `src/console/`. Any code that depends on a browser (specifically, it expects `window` to be the global or `document` is present) should live in `src/html/`.
28
+
29
+ Please respect the code patterns as possible. For example, using `jasmine.getGlobal()` to get the global object so as to remain environment agnostic.
30
+
31
+ ## Running Specs
32
+
33
+ As in all good projects, the `spec/` directory mirrors `src/` and follows the same rules. The browser runner will include and attempt to run all specs. The node runner will exclude any html-dependent specs (those in `spec/html/`).
34
+
35
+ You will notice that all specs are run against the built `jasmine.js` instead of the component source files. This is intentional as a way to ensure that the concatenation code is working correctly.
36
+
37
+ Please ensure all specs are green before committing.
38
+
39
+ There are rake tasks to help with getting green:
40
+ * `rake spec` outputs the expected number of specs that should be run and attempts to run in browser and Node
41
+ * `rake spec:browser` opens `spec/runner.html` in the default browser on MacOS. Please run this in at least Firefox and Chrome before committing
42
+ * `rake spec:node` runs all the Jasmine specs in Node.js - it will complain if Node is not installed
43
+ * `rake hint` runs all the files through JSHint and will complain about potential viable issues with your code. Fix them.
44
+
@@ -1,6 +1,4 @@
1
- source :gemcutter
2
-
3
- gem "jekyll", "0.6.2"
4
- gem "json_pure", "~>1.4.3"
5
- gem "ragaskar-jsdoc_helper"
6
- gem "rake", "0.8.7"
1
+ source :rubygems
2
+ gem "term-ansicolor", :require => "term/ansicolor"
3
+ gem "rake"
4
+ gemspec
@@ -1,4 +1,4 @@
1
- Copyright (c) 2008-2010 Pivotal Labs
1
+ Copyright (c) 2008-2011 Pivotal Labs
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -2,27 +2,30 @@
2
2
  =======
3
3
  **A JavaScript Testing Framework**
4
4
 
5
- Want to use Jasmine in a project? Go HERE: [http://pivotal.github.com/jasmine/](http://pivotal.github.com/jasmine/)
5
+ Jasmine is a Behavior Driven Development testing framework for JavaScript. It does not rely on browsers, DOM, or any JavaScript framework. Thus it's suited for websites, [Node.js](http://nodejs.org) projects, or anywhere that JavaScript can run.
6
+
7
+ Documentation & guides live here: [http://pivotal.github.com/jasmine/](http://pivotal.github.com/jasmine/)
8
+
9
+ ## What's Here?
10
+
11
+ *
12
+
6
13
 
7
- Want to contribute to Jasmine? Read on...
8
14
 
9
- <i>(More developer docs to come...)</i>
10
15
 
11
16
  ## Support
12
- We now have a Google Group for support & discussion.
13
17
 
14
- * Discussion: [http://groups.google.com/group/jasmine-js](http://groups.google.com/group/jasmine-js)
15
- * Group email: [jasmine-js@googlegroups.com](jasmine-js@googlegroups.com)
16
- * Current build status of Jasmine is visible at [ci.pivotallabs.com](http://ci.pivotallabs.com)
17
- * Pivotal Tracker project: [http://www.pivotaltracker.com/projects/10606](http://www.pivotaltracker.com/projects/10606)
18
- * Twitter: [@JasmineBDD](http://twitter.com/JasmineBDD)
18
+ * Search past discussions: [http://groups.google.com/group/jasmine-js](http://groups.google.com/group/jasmine-js)
19
+ * Send an email to the list: [jasmine-js@googlegroups.com](jasmine-js@googlegroups.com)
20
+ * Check the current build status: [ci.pivotallabs.com](http://ci.pivotallabs.com)
21
+ * View the project backlog at Pivotal Tracker: [http://www.pivotaltracker.com/projects/10606](http://www.pivotaltracker.com/projects/10606)
22
+ * Follow us on Twitter: [@JasmineBDD](http://twitter.com/JasmineBDD)
23
+
19
24
 
20
25
  ## Maintainers
26
+
21
27
  * [Davis W. Frank](mailto:dwfrank@pivotallabs.com), Pivotal Labs
22
28
  * [Rajan Agaskar](mailto:rajan@pivotallabs.com), Pivotal Labs
23
- * [Christian Williams](mailto:xian@pivotallabs.com), Pivotal Labs
24
-
25
- ## Developers
26
- We welcome your contributions! Jasmine is currently maintained by Davis Frank ([infews](http://github.com/infews)), Rajan Agaskar ([ragaskar](http://github.com/ragaskar)), and Christian Williams ([Xian](http://github.com/Xian)). You can help us by removing all other recipients from your pull request.
29
+ * [Christian Williams](mailto:antixian666@gmail.com), Square
27
30
 
28
- Copyright (c) 2008-2010 Pivotal Labs. This software is licensed under the MIT License.
31
+ Copyright (c) 2008-2011 Pivotal Labs. This software is licensed under the MIT License.
@@ -1,182 +1,33 @@
1
- def jasmine_sources
2
- sources = ["src/base.js", "src/util.js", "src/Env.js", "src/Reporter.js", "src/Block.js"]
3
- sources += Dir.glob('src/*.js').reject { |f| f == 'src/base.js' || sources.include?(f) }.sort
4
- sources
1
+ require "bundler"
2
+ Bundler::GemHelper.install_tasks
3
+ require "term/ansicolor"
4
+ require "json"
5
+ require "tilt"
6
+
7
+ Dir["#{File.dirname(__FILE__)}/tasks/**/*.rb"].each do |file|
8
+ require file
5
9
  end
6
10
 
7
- def jasmine_html_sources
8
- ["src/html/TrivialReporter.js"]
9
- end
11
+ task :default => :spec
10
12
 
11
- def jasmine_version
12
- "#{version_hash['major']}.#{version_hash['minor']}.#{version_hash['build']}"
13
+ task :require_pages_submodule do
14
+ raise "Submodule for Github Pages isn't present. Run git submodule update --init" unless pages_submodule_present
13
15
  end
14
16
 
15
- def version_hash
16
- require 'json'
17
- @version ||= JSON.parse(File.new("src/version.json").read);
17
+ task :require_node do
18
+ raise "\nNode.js is required to develop code for Jasmine. Please visit http://nodejs.org to install.\n\n" unless node_installed?
18
19
  end
19
20
 
20
- task :default => 'jasmine:dist'
21
-
22
- def substitute_jasmine_version(filename)
23
- contents = File.read(filename)
24
- contents = contents.gsub(/##JASMINE_VERSION##/, (jasmine_version))
25
- contents = contents.gsub(/[^\n]*REMOVE_THIS_LINE_FROM_BUILD[^\n]*/, '')
26
- File.open(filename, 'w') { |f| f.write(contents) }
21
+ def pages_submodule_present
22
+ File.exist?('pages/download.html')
27
23
  end
28
24
 
29
- namespace :jasmine do
30
-
31
- desc 'Prepares for distribution'
32
- task :dist => ['jasmine:build', 'jasmine:doc', 'jasmine:build_example_project', 'jasmine:fill_index_downloads']
33
-
34
- desc 'Check jasmine sources for coding problems'
35
- task :lint do
36
- passed = true
37
- jasmine_sources.each do |src|
38
- lines = File.read(src).split(/\n/)
39
- lines.each_index do |i|
40
- line = lines[i]
41
- undefineds = line.scan(/.?undefined/)
42
- if undefineds.include?(" undefined") || undefineds.include?("\tundefined")
43
- puts "Dangerous undefined at #{src}:#{i}:\n > #{line}"
44
- passed = false
45
- end
46
-
47
- if line.scan(/window/).length > 0
48
- puts "Dangerous window at #{src}:#{i}:\n > #{line}"
49
- passed = false
50
- end
51
- end
52
- end
53
-
54
- unless passed
55
- puts "Lint failed!"
56
- exit 1
57
- end
58
- end
59
-
60
- desc 'Builds lib/jasmine from source'
61
- task :build => :lint do
62
- puts 'Building Jasmine from source'
63
-
64
- sources = jasmine_sources
65
- version = version_hash
66
-
67
- old_jasmine_files = Dir.glob('lib/jasmine*.js')
68
- old_jasmine_files.each { |file| File.delete(file) }
69
-
70
- File.open("lib/jasmine.js", 'w') do |jasmine|
71
- sources.each do |source_filename|
72
- jasmine.puts(File.read(source_filename))
73
- end
74
-
75
- jasmine.puts %{
76
- jasmine.version_= {
77
- "major": #{version['major'].to_json},
78
- "minor": #{version['minor'].to_json},
79
- "build": #{version['build'].to_json},
80
- "revision": #{Time.now.to_i}
81
- };
82
- }
83
- end
84
-
85
- File.open("lib/jasmine-html.js", 'w') do |jasmine_html|
86
- jasmine_html_sources.each do |source_filename|
87
- jasmine_html.puts(File.read(source_filename))
88
- end
89
- end
90
-
91
- FileUtils.cp("src/html/jasmine.css", "lib/jasmine.css")
92
- end
93
-
94
- downloads_file = 'pages/download.html.md'
95
- task :need_pages_submodule do
96
- unless File.exists?(downloads_file)
97
- raise "Jasmine pages submodule isn't present. Run git submodule update --init"
98
- end
99
- end
100
-
101
- desc "Build jasmine documentation"
102
- task :doc => :need_pages_submodule do
103
- puts 'Creating Jasmine Documentation'
104
- require 'rubygems'
105
- require 'jsdoc_helper'
106
-
107
- FileUtils.rm_r "pages/jsdoc", :force => true
108
-
109
- JsdocHelper::Rake::Task.new(:lambda_jsdoc) do |t|
110
- t[:files] = jasmine_sources << jasmine_html_sources
111
- t[:options] = "-a"
112
- t[:out] = "pages/jsdoc"
113
- # JsdocHelper bug: template must be relative to the JsdocHelper gem, ick
114
- t[:template] = File.join("../".*(100), Dir::getwd, "jsdoc-template")
115
- end
116
- Rake::Task[:lambda_jsdoc].invoke
117
- end
118
-
119
- desc "Build example project"
120
- task :build_example_project => :need_pages_submodule do
121
- require 'tmpdir'
122
-
123
- temp_dir = File.join(Dir.tmpdir, 'jasmine-standalone-project')
124
- puts "Building Example Project in #{temp_dir}"
125
- FileUtils.rm_r temp_dir if File.exists?(temp_dir)
126
- Dir.mkdir(temp_dir)
127
-
128
- root = File.expand_path(File.dirname(__FILE__))
129
- FileUtils.cp_r File.join(root, 'example/.'), File.join(temp_dir)
130
- substitute_jasmine_version(File.join(temp_dir, "SpecRunner.html"))
131
-
132
- lib_dir = File.join(temp_dir, "lib/jasmine-#{jasmine_version}")
133
- FileUtils.mkdir_p(lib_dir)
134
- {
135
- "lib/jasmine.js" => "jasmine.js",
136
- "lib/jasmine-html.js" => "jasmine-html.js",
137
- "src/html/jasmine.css" => "jasmine.css",
138
- "MIT.LICENSE" => "MIT.LICENSE"
139
- }.each_pair do |src, dest|
140
- FileUtils.cp(File.join(root, src), File.join(lib_dir, dest))
141
- end
142
-
143
- dist_dir = File.join(root, 'pages/downloads')
144
- zip_file_name = File.join(dist_dir, "jasmine-standalone-#{jasmine_version}.zip")
145
- puts "Zipping Example Project and moving to #{zip_file_name}"
146
- FileUtils.mkdir(dist_dir) unless File.exist?(dist_dir)
147
- if File.exist?(zip_file_name)
148
- puts "WARNING!!! #{zip_file_name} already exists!"
149
- FileUtils.rm(zip_file_name)
150
- end
151
- exec "cd #{temp_dir} && zip -r #{zip_file_name} . -x .[a-zA-Z0-9]*"
152
- end
153
-
154
- task :fill_index_downloads do
155
- require 'digest/sha1'
156
-
157
- download_html = "<!-- START_DOWNLOADS -->\n"
158
- Dir.glob('pages/downloads/*.zip').sort.reverse.each do |f|
159
- sha1 = Digest::SHA1.hexdigest File.read(f)
160
-
161
- fn = f.sub(/^pages\//, '')
162
- version = /jasmine-standalone-(.*).zip/.match(f)[1]
163
- prerelease = /\.rc/.match(f)
164
- download_html += prerelease ? "<tr class=\"rc\">\n" : "<tr>\n"
165
- download_html += " <td class=\"link\"><a href=\"#{fn}\">#{fn.sub(/downloads\//, '')}</a></td>\n"
166
- download_html += " <td class=\"version\">#{version}</td>\n"
167
- download_html += " <td class=\"size\">#{File.size(f) / 1024}k</td>\n"
168
- download_html += " <td class=\"date\">#{File.mtime(f).strftime("%Y/%m/%d %H:%M:%S %Z")}</td>\n"
169
- download_html += " <td class=\"sha\">#{sha1}</td>\n"
170
- download_html += "</tr>\n"
171
- end
172
- download_html += "<!-- END_DOWNLOADS -->"
25
+ def node_installed?
26
+ `which node` =~ /node/
27
+ end
173
28
 
174
- downloads_page = File.read(downloads_file)
175
- matcher = /<!-- START_DOWNLOADS -->.*<!-- END_DOWNLOADS -->/m
176
- downloads_page = downloads_page.sub(matcher, download_html)
177
- File.open(downloads_file, 'w') {|f| f.write(downloads_page)}
178
- puts "rewrote that file"
179
- end
29
+ class String
30
+ include Term::ANSIColor
180
31
  end
181
32
 
182
- task :jasmine => ['jasmine:dist']
33
+ Term::ANSIColor.coloring = STDOUT.isatty