citron 0.1.0 → 0.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.
data/.gitignore CHANGED
@@ -2,5 +2,5 @@
2
2
  doc
3
3
  log
4
4
  pkg
5
- site
5
+ site/api
6
6
  tmp
data/.ruby CHANGED
@@ -43,8 +43,8 @@ alternatives: []
43
43
  revision: 0
44
44
  name: citron
45
45
  title: Citron
46
- suite: RubyWorks
47
46
  summary: Classic Unit-style Test Framework
48
47
  description: Citron is a unit testing framework with a classic test-case/test-unit style.
49
- version: 0.1.0
50
- date: "2011-07-29"
48
+ organization: RubyWorks
49
+ version: 0.2.0
50
+ date: "2011-08-12"
data/.yardopts CHANGED
@@ -1,6 +1,6 @@
1
- --output-dir site
1
+ --output-dir doc
2
2
  --protected
3
- --readme README.md
3
+ --readme README.rdoc
4
4
  lib
5
5
  -
6
6
  [A-Z]*.*
data/Assembly CHANGED
@@ -44,3 +44,13 @@ email:
44
44
  login : <%= ENV['EMAIL_LOGIN'] %>
45
45
  secure : <%= ENV['EMAIL_SECURE'] %>
46
46
 
47
+ rdoc:
48
+ format: redfish
49
+ output: site/api
50
+ main: README.rdoc
51
+ include:
52
+ - 'lib'
53
+ - '[A-Z]*.*'
54
+ active: false
55
+
56
+
@@ -0,0 +1,10 @@
1
+ = Release History
2
+
3
+ == 0.2.0 / 2011-08-11
4
+
5
+ This is the first usable release of Citron.
6
+
7
+ Changes:
8
+
9
+ * General improvements.
10
+
data/MANIFEST CHANGED
@@ -2,11 +2,13 @@
2
2
  .ruby
3
3
  lib/citron/test_advice.rb
4
4
  lib/citron/test_case.rb
5
+ lib/citron/test_proc.rb
5
6
  lib/citron/test_setup.rb
6
- lib/citron/test_unit.rb
7
+ lib/citron/world.rb
7
8
  lib/citron.rb
9
+ HISTORY.rdoc
8
10
  PROFILE
9
11
  LICENSE.txt
10
- README.md
12
+ README.rdoc
11
13
  VERSION
12
14
  COPYING.rdoc
data/PROFILE CHANGED
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  name : citron
3
3
  title : Citron
4
- suite : RubyWorks
5
4
  summary: Classic Unit-style Test Framework
6
5
  authors:
7
6
  - Thomas Sawyer <transfire@gmail.com>
@@ -17,9 +16,6 @@ resources:
17
16
  repositories:
18
17
  upstream: git://github.com/proutils/citron.git
19
18
 
20
- copyrights:
21
- - 2011 Thomas Sawyer (BSD-2-Clause)
22
-
23
19
  requirements:
24
20
  - test
25
21
  - ae
@@ -27,3 +23,9 @@ requirements:
27
23
  - reap (build)
28
24
  - qed (test)
29
25
 
