rspec 0.5.0 → 0.5.1

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 (57) hide show
  1. data/CHANGES +9 -5
  2. data/Rakefile +35 -29
  3. data/bin/spec +0 -5
  4. data/doc/README +5 -0
  5. data/doc/config.yaml +2 -0
  6. data/doc/plugin/syntax.rb +38 -0
  7. data/doc/reference/rspec reference.page +0 -0
  8. data/doc/src/community.page +8 -0
  9. data/doc/src/default.css +198 -0
  10. data/doc/src/default.template +34 -0
  11. data/doc/src/documentation/api.page +251 -0
  12. data/doc/src/documentation/index.page +8 -0
  13. data/doc/src/documentation/mocks.page +207 -0
  14. data/doc/src/documentation/specs.page +20 -0
  15. data/doc/src/download.page +8 -0
  16. data/doc/src/examples.page +9 -0
  17. data/doc/src/images/ul.gif +0 -0
  18. data/doc/src/index.page +8 -0
  19. data/doc/src/tools/index.page +8 -0
  20. data/doc/src/tools/rails.page +8 -0
  21. data/doc/src/tools/rake.page +8 -0
  22. data/doc/src/tools/rcov.page +8 -0
  23. data/doc/src/tools/spec_runner.page +8 -0
  24. data/doc/src/tools/specdoc.page +8 -0
  25. data/doc/src/tools/test2rspec.page +8 -0
  26. data/doc/src/ul.gif +0 -0
  27. data/doc/src/why_rspec.page +8 -0
  28. data/examples/mocking_spec.rb +2 -2
  29. data/examples/spec_framework_spec.rb +4 -4
  30. data/lib/spec/api/helper/have_helper.rb +55 -55
  31. data/lib/spec/api/mock.rb +111 -38
  32. data/lib/spec/runner/backtrace_tweaker.rb +4 -4
  33. data/lib/spec/runner/context.rb +2 -1
  34. data/lib/spec/runner/context_runner.rb +3 -3
  35. data/lib/spec/runner/option_parser.rb +8 -4
  36. data/lib/spec/runner/simple_text_reporter.rb +29 -19
  37. data/lib/spec/runner/specification.rb +2 -1
  38. data/lib/spec/version.rb +1 -1
  39. data/test/rake/rcov_testtask.rb +45 -0
  40. data/test/spec/api/helper/arbitrary_predicate_test.rb +39 -24
  41. data/test/spec/api/helper/equality_test.rb +19 -0
  42. data/test/spec/api/helper/should_have_test.rb +183 -0
  43. data/test/spec/api/mock_arg_constraints_test.rb +90 -0
  44. data/test/spec/api/mock_test.rb +101 -21
  45. data/test/spec/runner/context_runner_test.rb +3 -3
  46. data/test/spec/runner/context_test.rb +2 -5
  47. data/test/spec/runner/execution_context_test.rb +1 -1
  48. data/test/spec/runner/option_parser_test.rb +16 -8
  49. data/test/spec/runner/simple_text_reporter_test.rb +57 -33
  50. data/test/spec/runner/specification_test.rb +7 -7
  51. data/test/spec/tool/command_line_test.rb +4 -4
  52. data/test/test_helper.rb +2 -2
  53. metadata +37 -8
  54. data/README +0 -38
  55. data/TODO +0 -9
  56. data/TUTORIAL +0 -259
  57. data/WHY_RSPEC +0 -115
data/CHANGES CHANGED
@@ -1,13 +1,17 @@
1
1
  = RSpec Changelog
2
2
 
3
- == Version 0.5.0
3
+ == Version 0.5.1
4
+ This release is the first release of RSpec with a new website. It will look better soon.
4
5
 
5
- This release introduces a new API and obsoletes previous versions
6
- * Lots and lots of changes. See examples.
6
+ * Added initial documentation for API [dastels]
7
+ * Added website based on webgen [aslak_hellesoy]
8
+ * Modified test task to use rcov [aslak_hellesoy]
9
+ * Deleted unused code (thanks, rcov!) [aslak_hellesoy]
10
+ * Various changes to the mock API [dastels]
7
11
 
