qed 2.8.8 → 2.9.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.
- data/{.confile.rb → .config.rb} +2 -2
- data/.ruby +30 -10
- data/HISTORY.rdoc +27 -8
- data/README.rdoc +47 -24
- data/lib/qed.yml +30 -10
- data/lib/qed/cli.rb +4 -0
- data/lib/qed/cli/qed.rb +30 -26
- data/lib/qed/configure.rb +20 -0
- data/lib/qed/core_ext.rb +6 -0
- data/lib/qed/evaluator.rb +4 -1
- data/lib/qed/rc.rb +12 -0
- data/lib/qed/reporter/abstract.rb +14 -2
- data/lib/qed/session.rb +7 -8
- data/lib/qed/settings.rb +65 -122
- data/lib/qed/step.rb +7 -4
- metadata +44 -20
data/{.confile.rb → .config.rb}
RENAMED
@@ -4,7 +4,7 @@ config :qed do
|
|
4
4
|
# default configuration
|
5
5
|
end
|
6
6
|
|
7
|
-
config :qed, :simplecov do
|
7
|
+
config :qed, :profile=>:simplecov, :preset=>true do
|
8
8
|
require 'simplecov'
|
9
9
|
SimpleCov.start do
|
10
10
|
coverage_dir 'log/coverage'
|
@@ -12,7 +12,7 @@ config :qed, :simplecov do
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
config :qed, :example do
|
15
|
+
config :qed, :profile=>:example do
|
16
16
|
puts ("*" * 78)
|
17
17
|
puts
|
18
18
|
|
data/.ruby
CHANGED
@@ -10,18 +10,30 @@ copyrights:
|
|
10
10
|
license: BSD-2-Clause
|
11
11
|
requirements:
|
12
12
|
- name: ansi
|
13
|
+
- name: brass
|
13
14
|
- name: facets
|
14
15
|
version: 2.8+
|
15
|
-
- name:
|
16
|
-
- name: confection
|
17
|
-
- name: detroit
|
16
|
+
- name: courtier
|
18
17
|
groups:
|
19
|
-
-
|
18
|
+
- optional
|
19
|
+
development: true
|
20
|
+
- name: blankslate
|
21
|
+
groups:
|
22
|
+
- optional
|
23
|
+
- test
|
20
24
|
development: true
|
21
25
|
- name: ae
|
22
26
|
groups:
|
23
27
|
- test
|
24
28
|
development: true
|
29
|
+
- name: detroit
|
30
|
+
groups:
|
31
|
+
- build
|
32
|
+
development: true
|
33
|
+
- name: fire
|
34
|
+
groups:
|
35
|
+
- build
|
36
|
+
development: true
|
25
37
|
dependencies: []
|
26
38
|
alternatives: []
|
27
39
|
conflicts: []
|
@@ -30,10 +42,18 @@ repositories:
|
|
30
42
|
scm: git
|
31
43
|
name: upstream
|
32
44
|
resources:
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
45
|
+
- uri: http://rubyworks.github.com/qed
|
46
|
+
name: home
|
47
|
+
type: home
|
48
|
+
- uri: http://github.com/rubyworks/qed
|
49
|
+
name: code
|
50
|
+
type: code
|
51
|
+
- uri: http://groups.google.com/groups/rubyworks-mailinglist
|
52
|
+
name: mail
|
53
|
+
type: mail
|
54
|
+
- uri: http://github.com/rubyworks/qed/issues
|
55
|
+
name: bugs
|
56
|
+
type: bugs
|
37
57
|
extra: {}
|
38
58
|
load_path:
|
39
59
|
- lib
|
@@ -41,10 +61,10 @@ revision: 0
|
|
41
61
|
created: '2009-06-16'
|
42
62
|
summary: Quod Erat Demonstrandum
|
43
63
|
title: QED
|
44
|
-
version: 2.
|
64
|
+
version: 2.9.0
|
45
65
|
name: qed
|
46
66
|
webcvs: http://github.com/rubyworks/qed/blob/master/
|
47
67
|
description: ! 'QED (Quality Ensured Demonstrations) is a TDD/BDD framework
|
48
68
|
|
49
69
|
utilizing Literate Programming techniques.'
|
50
|
-
date: '2012-
|
70
|
+
date: '2012-04-14'
|
data/HISTORY.rdoc
CHANGED
@@ -1,8 +1,27 @@
|
|
1
1
|
= RELEASE HISTORY
|
2
2
|
|
3
|
-
== 2.
|
3
|
+
== 2.9.0 | 2012-05-19
|
4
4
|
|
5
|
-
|
5
|
+
IMPORTANT! The `.qed` configuration file is no longer used for configuration.
|
6
|
+
Either use a unified `Config.rb` file or require a special config file via the
|
7
|
+
`-r` option, e.g. `qed -r ./config/cov.rb`.
|
8
|
+
|
9
|
+
Configuration is now handled by the RC library. The only other
|
10
|
+
form of configuration supported is that of requiring a special file
|
11
|
+
directly via `-r ./path/to/file.rb`. This keeps the code as
|
12
|
+
simple as possible without giving-up functionality. Because the old
|
13
|
+
`.qed` configuration file is no longer supported, this release has
|
14
|
+
a major version bump.
|
15
|
+
|
16
|
+
Changes:
|
17
|
+
|
18
|
+
* Utilize the RC configuration management library.
|
19
|
+
* Improve hash-arrow assertion notation.
|
20
|
+
|
21
|
+
|
22
|
+
== 2.8.8 | 2012-03-17
|
23
|
+
|
24
|
+
Feel like a heel after the last four releases. The simplest solution
|
6
25
|
to the configuration issue is to allow traditional configuration
|
7
26
|
trump confection based configuration. If the former is used, then
|
8
27
|
the later will never even load. Problem solved.
|
@@ -21,13 +40,13 @@ variable `config='legacy'`.
|
|
21
40
|
|
22
41
|
Changes:
|
23
42
|
|
24
|
-
* Fix bug that prevented
|
43
|
+
* Fix bug that prevented default demo locations from being used.
|
25
44
|
* Change environment variable to config='legacy' to deactivate Confection.
|
26
45
|
|
27
46
|
|
28
47
|
== 2.8.6 | 2012-03-15
|
29
48
|
|
30
|
-
This release simply make the configuration more
|
49
|
+
This release simply make the configuration more versatile by supporting
|
31
50
|
Confection, task directory and traditional `.qed` configuration.
|
32
51
|
|
33
52
|
Changes:
|
@@ -58,7 +77,7 @@ Changes:
|
|
58
77
|
== 2.8.3 | 2012-03-14 18:00
|
59
78
|
|
60
79
|
What a difference a week makes ;) The Confection library has been substantially
|
61
|
-
improved and if that trend
|
80
|
+
improved and if that trend continues at all then I think it will be well worth
|
62
81
|
supporting. So with this release QED will again move configuration handling
|
63
82
|
over to Confection. Jump over to the Confection project to learn how to use it.
|
64
83
|
In short, this release reverts the previous release. Along with this change,
|
@@ -80,8 +99,8 @@ independent file. The use of the Confection library was a "noble
|
|
80
99
|
idea", but in the end not one that's likely to gain traction among
|
81
100
|
developers in general, so we have decided to revert back to the
|
82
101
|
more traditional `.qed` config file. However, we also added built-in
|
83
|
-
support for `task/qed.rb`, which we
|
84
|
-
clean project structures. Further, QED also
|
102
|
+
support for `task/qed.rb`, which we encourage so as to promote
|
103
|
+
clean project structures. Further, QED also supports the `.map` YAML
|
85
104
|
configuration file which allows you to move the QED config file
|
86
105
|
wherever you might prefer it. Just add a `qed: path/to/config/file`
|
87
106
|
entry.
|
@@ -413,7 +432,7 @@ Changes:
|
|
413
432
|
|
414
433
|
== 1.1.1 | 2009-09-05
|
415
434
|
|
416
|
-
This release
|
435
|
+
This release needs a description.
|
417
436
|
|
418
437
|
Changes:
|
419
438
|
|
data/README.rdoc
CHANGED
@@ -29,8 +29,8 @@ any level of abstraction, from unit test to systems tests.
|
|
29
29
|
|
30
30
|
* Write tests and documentation in the same breath!
|
31
31
|
* Demos can be RDoc, Markdown or any other conforming text format.
|
32
|
-
*
|
33
|
-
* Table
|
32
|
+
* Can use any BRASS compliant assertion framework, such as the the excellent AE (Assertive Expressive) library.
|
33
|
+
* Data and Table macros allows large sets of data to be tested by the same code.
|
34
34
|
* Documentation tool provides nice output with jQuery-based TOC.
|
35
35
|
|
36
36
|
|
@@ -38,22 +38,25 @@ any level of abstraction, from unit test to systems tests.
|
|
38
38
|
|
39
39
|
=== Assertion Syntax
|
40
40
|
|
41
|
-
QED
|
42
|
-
|
41
|
+
QED can use any BRASS compliant assertions framework. Simply require the library in
|
42
|
+
ones applique (see below). Traditionally this has been the AE (Assertive Expressive) library,
|
43
|
+
which provides an elegant means to make assertions. To give a quick overview, assertion
|
44
|
+
can be written as:
|
43
45
|
|
44
46
|
4.assert == 5
|
45
47
|
|
46
48
|
In this example, because 4 != 5, this expression will raise an Assertion
|
47
49
|
exception. QED's Runner class is thus just a means of running and capturing
|
48
|
-
code blocks containing
|
50
|
+
code blocks containing such assertions.
|
49
51
|
|
50
|
-
You can learn more about AE at http://rubyworks.github.com/
|
52
|
+
You can learn more about BRASS and AE at http://rubyworks.github.com/brass and
|
53
|
+
http://rubyworks.github.com/ae, repectively.
|
51
54
|
|
52
55
|
=== Document Structure
|
53
56
|
|
54
|
-
QED documents are simply text files called *demonstrandum
|
55
|
-
largely consist of free-form descriptive text, they are a practice
|
56
|
-
Literate Programming. For example:
|
57
|
+
QED documents are simply text files called *demonstrandum* (demos for short).
|
58
|
+
Because they largely consist of free-form descriptive text, they are a practice
|
59
|
+
pure Literate Programming. For example:
|
57
60
|
|
58
61
|
= Example
|
59
62
|
|
@@ -91,12 +94,15 @@ To run a document through QED, simply use the +qed+ command.
|
|
91
94
|
The <code>-v</code> option specifies verbatim mode, which outputs the entire
|
92
95
|
document.
|
93
96
|
|
94
|
-
Notice we placed the QED document in a <code>demo/</code> directory,
|
95
|
-
standard place that demonstrations have to go. They can be placed anywhere
|
96
|
-
in a project that is preferred (lately I've been use qed
|
97
|
-
|
98
|
-
|
99
|
-
|
97
|
+
Notice we placed the QED document in a <code>demo/</code> directory, there is
|
98
|
+
no standard place that demonstrations have to go. They can be placed anywhere
|
99
|
+
in a project that is preferred (lately I've been use `qed/`). However, the
|
100
|
+
`qed` command will look for `qed/`, `demo/`, `demos/` and `spec/` in that order
|
101
|
+
if no location is specified.
|
102
|
+
|
103
|
+
Also notice the use of `<code>01_</code>` prefix in front of the file name.
|
104
|
+
While this is not strictly necessary, it helps order the documents nicely,
|
105
|
+
in particular when generating QED documentation ("QEDocs").
|
100
106
|
|
101
107
|
=== Utilizing Applique
|
102
108
|
|
@@ -128,24 +134,28 @@ how you can put the the system to use.
|
|
128
134
|
|
129
135
|
=== Configuration
|
130
136
|
|
131
|
-
QED uses the {
|
137
|
+
QED uses the {RC}[http://rubyworks.github.com/rc] library to
|
132
138
|
handle configuration.
|
133
139
|
|
134
140
|
Here's a generally useful example of using SimpleCov to generate a test
|
135
|
-
coverage report when running your QED demos. Add this to your `
|
141
|
+
coverage report when running your QED demos. Add this to your `Config.rb`
|
142
|
+
file:
|
136
143
|
|
137
|
-
config :qed, :
|
144
|
+
config :qed, :coverage do
|
138
145
|
require 'simplecov'
|
139
146
|
SimpleCov.start do
|
140
147
|
coverage_dir 'log/coverage'
|
141
148
|
end
|
142
149
|
end
|
143
150
|
|
144
|
-
|
145
|
-
Either approch makes the `coverage` profile available to the `qed` command.
|
151
|
+
You can use the profile via the `-p/--profile` option on the command line:
|
146
152
|
|
147
153
|
$ qed -p coverage
|
148
154
|
|
155
|
+
Or by setting the `profile` environment variable.
|
156
|
+
|
157
|
+
$ profile=coverage qed
|
158
|
+
|
149
159
|
=== Generating Documentation
|
150
160
|
|
151
161
|
To generate documentation from QED documents, use the +qedoc+ command.
|
@@ -166,7 +176,7 @@ QED depends on the following external libraries:
|
|
166
176
|
|
167
177
|
* {BRASS}[http://rubyworks.github.com/brass] - Assertions System
|
168
178
|
* {ANSI}[http://rubyworks.github.com/ansi] - ANSI Color Codes
|
169
|
-
* {
|
179
|
+
* {RC}[http://rubyworks.github.com/rc] - Runtime Configuration
|
170
180
|
* {Facets}[http://rubyworks.github.com/facets] - Core Extensions
|
171
181
|
|
172
182
|
These will be automatically installed when installing QED via RubyGems,
|
@@ -179,13 +189,26 @@ Optional libraries that are generally useful with QED.
|
|
179
189
|
Install these individually and require them in your applique to use.
|
180
190
|
|
181
191
|
|
192
|
+
== Development
|
193
|
+
|
194
|
+
=== Testing
|
195
|
+
|
196
|
+
QED uses itself for testing, which can be a bit tricky. But works fine for
|
197
|
+
the most part. In the future we may add some addition tests via another
|
198
|
+
test framework to ensure full coverage. But for now QED is proving sufficient.
|
199
|
+
|
200
|
+
To run the tests, use `qed` command line tool --ideally use `$ ruby -Ilib bin/qed`
|
201
|
+
to ensure the current version of QED is being used.
|
202
|
+
|
203
|
+
For convenience, use `$ fire spec` to run the test specifications. To also
|
204
|
+
generate a test coverage report use `$ fire spec:cov`.
|
205
|
+
|
206
|
+
|
182
207
|
== Copyrights
|
183
208
|
|
184
|
-
|
209
|
+
(BSD 2 Clause license)
|
185
210
|
|
186
211
|
Copyright (c) 2009 Rubyworks, Thomas Sawyer
|
187
212
|
|
188
|
-
BSD 2 Clause License
|
189
|
-
|
190
213
|
See COPYING.rdoc for details.
|
191
214
|
|
data/lib/qed.yml
CHANGED
@@ -10,18 +10,30 @@ copyrights:
|
|
10
10
|
license: BSD-2-Clause
|
11
11
|
requirements:
|
12
12
|
- name: ansi
|
13
|
+
- name: brass
|
13
14
|
- name: facets
|
14
15
|
version: 2.8+
|
15
|
-
- name:
|
16
|
-
- name: confection
|
17
|
-
- name: detroit
|
16
|
+
- name: courtier
|
18
17
|
groups:
|
19
|
-
-
|
18
|
+
- optional
|
19
|
+
development: true
|
20
|
+
- name: blankslate
|
21
|
+
groups:
|
22
|
+
- optional
|
23
|
+
- test
|
20
24
|
development: true
|
21
25
|
- name: ae
|
22
26
|
groups:
|
23
27
|
- test
|
24
28
|
development: true
|
29
|
+
- name: detroit
|
30
|
+
groups:
|
31
|
+
- build
|
32
|
+
development: true
|
33
|
+
- name: fire
|
34
|
+
groups:
|
35
|
+
- build
|
36
|
+
development: true
|
25
37
|
dependencies: []
|
26
38
|
alternatives: []
|
27
39
|
conflicts: []
|
@@ -30,10 +42,18 @@ repositories:
|
|
30
42
|
scm: git
|
31
43
|
name: upstream
|
32
44
|
resources:
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
45
|
+
- uri: http://rubyworks.github.com/qed
|
46
|
+
name: home
|
47
|
+
type: home
|
48
|
+
- uri: http://github.com/rubyworks/qed
|
49
|
+
name: code
|
50
|
+
type: code
|
51
|
+
- uri: http://groups.google.com/groups/rubyworks-mailinglist
|
52
|
+
name: mail
|
53
|
+
type: mail
|
54
|
+
- uri: http://github.com/rubyworks/qed/issues
|
55
|
+
name: bugs
|
56
|
+
type: bugs
|
37
57
|
extra: {}
|
38
58
|
load_path:
|
39
59
|
- lib
|
@@ -41,10 +61,10 @@ revision: 0
|
|
41
61
|
created: '2009-06-16'
|
42
62
|
summary: Quod Erat Demonstrandum
|
43
63
|
title: QED
|
44
|
-
version: 2.
|
64
|
+
version: 2.9.0
|
45
65
|
name: qed
|
46
66
|
webcvs: http://github.com/rubyworks/qed/blob/master/
|
47
67
|
description: ! 'QED (Quality Ensured Demonstrations) is a TDD/BDD framework
|
48
68
|
|
49
69
|
utilizing Literate Programming techniques.'
|
50
|
-
date: '2012-
|
70
|
+
date: '2012-04-14'
|
data/lib/qed/cli.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
if RUBY_VERSION < '1.9'
|
2
|
+
require 'qed/rc' unless ENV['norc']
|
3
|
+
require 'qed/configure'
|
2
4
|
require 'qed/cli/qed'
|
3
5
|
require 'qed/cli/qedoc'
|
4
6
|
else
|
7
|
+
require_relative 'rc' unless ENV['norc']
|
8
|
+
require_relative 'configure'
|
5
9
|
require_relative('cli/qed')
|
6
10
|
require_relative('cli/qedoc')
|
7
11
|
end
|
data/lib/qed/cli/qed.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
module QED
|
2
2
|
|
3
|
-
require 'qed/session'
|
4
|
-
|
5
3
|
#
|
6
4
|
def self.cli(*argv)
|
7
5
|
Session.cli(*argv)
|
@@ -12,9 +10,9 @@ module QED
|
|
12
10
|
#
|
13
11
|
# Session settings are passed to `Session.new`.
|
14
12
|
#
|
15
|
-
def self.settings
|
16
|
-
|
17
|
-
end
|
13
|
+
#def self.settings
|
14
|
+
# @settings ||= Settings.new
|
15
|
+
#end
|
18
16
|
|
19
17
|
#
|
20
18
|
# Command line interface for running demos.
|
@@ -23,16 +21,16 @@ module QED
|
|
23
21
|
require 'optparse'
|
24
22
|
require 'shellwords'
|
25
23
|
|
26
|
-
|
24
|
+
# we are loading this here instead of above so simplecov coverage works better
|
25
|
+
# (actually, this is really not a problem anymore, but we'll leave it for now)
|
26
|
+
require 'qed/session'
|
27
27
|
|
28
|
-
#
|
29
|
-
#
|
30
|
-
# exit -1
|
31
|
-
#end
|
28
|
+
# If RC config file is available.
|
29
|
+
#RC.commit_configuration
|
32
30
|
|
33
|
-
|
31
|
+
options = cli_parse(argv)
|
34
32
|
|
35
|
-
session = Session.new(
|
33
|
+
session = Session.new(options)
|
36
34
|
success = session.run
|
37
35
|
|
38
36
|
exit -1 unless success
|
@@ -43,7 +41,8 @@ module QED
|
|
43
41
|
#
|
44
42
|
def self.cli_parse(argv)
|
45
43
|
options = {}
|
46
|
-
|
44
|
+
|
45
|
+
parser = OptionParser.new do |opt|
|
47
46
|
opt.banner = "Usage: qed [options] <files...>"
|
48
47
|
|
49
48
|
opt.separator("Report Formats (pick one):")
|
@@ -52,10 +51,10 @@ module QED
|
|
52
51
|
# options[:format] = :dotprogress
|
53
52
|
#end
|
54
53
|
opt.on('--verbatim', '-v', "shortcut for verbatim reporter") do
|
55
|
-
|
54
|
+
options[:format] = :verbatim
|
56
55
|
end
|
57
56
|
opt.on('--tapy', '-y', "shortcut for TAP-Y reporter") do
|
58
|
-
|
57
|
+
options[:format] = :tapy
|
59
58
|
end
|
60
59
|
#opt.on('--bullet', '-b', "use bullet-point reporter") do
|
61
60
|
# options[:format] = :bullet
|
@@ -67,25 +66,28 @@ module QED
|
|
67
66
|
# options[:format] = :script # psuedo-reporter
|
68
67
|
#end
|
69
68
|
opt.on('--format', '-f FORMAT', "use custom reporter") do |format|
|
70
|
-
|
69
|
+
options[:format] = format.to_sym
|
71
70
|
end
|
72
71
|
|
73
72
|
opt.separator("Control Options:")
|
74
73
|
|
75
74
|
opt.on('-p', '--profile NAME', "load runtime profile") do |name|
|
76
|
-
|
75
|
+
options[:profile] = name
|
77
76
|
end
|
78
77
|
opt.on('--comment', '-c', "run comment code") do
|
79
|
-
|
78
|
+
options[:mode] = :comment
|
80
79
|
end
|
81
80
|
opt.on('--loadpath', "-I PATH", "add paths to $LOAD_PATH") do |paths|
|
82
|
-
|
81
|
+
options[:loadpath] = paths.split(/[:;]/).map{|d| File.expand_path(d)}
|
83
82
|
end
|
84
|
-
opt.on('--require', "-r LIB", "require
|
85
|
-
|
83
|
+
opt.on('--require', "-r LIB", "require feature (immediately)") do |paths|
|
84
|
+
requires = paths.split(/[:;]/)
|
85
|
+
requires.each do |file|
|
86
|
+
require file
|
87
|
+
end
|
86
88
|
end
|
87
89
|
opt.on('--rooted', '-R', "run from project root instead of temporary directory") do
|
88
|
-
|
90
|
+
options[:rooted] = true
|
89
91
|
end
|
90
92
|
opt.on('--trace', '-t [COUNT]', "number of backtraces for exceptions (0 for all)") do |cnt|
|
91
93
|
#options[:trace] = true
|
@@ -113,8 +115,8 @@ module QED
|
|
113
115
|
|
114
116
|
unless settings.profiles.empty?
|
115
117
|
puts "Available Profiles:"
|
116
|
-
require 'confection'
|
117
|
-
|
118
|
+
#require 'confection'
|
119
|
+
QED.profiles.each do |name|
|
118
120
|
next if name.strip == ''
|
119
121
|
puts " -p #{name}"
|
120
122
|
end
|
@@ -124,9 +126,11 @@ module QED
|
|
124
126
|
end
|
125
127
|
end
|
126
128
|
|
127
|
-
|
129
|
+
parser.parse!(argv)
|
130
|
+
|
131
|
+
options[:files] = argv unless argv.empty?
|
128
132
|
|
129
|
-
return
|
133
|
+
return options
|
130
134
|
end
|
131
135
|
|
132
136
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module QED
|
2
|
+
|
3
|
+
#
|
4
|
+
def self.configure(name=nil, &block)
|
5
|
+
name = (name || 'default').to_s
|
6
|
+
profiles[name] = block if block
|
7
|
+
profiles[name]
|
8
|
+
end
|
9
|
+
|
10
|
+
# Alias for configure.
|
11
|
+
def self.profile(name=nil, &block)
|
12
|
+
configure(name, &block)
|
13
|
+
end
|
14
|
+
|
15
|
+
#
|
16
|
+
def self.profiles
|
17
|
+
@profiles ||= {}
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
data/lib/qed/core_ext.rb
CHANGED
@@ -34,7 +34,13 @@ class Object
|
|
34
34
|
InstanceExecMethods.module_eval { remove_method(method_name) } rescue nil
|
35
35
|
end
|
36
36
|
end
|
37
|
+
end
|
37
38
|
|
39
|
+
#
|
40
|
+
# This is used by the `#=>` notation.
|
41
|
+
#
|
42
|
+
def must_return(value)
|
43
|
+
assert(self == value, "#{self.inspect} #=> #{value.inspect}")
|
38
44
|
end
|
39
45
|
|
40
46
|
end
|
data/lib/qed/evaluator.rb
CHANGED
@@ -16,7 +16,10 @@ module QED
|
|
16
16
|
# @param [Demo] demo
|
17
17
|
# The demo to run.
|
18
18
|
#
|
19
|
-
# @
|
19
|
+
# @option options [Boolean] :applique
|
20
|
+
# Is this applique code?
|
21
|
+
#
|
22
|
+
# @option options [Array] :observers
|
20
23
|
# Objects that respond to observable interface.
|
21
24
|
# Typically this is just a Reporter instance.
|
22
25
|
#
|
data/lib/qed/rc.rb
ADDED
@@ -139,6 +139,10 @@ module Reporter
|
|
139
139
|
#demos << demo
|
140
140
|
end
|
141
141
|
|
142
|
+
#
|
143
|
+
def before_import(file)
|
144
|
+
end
|
145
|
+
|
142
146
|
#
|
143
147
|
def before_step(step)
|
144
148
|
end
|
@@ -160,6 +164,10 @@ module Reporter
|
|
160
164
|
def demo(demo)
|
161
165
|
end
|
162
166
|
|
167
|
+
# Right before import.
|
168
|
+
def import(file)
|
169
|
+
end
|
170
|
+
|
163
171
|
# Right before rule section.
|
164
172
|
def rule(step)
|
165
173
|
end
|
@@ -187,13 +195,17 @@ module Reporter
|
|
187
195
|
|
188
196
|
# After running a step that failed.
|
189
197
|
def fail(step, assertion)
|
190
|
-
|
198
|
+
## @fail << [step, assertion]
|
191
199
|
end
|
192
200
|
|
193
201
|
# After running a step that raised an error.
|
194
202
|
def error(step, exception)
|
195
203
|
raise exception if $DEBUG # TODO: do we really want to do it like this?
|
196
|
-
|
204
|
+
## @error << [step, exception]
|
205
|
+
end
|
206
|
+
|
207
|
+
#
|
208
|
+
def after_import(file)
|
197
209
|
end
|
198
210
|
|
199
211
|
#
|
data/lib/qed/session.rb
CHANGED
@@ -19,15 +19,14 @@ module QED
|
|
19
19
|
attr :settings
|
20
20
|
|
21
21
|
# New Session
|
22
|
-
def initialize(settings
|
22
|
+
def initialize(settings={})
|
23
23
|
require_reporters
|
24
24
|
|
25
25
|
case settings
|
26
26
|
when Settings
|
27
27
|
@settings = settings
|
28
28
|
else
|
29
|
-
|
30
|
-
@settings = Settings.new(options)
|
29
|
+
@settings = Settings.new(settings)
|
31
30
|
end
|
32
31
|
end
|
33
32
|
|
@@ -127,11 +126,11 @@ module QED
|
|
127
126
|
|
128
127
|
reset_assertion_counts
|
129
128
|
|
129
|
+
#require_profile # <-- finally runs the profile
|
130
|
+
|
130
131
|
prepare_loadpath
|
131
132
|
require_libraries
|
132
133
|
|
133
|
-
require_profile # TODO: here or in chdir?
|
134
|
-
|
135
134
|
Dir.chdir(directory) do
|
136
135
|
# pre-parse demos
|
137
136
|
demos.each{ |demo| demo.steps }
|
@@ -173,9 +172,9 @@ module QED
|
|
173
172
|
end
|
174
173
|
|
175
174
|
#
|
176
|
-
def require_profile
|
177
|
-
|
178
|
-
end
|
175
|
+
#def require_profile
|
176
|
+
# settings.load_profile(profile)
|
177
|
+
#end
|
179
178
|
|
180
179
|
# Returns a list of demo files. The files returned depends on the
|
181
180
|
# +files+ attribute and if none given, then the current run mode.
|
data/lib/qed/settings.rb
CHANGED
@@ -1,28 +1,36 @@
|
|
1
|
+
require 'qed/configure'
|
2
|
+
|
1
3
|
module QED
|
2
4
|
|
3
|
-
# Settings ecapsulates setup
|
5
|
+
# Settings ecapsulates setup configuration for running QED.
|
6
|
+
#
|
7
|
+
# When running `qed` on the command line tool, QED can use
|
8
|
+
# either a automatic configuration file, via the RC library,
|
9
|
+
# or setup configuration via an explicitly required file.
|
4
10
|
#
|
5
|
-
#
|
11
|
+
# Using a master configuraiton file, add a `config :qed` entry.
|
12
|
+
# For example:
|
6
13
|
#
|
7
|
-
# config :qed, :
|
14
|
+
# config :qed, :simplecov, :preset=>true do
|
8
15
|
# require 'simplecov'
|
9
16
|
# SimpleCov.start do
|
10
17
|
# coverage_dir 'log/coverage'
|
11
18
|
# end
|
12
19
|
# end
|
13
20
|
#
|
14
|
-
#
|
15
|
-
# toplevel `.qed`, `.qed.rb`, `qed.rb` or these files in the `task/`
|
16
|
-
# directory or in the form of `task/<name>.qed`. The same example as
|
17
|
-
# above in one of these files would be:
|
21
|
+
# To not use RC, just create a requirable file such as `config/qed-coverage.rb`
|
18
22
|
#
|
19
|
-
#
|
23
|
+
# QED.configure do |qed|
|
20
24
|
# require 'simplecov'
|
21
25
|
# SimpleCov.start do
|
22
26
|
# coverage_dir 'log/coverage'
|
23
27
|
# end
|
24
28
|
# end
|
25
29
|
#
|
30
|
+
# Then when running qed use:
|
31
|
+
#
|
32
|
+
# $ qed -r ./config/qed-coverage.rb
|
33
|
+
#
|
26
34
|
class Settings
|
27
35
|
|
28
36
|
require 'tmpdir'
|
@@ -35,34 +43,21 @@ module QED
|
|
35
43
|
# Glob pattern used to search for project's root directory.
|
36
44
|
ROOT_PATTERN = '{.map,.ruby,.git/,.hg/,_darcs/}'
|
37
45
|
|
38
|
-
# Glob pattern used to find QED configuration file relative to root directory.
|
39
|
-
CONFIG_PATTERN = '{.,,task/}qed,qedfile{,.rb}'
|
40
|
-
|
41
46
|
# Home directory.
|
42
47
|
HOME = File.expand_path('~')
|
43
48
|
|
44
49
|
# Directory names to omit from automatic selection.
|
45
50
|
OMIT_PATHS = %w{applique helpers support sample samples fixture fixtures}
|
46
51
|
|
47
|
-
# QED support configuration file mapping.
|
48
|
-
#MAP_FILE = '.map'
|
49
|
-
|
50
|
-
#
|
51
|
-
# Mast configuration file lookup glob.
|
52
|
-
#
|
53
|
-
CONFECTION_GLOB = '{,.}confile{.rb,}'
|
54
|
-
|
55
|
-
#
|
56
|
-
# Traditional configuration file lookup glob.
|
57
|
-
#
|
58
|
-
CONFIG_GLOB = '{,.,task/}qed{,file}{,.rb}'
|
59
|
-
|
60
52
|
#
|
61
53
|
# Initialize new Settings instance.
|
62
54
|
#
|
63
55
|
def initialize(options={})
|
64
56
|
initialize_defaults
|
65
|
-
|
57
|
+
|
58
|
+
@profile = (options.delete(:profile) || default_profile).to_s
|
59
|
+
|
60
|
+
load_profile
|
66
61
|
|
67
62
|
options.each do |key, val|
|
68
63
|
send("#{key}=", val) if val
|
@@ -70,75 +65,23 @@ module QED
|
|
70
65
|
end
|
71
66
|
|
72
67
|
#
|
73
|
-
|
74
|
-
@files = nil
|
75
|
-
@format = :dot
|
76
|
-
@trace = false
|
77
|
-
@mode = nil
|
78
|
-
@loadpath = ['lib']
|
79
|
-
@requires = []
|
80
|
-
@omit = OMIT_PATHS # TODO: eventually make configurable
|
81
|
-
@rootless = false
|
82
|
-
|
83
|
-
@profile = ENV['profile'] || :default
|
84
|
-
end
|
85
|
-
|
86
|
-
#
|
87
|
-
# QED can use either a maser configuration file, via the Confection
|
88
|
-
# library, or more traditional toplevel or task directory files. Only
|
89
|
-
# one of these two approaches can be used and the traditional
|
90
|
-
# system, if used, will override use of the confection system.
|
91
|
-
#
|
92
|
-
# Using a master configuraiton file, add for example:
|
93
|
-
#
|
94
|
-
# config :qed, :simplecov do
|
95
|
-
# require 'simplecov'
|
96
|
-
# SimpleCov.start do
|
97
|
-
# coverage_dir 'log/coverage'
|
98
|
-
# end
|
99
|
-
# end
|
68
|
+
# Initialize default settings.
|
100
69
|
#
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
#
|
112
|
-
def initialize_configuration
|
113
|
-
@profiles = {}
|
114
|
-
|
115
|
-
# traditional
|
116
|
-
Dir.glob(File.join(root, CONFIG_GLOB), File::FNM_CASEFOLD).each do |file|
|
117
|
-
next unless File.file?(file)
|
118
|
-
instance_eval(File.read(file), file)
|
119
|
-
end
|
120
|
-
|
121
|
-
# task directory config files
|
122
|
-
Dir.glob(File.join(root, 'task/*.qed')).each do |file|
|
123
|
-
next unless File.file?(file)
|
124
|
-
instance_eval(File.read(file), file)
|
125
|
-
end
|
126
|
-
|
127
|
-
# don't use confection gem if other approaches are being used.
|
128
|
-
return unless @profiles.empty?
|
129
|
-
|
130
|
-
# confection
|
131
|
-
if confection_file
|
132
|
-
require 'confection'
|
133
|
-
Confection.profiles(:qed).each do |name|
|
134
|
-
@profiles[name.to_s] = lambda{ load_profile_from_confection(name) }
|
135
|
-
end
|
136
|
-
end
|
70
|
+
def initialize_defaults
|
71
|
+
@files = nil #DEFAULT_FILES
|
72
|
+
@format = :dot
|
73
|
+
@trace = false
|
74
|
+
@mode = nil # ?
|
75
|
+
@loadpath = ['lib']
|
76
|
+
@omit = OMIT_PATHS
|
77
|
+
@rootless = false
|
78
|
+
@requires = []
|
79
|
+
#@profile = :default
|
137
80
|
end
|
138
81
|
|
139
|
-
#
|
140
|
-
def
|
141
|
-
|
82
|
+
# Profile name can come from `profile` or `p` environment variables.
|
83
|
+
def default_profile
|
84
|
+
ENV['profile'] || ENV['p'] || 'default'
|
142
85
|
end
|
143
86
|
|
144
87
|
# Demonstration files (or globs).
|
@@ -183,8 +126,23 @@ module QED
|
|
183
126
|
# Operate from system temporary directory?
|
184
127
|
attr_accessor :rootless
|
185
128
|
|
186
|
-
#
|
187
|
-
|
129
|
+
#
|
130
|
+
# Load QED configuration profile. The load procedure is stored as
|
131
|
+
# a Proc object in a hash b/c different configuration systems
|
132
|
+
# can be used.
|
133
|
+
#
|
134
|
+
def load_profile
|
135
|
+
config = QED.profiles[@profile]
|
136
|
+
config.call(self) if config
|
137
|
+
end
|
138
|
+
|
139
|
+
#
|
140
|
+
# Profiles are collected from the RC library, unless
|
141
|
+
# RC is deactivated via the override file.
|
142
|
+
#
|
143
|
+
def profiles
|
144
|
+
QED.profiles.keys
|
145
|
+
end
|
188
146
|
|
189
147
|
#
|
190
148
|
# Operate relative to project root directory, or use system's location.
|
@@ -234,6 +192,7 @@ module QED
|
|
234
192
|
FileUtils.mkdir_p(tmpdir)
|
235
193
|
end
|
236
194
|
|
195
|
+
=begin
|
237
196
|
#
|
238
197
|
# Define a profile.
|
239
198
|
#
|
@@ -251,24 +210,7 @@ module QED
|
|
251
210
|
return @profile[name.to_s] unless block
|
252
211
|
@profiles[name.to_s] = block
|
253
212
|
end
|
254
|
-
|
255
|
-
#
|
256
|
-
# Profiles are collected from the Confection library, unless
|
257
|
-
# confection is deactivated via the override file.
|
258
|
-
#
|
259
|
-
def profiles
|
260
|
-
@profiles.keys
|
261
|
-
end
|
262
|
-
|
263
|
-
#
|
264
|
-
# Load QED configuration profile. The load procedure is stored as
|
265
|
-
# a Proc object in a hash b/c different configuration systems
|
266
|
-
# can be used.
|
267
|
-
#
|
268
|
-
def load_profile(profile)
|
269
|
-
profile = @profiles[profile.to_s]
|
270
|
-
profile.call if profile
|
271
|
-
end
|
213
|
+
=end
|
272
214
|
|
273
215
|
private
|
274
216
|
|
@@ -370,20 +312,21 @@ module QED
|
|
370
312
|
#end
|
371
313
|
|
372
314
|
#
|
373
|
-
def load_confection_profile(name)
|
374
|
-
|
375
|
-
|
376
|
-
end
|
315
|
+
#def load_confection_profile(name)
|
316
|
+
# config = confection(:qed, name.to_sym)
|
317
|
+
# config.exec
|
318
|
+
#end
|
377
319
|
|
378
320
|
#
|
379
|
-
def load_profile_from_file(file)
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
end
|
321
|
+
#def load_profile_from_file(file)
|
322
|
+
# if File.exist?(file)
|
323
|
+
# instance_eval(File.read(file), file)
|
324
|
+
# else
|
325
|
+
# # raise "no profile -- #{profile}"
|
326
|
+
# end
|
327
|
+
#end
|
386
328
|
|
387
329
|
end
|
388
330
|
|
389
331
|
end
|
332
|
+
|
data/lib/qed/step.rb
CHANGED
@@ -227,10 +227,13 @@ module QED
|
|
227
227
|
#
|
228
228
|
def tweak_code
|
229
229
|
code = @example_lines.map{ |lineno, line| line }.join("")
|
230
|
-
|
231
|
-
#code.gsub!(/\s*\#\
|
232
|
-
code.gsub!(/\
|
233
|
-
|
230
|
+
|
231
|
+
#code.gsub!(/\n\s*\#\ ?\=\>(.*?)$/, ' == \1 ? assert(true) : assert(false, %{not returned -- \1})') # TODO: what kind of error ?
|
232
|
+
#code.gsub!(/\s*\#\ ?\=\>(.*?)$/, ' == \1 ? assert(true) : assert(false, %{not returned -- \1})')
|
233
|
+
|
234
|
+
code.gsub!(/\n\s*\#\ ?\=\>\s*(.*?)$/, '.must_return(\1)')
|
235
|
+
code.gsub!(/\s*\#\ ?\=\>\s*(.*?)$/, '.must_return(\1)')
|
236
|
+
|
234
237
|
code
|
235
238
|
end
|
236
239
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.9.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-05-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ansi
|
16
|
-
requirement: &
|
16
|
+
requirement: &25076880 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,21 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *25076880
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: brass
|
27
|
+
requirement: &25074880 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *25074880
|
25
36
|
- !ruby/object:Gem::Dependency
|
26
37
|
name: facets
|
27
|
-
requirement: &
|
38
|
+
requirement: &25073040 !ruby/object:Gem::Requirement
|
28
39
|
none: false
|
29
40
|
requirements:
|
30
41
|
- - ! '>='
|
@@ -32,32 +43,43 @@ dependencies:
|
|
32
43
|
version: '2.8'
|
33
44
|
type: :runtime
|
34
45
|
prerelease: false
|
35
|
-
version_requirements: *
|
46
|
+
version_requirements: *25073040
|
36
47
|
- !ruby/object:Gem::Dependency
|
37
|
-
name:
|
38
|
-
requirement: &
|
48
|
+
name: courtier
|
49
|
+
requirement: &25071080 !ruby/object:Gem::Requirement
|
39
50
|
none: false
|
40
51
|
requirements:
|
41
52
|
- - ! '>='
|
42
53
|
- !ruby/object:Gem::Version
|
43
54
|
version: '0'
|
44
|
-
type: :
|
55
|
+
type: :development
|
45
56
|
prerelease: false
|
46
|
-
version_requirements: *
|
57
|
+
version_requirements: *25071080
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
49
|
-
requirement: &
|
59
|
+
name: blankslate
|
60
|
+
requirement: &25068100 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ! '>='
|
53
64
|
- !ruby/object:Gem::Version
|
54
65
|
version: '0'
|
55
|
-
type: :
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *25068100
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: ae
|
71
|
+
requirement: &25065100 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
56
78
|
prerelease: false
|
57
|
-
version_requirements: *
|
79
|
+
version_requirements: *25065100
|
58
80
|
- !ruby/object:Gem::Dependency
|
59
81
|
name: detroit
|
60
|
-
requirement: &
|
82
|
+
requirement: &25062600 !ruby/object:Gem::Requirement
|
61
83
|
none: false
|
62
84
|
requirements:
|
63
85
|
- - ! '>='
|
@@ -65,10 +87,10 @@ dependencies:
|
|
65
87
|
version: '0'
|
66
88
|
type: :development
|
67
89
|
prerelease: false
|
68
|
-
version_requirements: *
|
90
|
+
version_requirements: *25062600
|
69
91
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
71
|
-
requirement: &
|
92
|
+
name: fire
|
93
|
+
requirement: &25059820 !ruby/object:Gem::Requirement
|
72
94
|
none: false
|
73
95
|
requirements:
|
74
96
|
- - ! '>='
|
@@ -76,7 +98,7 @@ dependencies:
|
|
76
98
|
version: '0'
|
77
99
|
type: :development
|
78
100
|
prerelease: false
|
79
|
-
version_requirements: *
|
101
|
+
version_requirements: *25059820
|
80
102
|
description: ! 'QED (Quality Ensured Demonstrations) is a TDD/BDD framework
|
81
103
|
|
82
104
|
utilizing Literate Programming techniques.'
|
@@ -91,7 +113,7 @@ extra_rdoc_files:
|
|
91
113
|
- README.rdoc
|
92
114
|
- COPYING.rdoc
|
93
115
|
files:
|
94
|
-
- .
|
116
|
+
- .config.rb
|
95
117
|
- .ruby
|
96
118
|
- .yardopts
|
97
119
|
- bin/qed
|
@@ -100,6 +122,7 @@ files:
|
|
100
122
|
- lib/qed/cli/qed.rb
|
101
123
|
- lib/qed/cli/qedoc.rb
|
102
124
|
- lib/qed/cli.rb
|
125
|
+
- lib/qed/configure.rb
|
103
126
|
- lib/qed/core_ext.rb
|
104
127
|
- lib/qed/demo.rb
|
105
128
|
- lib/qed/document/jquery.js
|
@@ -111,6 +134,7 @@ files:
|
|
111
134
|
- lib/qed/helpers/shell_session.rb
|
112
135
|
- lib/qed/parser.rb
|
113
136
|
- lib/qed/qparser.rb
|
137
|
+
- lib/qed/rc.rb
|
114
138
|
- lib/qed/reporter/abstract.rb
|
115
139
|
- lib/qed/reporter/dotprogress.rb
|
116
140
|
- lib/qed/reporter/html.rb
|