26
+ organization: RubyWorks
27
+
28
+ copyrights:
29
+ - 2011 Thomas Sawyer (BSD-2-Clause)
30
+
31
+
@@ -0,0 +1,65 @@
1
+ = Citron
2
+
3
+ {Homepage}[http://rubyworks.github.com/citron] -
4
+ {Development}[http://github.com/rubyworks/citron]
5
+
6
+ Author:: Thomas Sawyer
7
+ License:: FreeBSD
8
+ Copyright:: (c) 2011 Thomas Sawyer, Rubyworks
9
+
10
+
11
+ == Description
12
+
13
+ Citron is a classic unit test framework. It defines a simple
14
+ domain language for create classic-style tests.
15
+
16
+
17
+ == Example
18
+
19
+ Here's a fun example.
20
+
21
+ TestCase "Show them how to Beat It" do
22
+
23
+ setup do
24
+ @funky = "funky"
25
+ @right = "right"
26
+ end
27
+
28
+ # fail
29
+ test "show them how to funky" do
30
+ @funky.assert != "funky"
31
+ end
32
+
33
+ # pass
34
+ test "show them what's right" do
35
+ @right.assert == "right"
36
+ end
37
+
38
+ # error
39
+ test "no one wants to be defeated" do
40
+ raise SyntaxError
41
+ end
42
+
43
+ # todo
44
+ test "better do what you can" do
45
+ raise NotImplementedError
46
+ end
47
+
48
+ # omit
49
+ test "just beat it" do
50
+ e = NotImplementedError.new
51
+ e.set_assertion(true)
52
+ raise e
53
+ end
54
+
55
+ end
56
+
57
+
58
+ == License
59
+
60
+ Copyright (c) 2011 Thomas Sawyer, Rubyworks
61
+
62
+ Citron is distributed according to the terms of the FreeBSD license.
63
+
64
+ See COPYING.rd for details.
65
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -0,0 +1,33 @@
1
+ require 'minitest/unit'
2
+ require 'minitest/autorun'
3
+
4
+ class ShowThemHowToBeatIt < MiniTest::Unit::TestCase
5
+
6
+ # will fail
7
+ def test_show_them_how_to_funky
8
+ refute_equal("funky", "funky")
9
+ end
10
+
11
+ # will pass
12
+ def test_show_them_whats_right
13
+ assert_equal("right", "right")
14
+ end
15
+
16
+ # will error
17
+ def test_no_one_wants_to_be_defeated
18
+ raise SyntaxError
19
+ end
20
+
21
+ # pending
22
+ def test_better_do_what_you_can
23
+ raise NotImplementedError
24
+ end
25
+
26
+ # omit
27
+ def test_just_beat_it
28
+ e = NotImplementedError.new
29
+ #e.set_assertion(true)
30
+ raise e
31
+ end
32
+
33
+ end
@@ -2,22 +2,22 @@ module Citron
2
2
  $TEST_SUITE ||= []
3
3
 
4
4
  require 'citron/test_case'
5
- require 'citron/test_unit'
5
+ require 'citron/test_proc'
6
6
  require 'citron/test_advice'
7
7
  require 'citron/test_setup'
8
8
  end
9
9
 
10
- module Test
11
- extend self
10
+ module Citron
11
+ module DSL
12
12
 
13
- # Define a general test case.
14
- def Case(label, &block)
15
- $TEST_SUITE << Citron::TestCase.new(nil, :label=>label, &block)
16
- end
13
+ # Define a general test case.
14
+ def test_case(label, &block)
15
+ $TEST_SUITE << Citron::TestCase.new(:label=>label, &block)
16
+ end
17
17
 
18
- alias :TestCase :Case
19
- alias :test_case :Case
20
- alias :case :Case
18
+ alias :TestCase :test_case
19
+ alias :testcase :test_case
20
+ end
21
21
  end
22
22
 
23
- extend Test
23
+ extend Citron::DSL
@@ -2,6 +2,8 @@
2
2
  #require 'citron/test_context'
3
3
  require 'citron/test_advice'
4
4
  require 'citron/test_setup'
5
+ require 'citron/test_proc'
6
+ require 'citron/world'
5
7
 
6
8
  module Citron
7
9
 
@@ -22,8 +24,7 @@ module Citron
22
24
  # The setup and teardown advice.
23
25
  attr :setup
24
26
 
25
- # Advice are labeled procedures, such as before
26
- # and after advice.
27
+ # Pattern mathing before and after advice.
27
28
  attr :advice
28
29
 
29
30
  # Module for evaluating tests.
@@ -31,27 +32,23 @@ module Citron
31
32
 
32
33
  # A test case +target+ is a class or module.
33
34
  #
34
- # @param [TestSuite] context
35
- # The parent case to which this case belongs.
36
- #
37
- def initialize(context, settings={}, &block)
38
- if context
39
- @context = context
40
- @advice = context.advice.clone
35
+ def initialize(settings={}, &block)
36
+ @context = settings[:context]
37
+ @label = settings[:label]
38
+ @setup = settings[:setup]
39
+ @skip = settings[:skip]
40
+
41
+ if @context
42
+ @advice = context.advice.clone
41
43
  else
42
- @context = nil
43
- @advice = TestAdvice.new
44
+ @advice = TestAdvice.new
44
45
  end
45
46
 
46
- @label = settings[:label]
47
- @setup = settings[:setup]
48
- @skip = settings[:skip]
47
+ @tests = []
49
48
 
50
- @tests = []
49
+ @scope = Scope.new(self)
51
50
 
52
- domain = DSL.new(self, &block)
53
- @scope = Module.new
54
- @scope.extend domain
51
+ @scope.module_eval(&block) if block
55
52
  end
56
53
 
57
54
  #
@@ -77,7 +74,7 @@ module Citron
77
74
 
78
75
  #
79
76
  def to_s
80
- "#{type}: " + @label.to_s
77
+ label.to_s
81
78
  end
82
79
 
83
80
  #
@@ -86,8 +83,8 @@ module Citron
86
83
  end
87
84
 
88
85
  #
89
- def skip=(boolean)
90
- @skip = !!boolean
86
+ def skip=(reason)
87
+ @skip = reason
91
88
  end
92
89
 
93
90
  # Run test in the context of this case.
@@ -112,56 +109,48 @@ module Citron
112
109
  end
113
110
 
114
111
  #
115
- #--
116
- # TODO: Change so that the scope is the DSL
117
- # and ** includes the DSL of the context ** !!!
118
- #++
119
- #def scope
120
- # @scope ||= (
121
- # scope = Object.new
122
- # scope.extend(domain)
123
- # scope
124
- # )
125
- #end
126
-
127
- #
128
- class DSL < Module
112
+ class Scope < World
129
113
 
130
- #
131
- def initialize(testcase, &code)
114
+ # Setup new evaluation scope.
115
+ def initialize(testcase) #, &code)
132
116
  @_case = testcase
133
117
  @_setup = testcase.setup
118
+ @_skip = false
134
119
 
135
120
  if testcase.context
136
121
  extend(testcase.context.scope)
137
122
  end
138
-
139
- module_eval(&code)
140
123
  end
141
124
 
142
- # Create a sub-case.
143
125
  #--
144
- # @TODO: Instead of resuing TestCase can we have a TestContext
145
- # that more generically mimics it's context context?
126
+ # TODO: Instead of reusing TestCase can we have a TestContext
127
+ # that more generically mimics it's context context?
146
128
  #++
129
+
130
+ # Create a sub-case.
147
131
  def Context(label, &block)
148
132
  settings = {
149
- :label => label,
150
- :setup => @_setup
133
+ :context => @_case,
134
+ :setup => @_setup,
135
+ :skip => @_skip,
136
+ :label => label
151
137
  }
152
- testcase = TestCase.new(@_case, settings, &block)
138
+ testcase = TestCase.new(settings, &block)
153
139
  @_case.tests << testcase
154
140
  testcase
155
141
  end
156
- alias_method :context, :Context
142
+
143
+ alias :context :Context
157
144
 
158
145
  # Create a test.
159
146
  def Test(label=nil, &procedure)
160
147
  settings = {
161
- :label => label,
162
- :setup => @_setup
148
+ :context => @_case,
149
+ :setup => @_setup,
150
+ :skip => @_skip,
151
+ :label => label
163
152
  }
164
- testunit = TestUnit.new(@_case, settings, &procedure)
153
+ testunit = TestProc.new(settings, &procedure)
165
154
  if procedure.arity == 0
166
155
  @_case.tests << testunit
167
156
  else
@@ -169,9 +158,9 @@ module Citron
169
158
  end
170
159
  testunit
171
160
  end
172
- alias_method :test, :Test
173
161
 
174
- #
162
+ alias :test :Test
163
+
175
164
  #
176
165
  #
177
166
  def Ok(*args)
@@ -182,7 +171,8 @@ module Citron
182
171
  return test
183
172
  end
184
173
 
185
- #
174
+ alias :ok :Ok
175
+
186
176
  #
187
177
  #
188
178
  def No(*args)
@@ -194,33 +184,30 @@ module Citron
194
184
  return test
195
185
  end
196
186
 
187
+ alias :no :No
188
+
197
189
  # Setup is used to set things up for each unit test.
198
190
  # The setup procedure is run before each unit.
199
191
  #
200
- # @param [String] description
192
+ # @param [String] label
201
193
  # A brief description of what the setup procedure sets-up.
202
194
  #
203
- def Setup(description=nil, &procedure)
204
- if procedure
205
- @_setup = TestSetup.new(@_case, description, &procedure)
206
- end
195
+ def Setup(label=nil, &proc)
196
+ @_setup = TestSetup.new(@_case, label, &proc)
207
197
  end
208
198
 
209
- alias_method :setup, :Setup
199
+ alias :setup :Setup
210
200
 
211
201
  #alias_method :Concern, :Setup
212
202
  #alias_method :concern, :Setup
213
203
 
214
- #alias_method :Subject, :Setup
215
- #alias_method :subject, :Setup
216
-
217
204
  # Teardown procedure is used to clean-up after each unit test.
218
205
  #
219
- def Teardown(&procedure)
220
- @_setup.teardown = procedure
206
+ def Teardown(&proc)
207
+ @_setup.teardown = proc
221
208
  end
222
209
 
223
- alias_method :teardown, :Teardown
210
+ alias :teardown :Teardown
224
211
 
225
212
  # Define a _complex_ before procedure. The #before method allows
226
213
  # before procedures to be defined that are triggered by a match
@@ -251,7 +238,7 @@ module Citron
251
238
  @_case.advice[:before][matches] = procedure
252
239
  end
253
240
 
254
- alias_method :before, :Before
241
+ alias :before :Before
255
242
 
256
243
  # Define a _complex_ after procedure. The #before method allows
257
244
  # before procedures to be defined that are triggered by a match
@@ -282,14 +269,25 @@ module Citron
282
269
  @_case.advice[:after][matches] = procedure
283
270
  end
284
271
 
285
- alias_method :after, :After
272
+ alias :after :After
286
273
 
287
- # Mark a test or testcase to be omitted.
274
+ # Mark tests or subcases to be skipped.
288
275
  #
289
- def Omit(test_obect)
290
- test_object.omit = true
276
+ # @example
277
+ # skip("reason for skipping") do
278
+ # test "some test" do
279
+ # ...
280
+ # end
281
+ # end
282
+ #
283
+ def Skip(reason=true, &block)
284
+ @_skip = reason
285
+ block.call
286
+ @_skip = false
291
287
  end
292
288
 
289
+ alias :skip :Skip
290
+
293
291
  end
294
292
 
295
293
  end
@@ -1,13 +1,12 @@
1
1
  module Citron
2
2
 
3
3
  #
4
- class TestUnit
4
+ class TestProc
5
5
 
6
6
  # New unit test procedure.
7
7
  #
8
- def initialize(context, options={}, &procedure)
9
- @context = context
10
-
8
+ def initialize(options={}, &procedure)
9
+ @context = options[:context]
11
10
  @setup = options[:setup]
12
11
  @label = options[:label]
13
12
  @skip = options[:skip]
@@ -40,15 +39,15 @@ module Citron
40
39
 
41
40
  #
42
41
  def type
43
- 'Unit'
42
+ 'Test'
44
43
  end
45
44
 
46
45
  #
47
46
  def skip? ; @skip ; end
48
47
 
49
48
  #
50
- def skip=(boolean)
51
- @skip = !!boolean
49
+ def skip=(reason)
50
+ @skip = reason
52
51
  end
53
52
 
54
53
  #
@@ -58,7 +57,7 @@ module Citron
58
57
 
59
58
  #
60
59
  def tested=(boolean)
61
- @tested = boolean
60
+ @tested = !!boolean
62
61
  end
63
62
 
64
63
  #
@@ -71,8 +70,10 @@ module Citron
71
70
  @setup
72
71
  end
73
72
 
74
- #
75
- alias :subtext :setup
73
+ # Ruby Test looks for `topic` as the desciption of a test's setup.
74
+ def topic
75
+ @setup.to_s
76
+ end
76
77
 
77
78
  #
78
79
  def scope
@@ -0,0 +1,7 @@
1
+ module Citron
2
+
3
+ #
4
+ class World < Module
5
+ end
6
+
7
+ end
@@ -0,0 +1,17 @@
1
+ html { font-family: sans-serif; font-size: 16px; color: black; }
2
+ body { padding: 0; margin: 0; font-family: sans-serif; font-size: 12px; background: #fff; }
3
+
4
+ h1 { font-size: 90px; margin: 20px; }
5
+
6
+ p { font-size: 110%; text-align: justify; margin: 20px 0; line-height: 150%; }
7
+
8
+ a { text-decoration: none; font-size: 100%; }
9
+ a:hover { text-decoration: underline; }
10
+
11
+ ul { margin: 0 auto; list-style-type: none; width: 300px; }
12
+ li { float: left; padding: 10px; text-align: center; }
13
+
14
+ pre { font-size: 130%; padding: 10px 0 0 0; -moz-border-radius: 10px; font-family: courier, monospace; color: #000; }
15
+ code { font-family: courier, monospace; }
16
+
17
+ img { border: none; }
@@ -0,0 +1,47 @@
1
+ html { font-size: 16px; }
2
+
3
+ h1 { font-family: times; font-size: 400%; margin: 20px 0; color: #f7d901; }
4
+ h2 { font-size: 220%; margin-top: 30px; color: #444; }
5
+ h3 { font-size: 190%; color: green; }
6
+
7
+ p { color: #222; font-weight: normal; font-size: 110%; }
8
+ a { color: #262; }
9
+ a:hover { text-decoration: underline; }
10
+
11
+ pre { background: #ffffff; -moz-border-radius: 10px; line-height: 140%; font-size: 0.9em; }}
12
+ code { color: #222; font-weight: bold; }
13
+ tt { color: #222; font-weight: bold; }
14
+
15
+ #nav { padding: 0 30px 20px 60px; text-align: left; color: pink; float: right; }
16
+ #nav a { font-size: 160%; font-weight: bold; line-height: 150%; color: orange; }
17
+ #nav a:hover { color: #FFF; text-decoration: none; }
18
+
19
+ #header { height: 250px; text-align: left; }
20
+ #header h1 { font-size: 100px; margin-bottom: 0; padding: 40px 0 0 0; color: #f7d901; margin-left: -10px; }
21
+ #header h2 { padding: 0 0 0 110px; margin-top: 0; }
22
+
23
+ #main { color: white; padding: 20px 0 30px 0; background: url(../images/skin.jpg) #f7e931; }
24
+ #main p { font-weight: bold; font-family: sans-serif; font-size: 1.8em; color: #222; font-weight: bold; text-shadow: 1px 1px white; }
25
+ #main h2 { color: #333333; }
26
+ #main h3 { color: #333333; }
27
+
28
+ #example p { font-size: 2em; }
29
+
30
+ #footer { margin-top: 40px; padding: 40px 0; text-align: center; background: url(../images/skin.jpg) #f7e931; }
31
+ #footer .copyright { padding-top: 0; }
32
+ #footer .copyright p { color: #222; font-weight: normal; font-size: 80%; line-height: 150%; }
33
+
34
+ #forkme {
35
+ position: absolute;
36
+ top: 0; right: 0;
37
+ width: 150px;
38
+ }
39
+
40
+ .page { width: 730px; margin: 0 auto; }
41
+
42
+ .bordered { border-top: 2px solid #99ff99; border-bottom: 2px solid #99ff99; }
43
+
44
+ .copyright { padding: 0; text-align: left; }
45
+ .copyright td { font-size: 10px; color: #444; }
46
+
47
+
@@ -0,0 +1,147 @@
1
+ <html>
2
+ <head>
3
+ <title>Citron</title>
4
+ <link href="assets/styles/reset.css" rel="stylesheet" type="text/css"/>
5
+ <link href="assets/styles/site.css" rel="stylesheet" type="text/css"/>
6
+ <link href="assets/images/citron.jpg" rel="shortcut icon"/>
7
+
8
+ <!-- syntax highlighing -->
9
+ <script src="http://rubyworks.github.com/assets/includes/shjs/sh_main.min.js"></script>
10
+ <script src="http://rubyworks.github.com/assets/includes/shjs/lang/sh_ruby.min.js"></script>
11
+ <script src="http://rubyworks.github.com/assets/includes/shjs/lang/sh_sh.min.js"></script>
12
+ <link href="http://rubyworks.github.com/assets/includes/shjs/css/sh_acid.min.css" rel="stylesheet" type="text/css" />
13
+ </head>
14
+ <body onload="sh_highlightDocument();">
15
+
16
+ <div id="forkme">
17
+ <a href="http://github.com/rubyworks/citron"><img src="assets/images/forkme.png" /></a>
18
+ </div>
19
+
20
+ <div id="header">
21
+ <div class="page">
22
+ <img src="assets/images/cut-citron.png" height="200px" align="right" style="padding-top: 15px;"/>
23
+ <h1><img src="assets/images/title.png"/></h1>
24
+ <h2>Clean Classic Testing</h2>
25
+ </div>
26
+ </div>
27
+
28
+ <div id="main" class="bordered">
29
+ <div class="page">
30
+
31
+ <p>Citron is classic unit testing framework with a clear domain specific language
32
+ notating testcase and test procedure, that runs on top of the Ruby Universal Test
33
+ Harness, <a href="http://rubyworks.github.com/test">Ruby Test</a>.</p>
34
+
35
+ <!--
36
+ <p>Citron uses the <a href="http://rubyworks.github.com/ae">Assertive Expressive</a>
37
+ assertions framework. This is the same verstile framework used by <a href="http://rubyworks.github.com/qed">Q.E.D.</a>.
38
+ By default Citron test support the standard <code>#assert</code> and <code>#expect</code> assertion methods.
39
+ If you wish to use subjunctive terms, either <code>#should</code> or <code>#must</code>, you can load these
40
+ via a helper script (eg. <code>require 'ae/should'</code>).</p>
41
+ -->
42
+
43
+ </div>
44
+ </div>
45
+
46
+ <div id="example">
47
+ <div class="page">
48
+
49
+ <div id="nav">
50
+ <!-- <a href="guide/doc.en/index.html">English Manual</a> &nbsp;&middot;&nbsp; -->
51
+ <a href="http://wiki.github.com/rubyworks/citron">Wiki</a> &nbsp;
52
+ <a href="http://rubydoc.info/gems/citron/frames">API</a> &nbsp;
53
+ <a href="http://googlegroups.com/group/rubyworks-mailinglist">Email</a> &nbsp;
54
+ <a href="http://github.com/rubyworks/citron/issues">Issue</a> &nbsp;
55
+ <a href="http://github.com/rubyworks/citron">Code</a>
56
+ </div>
57
+
58
+ <h3>Example</h3>
59
+
60
+ <p>Citron tests are organized into test cases and test procedures.
61
+ Here is an example:</p>
62
+
63
+ <pre class="sh_ruby">
64
+ TestCase "Show them how to Beat It" do
65
+
66
+ # will fail
67
+ test "show them how to funky" do
68
+ "funky".assert != "funky"
69
+ end
70
+
71
+ # will pass
72
+ test "show them what's right" do
73
+ "right".assert == "right"
74
+ end
75
+
76
+ # will error
77
+ test "no one wants to be defeated" do
78
+ raise SyntaxError
79
+ end
80
+
81
+ # pending
82
+ test "better do what you can" do
83
+ raise NotImplementedError
84
+ end
85
+
86
+ # omit
87
+ test "just beat it" do
88
+ e = NotImplementedError.new
89
+ e.set_assertion(true)
90
+ raise e
91
+ end
92
+
93
+ end
94
+ </pre>
95
+
96
+ <p>The assertion framework is actually independent of the test framework,
97
+ so almost any assertion system will work. In the example above we are using
98
+ <a href="http://rubyworks.github.com/ae">A.E.</a></p>
99
+
100
+ </div>
101
+ </div>
102
+
103
+ <div id="footer" class="bordered">
104
+ <div class="page">
105
+ <script type="text/javascript"><!--
106
+ google_ad_client = "ca-pub-1126154564663472";
107
+ /* RUBYWORKS 09-10-02 728x90 */
108
+ google_ad_slot = "0788888658";
109
+ google_ad_width = 728;
110
+ google_ad_height = 90;
111
+ //-->
112
+ </script>
113
+ <script type="text/javascript"
114
+ src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
115
+ </script>
116
+
117
+ <br/><br/><br/>
118
+
119
+ <div class="copyright" width="100%">
120
+ <a href="http://rubyworks.github.com/">
121
+ <img src="assets/images/ruby-logo.png" height="110px" align="left" style="margin: 0 5px; padding: 0 10px" />
122
+ </a>
123
+ <a href="http://www.apache.org/licenses/LICENSE-2.0.html">
124
+ <img src="assets/images/opensource.png" height="120px" align="left" style="padding: 0 10px;" />
125
+ </a>
126
+ <a href="github.com/rubyworks/citron">
127
+ <img src="assets/images/github-logo.png" height="115px" align="left" style="margin: 0; padding: 0 10px;" />
128
+ </a>
129
+ <a href="http://testanything.org/wiki/index.php/Main_Page">
130
+ <img src="assets/images/tap.png" height="113px" align="left" style="margin: 0; padding: 0 20px;" />
131
+ </a>
132
+ <a href="">
133
+ <img src="assets/images/citrons-are-good.png" height="117px" align="left" style="margin: 0; padding: 0 10px;" />
134
+ </a>
135
+ </div>
136
+
137
+ <br style="clear: both;" />
138
+
139
+ <div style="margin-top: 30px;">
140
+ <b>Citron</b>, Copyright &copy; 2009 Thomas Sawyer &middot;
141
+ <b>Contact:</b> transfire @ gmail.com
142
+ </div>
143
+ </div>
144
+ </div>
145
+
146
+ </body>
147
+ </html>
@@ -0,0 +1,2 @@
1
+ require 'ae'
2
+ require 'citron'
@@ -0,0 +1,23 @@
1
+ test_case "Example of using setup in a testcase" do
2
+
3
+ setup do
4
+ @x = 1
5
+ end
6
+
7
+ test "has setup without a topic" do
8
+ @x.assert == 1
9
+ end
10
+
11
+ setup "has a topic" do
12
+ @x = 10
13
+ end
14
+
15
+ test "has setup with a topic" do
16
+ @x.assert == 10
17
+ end
18
+
19
+ test "alos has setup with a topic" do
20
+ @x.assert! == 5
21
+ end
22
+
23
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: citron
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.0
5
+ version: 0.2.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Thomas Sawyer
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-07-29 00:00:00 Z
13
+ date: 2011-08-12 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: test
@@ -76,8 +76,9 @@ extensions: []
76
76
 
77
77
  extra_rdoc_files:
78
78
  - LICENSE.txt
79
+ - HISTORY.rdoc
80
+ - README.rdoc
79
81
  - COPYING.rdoc
80
- - README.md
81
82
  files:
82
83
  - .gemspec
83
84
  - .gitignore
@@ -85,17 +86,36 @@ files:
85
86
  - .yardopts
86
87
  - Assembly
87
88
  - COPYING.rdoc
89
+ - HISTORY.rdoc
88
90
  - LICENSE.txt
89
91
  - MANIFEST
90
92
  - PROFILE
91
- - README.md
93
+ - README.rdoc
92
94
  - VERSION
95
+ - bm/minitest_example.rb
93
96
  - lib/citron.rb
94
97
  - lib/citron/test_advice.rb
95
98
  - lib/citron/test_case.rb
99
+ - lib/citron/test_proc.rb
96
100
  - lib/citron/test_setup.rb
97
- - lib/citron/test_unit.rb
101
+ - lib/citron/world.rb
102
+ - site/assets/images/citrons-are-good.png
103
+ - site/assets/images/cut-citron.png
104
+ - site/assets/images/forkme.png
105
+ - site/assets/images/github-logo.png
106
+ - site/assets/images/opensource.png
107
+ - site/assets/images/ruby-logo.png
108
+ - site/assets/images/skin.jpg
109
+ - site/assets/images/skin1.jpg
110
+ - site/assets/images/tap.png
111
+ - site/assets/images/title.png
112
+ - site/assets/images/title2.png
113
+ - site/assets/styles/reset.css
114
+ - site/assets/styles/site.css
115
+ - site/index.html
116
+ - try/.test
98
117
  - try/case_example.rb
118
+ - try/case_setup.rb
99
119
  homepage: http://rubyworks.github.com/citron
100
120
  licenses: []
101
121
 
data/README.md DELETED
@@ -1,58 +0,0 @@
1
- # Citron
2
-
3
- <table>
4
- <tr><td><b>Author </b></td><td>Thomas Sawyer</td></tr>
5
- <tr><td><b>License </b></td><td>FreeBSD</td></tr>
6
- <tr><td><b>Copyright</b></td><td>(c) 2011 Thomas Sawyer, Rubyworks</td></tr>
7
- </table>
8
-
9
- ## Description
10
-
11
- Citron is a classic unit test framework. It defines a simple
12
- domain language for create classic-style tests.
13
-
14
- ## Example
15
-
16
- Here's a fun example.
17
-
18
- ``` ruby
19
- TestCase "Show them how to Beat It" do
20
-
21
- # fail
22
- test "show them how to funky" do
23
- "funky".assert != "funky"
24
- end
25
-
26
- # pass
27
- test "show them what's right" do
28
- "right".assert == "right"
29
- end
30
-
31
- # error
32
- test "no one wants to be defeated" do
33
- raise SyntaxError
34
- end
35
-
36
- # todo
37
- test "better do what you can" do
38
- raise NotImplementedError
39
- end
40
-
41
- # omit
42
- test "just beat it" do
43
- e = NotImplementedError.new
44
- e.set_assertion(true)
45
- raise e
46
- end
47
-
48
- end
49
- ```
50
-
51
- ## License
52
-
53
- Copyright (c) 2011 Thomas Sawyer, Rubyworks
54
-
55
- Citron is distributed according to the terms of the FreeBSD license.
56
-
57
- See COPYING.rd for details.
58
-