8
- == Version 0.4.0
12
+ == Version 0.5.0
9
13
 
10
- The "two Daves walked into a bar and Aslak ruined the party" release.
14
+ This release introduces a new API and obsoletes previous versions.
11
15
 
12
16
  * Moved source code to separate subfolders
13
17
  * Added new DSL runner based on instance_exec
data/Rakefile CHANGED
@@ -9,6 +9,7 @@ require 'rake/testtask'
9
9
  require 'rake/rdoctask'
10
10
  require 'lib/spec/version'
11
11
  require 'lib/spec/rake/spectask'
12
+ require 'test/rake/rcov_testtask'
12
13
 
13
14
  PKG_NAME = "rspec"
14
15
  # Versioning scheme: MAJOR.MINOR.PATCH
@@ -16,11 +17,7 @@ PKG_NAME = "rspec"
16
17
  # MINOR bumps when the API is broken backwards in a very slight/subtle (but not fatal) way
17
18
  # -OR when a new release is made and propaganda is sent out.
18
19
  # PATCH is bumped for every API addition and/or bugfix (ideally for every commit)
19
- # Later DamageControl can bump PATCH automatically.
20
- #
21
- # (This is subject to change - AH)
22
- #
23
- # REMEMBER TO KEEP PKG_VERSION IN SYNC WITH CHANGELOG
20
+
24
21
  PKG_VERSION = Spec::VERSION::STRING
25
22
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
26
23
  PKG_FILES = FileList[
@@ -44,21 +41,18 @@ Rake::TestTask.new do |t|
44
41
  t.verbose = true
45
42
  end
46
43
 
47
- # text runner tests need to run individually
48
- #Rake::TestTask.new(:test_text_runner) do |t|
49
- # t.libs << "test"
50
- # t.libs << "examples"
51
- # t.test_files = FileList['test/text_runner_test.rb']
52
- # t.verbose = true
53
- #end
54
-
44
+ # Generates the HTML documentation
45
+ desc 'Generate documentation'
46
+ task :doc do
47
+ sh %{pushd doc; webgen; popd }
48
+ end
55
49
 
56
- # Create a task to build the RDOC documentation tree.
50
+ desc 'Generate RDoc'
57
51
  rd = Rake::RDocTask.new("rdoc") do |rdoc|
58
- rdoc.rdoc_dir = 'html'
52
+ rdoc.rdoc_dir = 'doc/output/rdoc'
59
53
  rdoc.title = "RSpec"
60
54
  rdoc.options << '--line-numbers' << '--inline-source' << '--main' << 'README'
61
- rdoc.rdoc_files.include('README', 'CHANGES', 'TUTORIAL')
55
+ rdoc.rdoc_files.include('CHANGES')
62
56
  rdoc.rdoc_files.include('lib/**/*.rb', 'doc/**/*.rdoc')
63
57
  rdoc.rdoc_files.exclude('doc/**/*_attrs.rdoc')
64
58
  end
@@ -111,12 +105,10 @@ spec = Gem::Specification.new do |s|
111
105
  s.rubyforge_project = "rspec"
112
106
  end
113
107
 
114
- desc "Build Gem"
115
108
  Rake::GemPackageTask.new(spec) do |pkg|
116
109
  pkg.need_zip = true
117
110
  pkg.need_tar = true
118
111
  end
119
- task :gem => [:test]
120
112
 
121
113
  # Support Tasks ------------------------------------------------------
122
114
 
@@ -139,22 +131,40 @@ task :todo do
139
131
  egrep /#.*(FIXME|TODO|TBD)/
140
132
  end
141
133
 
142
- task :release => [:verify_env_vars, :release_files, :publish_doc, :publish_news]
134
+ task :clobber do
135
+ rm_rf 'coverage'
136
+ rm_rf 'doc/output'
137
+ end
138
+
139
+ task :release => [:clobber, :test, :verify_env_vars, :upload_releases, :publish_website, :publish_news]
140
+
141
+ task :rcov do
142
+ mv 'coverage', 'doc/output'
143
+ end
143
144
 
144
145
  task :verify_env_vars do
145
146
  raise "RUBYFORGE_USER environment variable not set!" unless ENV['RUBYFORGE_USER']
146
147
  raise "RUBYFORGE_PASSWORD environment variable not set!" unless ENV['RUBYFORGE_PASSWORD']
147
148
  end
148
149
 
149
- task :publish_doc => [:rdoc] do
150
- publisher = Rake::RubyForgePublisher.new(PKG_NAME, ENV['RUBYFORGE_USER'])
150
+ desc "Upload Website to RubyForge"
151
+ task :publish_website => [:doc, :rdoc, :rcov] do
152
+ publisher = Rake::SshDirPublisher.new(
153
+ "#{ENV['RUBYFORGE_USER']}@rubyforge.org",
154
+ "/var/www/gforge-projects/#{PKG_NAME}",
155
+ "doc/output"
156
+ )
157
+
151
158
  publisher.upload
152
159
  end
153
160
 
154
- desc "Release gem to RubyForge. MAKE SURE PKG_VERSION is aligned with the CHANGELOG file"
155
- task :release_files => [:gem] do
161
+ desc "Release gem to RubyForge. You must make sure lib/version.rb is aligned with the CHANGELOG file"
162
+ task :upload_releases => :package do
163
+
156
164
  release_files = FileList[
157
- "pkg/#{PKG_FILE_NAME}.gem"
165
+ "pkg/#{PKG_FILE_NAME}.gem",
166
+ "pkg/#{PKG_FILE_NAME}.tgz",
167
+ "pkg/#{PKG_FILE_NAME}.zip"
158
168
  ]
159
169
 
160
170
  Rake::XForge::Release.new(MetaProject::Project::XForge::RubyForge.new(PKG_NAME)) do |xf|
@@ -167,11 +177,7 @@ task :release_files => [:gem] do
167
177
  end
168
178
 
169
179
  desc "Publish news on RubyForge"
170
- task :publish_news => [:gem] do
171
- release_files = FileList[
172
- "pkg/#{PKG_FILE_NAME}.gem"
173
- ]
174
-
180
+ task :publish_news do
175
181
  Rake::XForge::NewsPublisher.new(MetaProject::Project::XForge::RubyForge.new(PKG_NAME)) do |news|
176
182
  # Never hardcode user name and password in the Rakefile!
177
183
  news.user_name = ENV['RUBYFORGE_USER']
data/bin/spec CHANGED
@@ -1,10 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- if ARGV.empty?
4
- puts "You must provide a directory or file to run"
5
- exit
6
- end
7
-
8
3
  require 'find'
9
4
  require File.dirname(__FILE__) + "/../lib/spec"
10
5
 
@@ -0,0 +1,5 @@
1
+ The website can be generated with
2
+ webgen
3
+ (Install the following gems: webgen, redcloth, bluecloth)
4
+
5
+ TODO: write rake task that will generate website, put rdoc underneath it and upload everyhing.
@@ -0,0 +1,2 @@
1
+ # Configuration file for webgen
2
+ # Used to set the parameters of the plugins
@@ -0,0 +1,38 @@
1
+ module Tags
2
+ # gem install syntax
3
+ require 'syntax/convertors/html'
4
+
5
+ # prints out nicely formatted ruby code in html
6
+ class RubyInliner < DefaultTag
7
+ summary "renders a ruby file in html and inserts it"
8
+ depends_on "Tags"
9
+ add_param 'filename', nil, 'The File to insert'
10
+ set_mandatory 'filename', true
11
+
12
+ CONVERTOR = Syntax::Convertors::HTML.for_syntax "ruby"
13
+
14
+ def initialize
15
+ super
16
+ register_tag( 'ruby_inline')
17
+ end
18
+
19
+ def process_tag(tag, node, ref_node)
20
+ content = ''
21
+ begin
22
+ filename = get_param('filename')
23
+ if !File.exists?(filename)
24
+ if filename[0...1] == "~"
25
+ filename = File.expand_path(filename)
26
+ else
27
+ filename = ref_node.parent.recursive_value( 'src' ) + get_param( 'filename' )
28
+ end
29
+ end
30
+ self.logger.debug { "File location: <#{filename}>" }
31
+ content = File.read( filename )
32
+ rescue
33
+ self.logger.error { "Given file <#{filename}> does not exist (tag specified in <#{ref_node.recursive_value( 'src' )}>" }
34
+ end
35
+ CONVERTOR.convert(content)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,8 @@
1
+ ---
2
+ title: Community
3
+ inMenu: true
4
+ ordering: 5
5
+ ---
6
+ h2. Community
7
+
8
+ Mailing lists, Issue tracker, How to send patches etc.
@@ -0,0 +1,198 @@
1
+ /* CSS Document by JM (ISeeYou-Designs.com) */
2
+
3
+ body {
4
+ background-color:#fff;
5
+ font-family:"Trebuchet MS",arial,sans-serif;
6
+ font-size:62.5%;
7
+ color:#777;
8
+ margin:0;
9
+ padding:0;
10
+ }
11
+ a {
12
+ text-decoration:none;
13
+ color:#222;
14
+ }
15
+ a:hover {
16
+ color:#c00;
17
+ }
18
+ acronym {
19
+ cursor:help;
20
+ border-bottom:1px dotted #ddd;
21
+ }
22
+ #container {
23
+ font-size:1.2em;
24
+ width:550px;
25
+ margin:0 auto;
26
+ border-right:3px double #000;
27
+ }
28
+ #header {
29
+ color:#444;
30
+ margin:0;
31
+ padding:10px;
32
+ background:#fff url(business_card.jpg) no-repeat bottom right;
33
+ }
34
+ #header h1 {
35
+ font-family:"Trebuchet MS",arial,sans-serif;
36
+ font-size:2em;
37
+ color:#333;
38
+ margin:0;
39
+ font-weight:normal;
40
+ }
41
+ #header h1 strong {
42
+ color:#c00;
43
+ }
44
+
45
+ #header h2 {
46
+ margin:140px 0 0 0;
47
+ font-size:1em;
48
+ font-weight:normal;
49
+ color:#999;
50
+ }
51
+ #header h2 strong {
52
+ color:#c00;
53
+ }
54
+ #navigation {
55
+ text-align:right;
56
+ margin:10px 10px 10px auto;
57
+ }
58
+ #navigation {
59
+ margin:0 10px 0 0;
60
+ padding:0;
61
+ }
62
+ #navigation li {
63
+ margin:0;
64
+ padding:0;
65
+ list-style:none;
66
+ display:inline;
67
+ }
68
+
69
+ #navigation li a {
70
+ padding:5px 5px 2px 5px;
71
+ margin:0 1px 0 1px;
72
+ color:#666;
73
+ text-decoration:none;
74
+ font-weight:bold;
75
+ border-bottom:1px solid #c00;
76
+ }
77
+
78
+ #navigation li a:hover {
79
+ color:#C00;
80
+ border-bottom:1px solid #ddd;
81
+ }
82
+ #content {
83
+ margin:20px 0 20px 10px;
84
+ padding:0;
85
+ }
86
+ #content p {
87
+ padding:2px 20px;
88
+ text-align:justify;
89
+ text-indent:0.5cm;
90
+ line-height:1.8em;
91
+ }
92
+ #content h1 {
93
+ display:block;
94
+ margin:50px 0 0 10px;
95
+ padding:0;
96
+ font-family:"Trebuchet MS",arial,sans-serif;
97
+ font-size:1.8em;
98
+ color:#c00;
99
+ border-color:#ddd;
100
+ border-style:solid;
101
+ border-width:0 0 1px 0;
102
+ }
103
+ #content h2 {
104
+ display:block;
105
+ margin:20px 0 0 30px;
106
+ padding:0;
107
+ font-family:"Trebuchet MS",arial,sans-serif;
108
+ font-size:1.1em;
109
+ letter-spacing:2px;
110
+ color:#444;
111
+ border-color:#c00;
112
+ border-style:solid;
113
+ border-width:0 0 1px 0;
114
+ }
115
+ #content .post_info {
116
+ text-align:right;
117
+ margin:0 25px 5px 25px;
118
+ padding:2px;
119
+ font-size:0.8em;
120
+ font-family:arial,sans-serif;
121
+ color:#aaa;
122
+ line-height:0.9em;
123
+ word-spacing:1px;
124
+ border-top:1px solid #ddd;
125
+ }
126
+ #content .post_info a {
127
+ text-transform:uppercase;
128
+ }
129
+ #content blockquote {
130
+ margin:10px 60px;
131
+ padding:5px;
132
+ font-family:"Trebuchet MS",arial,sans-serif;
133
+ font-size:0.9em;
134
+ color:#444;
135
+ border:1px solid #ddd;
136
+ background-color:#eee;
137
+ }
138
+ #content blockquote p {
139
+ margin:0;
140
+ padding:0;
141
+ text-indent:0;
142
+ }
143
+ #content pre {
144
+ margin:10px 60px;
145
+ padding:5px;
146
+ color:#444;
147
+ border:1px solid #eee;
148
+ background-color:#fafafa;
149
+ }
150
+ #content ul {
151
+ margin-left:70px;
152
+ list-style:upper-roman outside;
153
+ font-family:arial,sans-serif;
154
+ font-size:0.9em;
155
+ }
156
+ #content li {
157
+ padding:3px;
158
+ }
159
+ #footer {
160
+ font-size:0.9em;
161
+ font-family:arial,sans-serif;
162
+ margin:90px 0 20px 0;
163
+ padding:5px;
164
+ border-top:1px solid #c00;
165
+ }
166
+ #footer p {
167
+ text-align:right;
168
+ line-height:1.1em;
169
+ color:#bbb;
170
+ font-size:0.9em;
171
+ font-family:arial,sans-serif;
172
+ margin:0;
173
+ padding:0;
174
+ }
175
+ #footer span {
176
+ color:#888;
177
+ }
178
+ #footer a {
179
+ color:#888;
180
+ }
181
+ #footer a:hover {
182
+ color:#aaa;
183
+ }
184
+
185
+ /* Ruby code */
186
+ pre {
187
+ font-size: 12px;
188
+ }
189
+ .keyword { font-family: monospace; color: #8B0000; }
190
+ .constant, .attribute, .global, .class, .module { font-family: monospace; color: black;}
191
+ .string { font-family: monospace; color: #00008B; }
192
+ .ident, .method { font-family: monospace; color: #006400; }
193
+ .number, .char { font-family: monospace; color: #888800; }
194
+ .comment { font-family: monospace; color: purple; }
195
+ .symbol { font-family: monospace; color: #884400; }
196
+ .regex { font-family: monospace; color: #808080; }
197
+ .punct { font-family: monospace; color: black; }
198
+ .escape, .interp, .expr { font-family: monospace; color: black; background-color: #dddddd; }
@@ -0,0 +1,34 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{lang:}">
4
+ <head>
5
+ <title>{title: }</title>
6
+ <link href="{relocatable: default.css}" rel="stylesheet" />
7
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8
+ </head>
9
+ <body>
10
+
11
+ <div id="container">
12
+ <div id="header">
13
+ <h2>Behaviour Driven Development for <strong>Ruby</strong></h2>
14
+ <h1>RSpec</h1>
15
+ </div>
16
+
17
+ <div id="navigation">
18
+ <!-- Not sure how to get this in the menu -->
19
+ <a href="rdoc/index.html">RDoc</a>
20
+ <a href="coverage/index.html">RCov</a>
21
+ {menu: }
22
+ </div>
23
+
24
+ <div id="content">
25
+ {content: }
26
+
27
+ <div id="footer">
28
+ Webdesign by <a href="http://www.oswd.org/user/profile/id/9462">JM</a>
29
+ </div>
30
+ </div>
31
+ </div>
32
+
33
+ </body>
34
+ </html>