lemon 0.8.5 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. data/{lemon.gemspec → .gemspec} +0 -0
  2. data/.ruby +4 -11
  3. data/Assembly +5 -11
  4. data/HISTORY.rdoc +31 -0
  5. data/MANIFEST +45 -55
  6. data/PROFILE +6 -6
  7. data/README.md +113 -0
  8. data/Rakefile +12 -3
  9. data/VERSION +1 -1
  10. data/bin/lemonade +8 -0
  11. data/lib/lemon.rb +52 -2
  12. data/lib/lemon.yml +4 -11
  13. data/lib/lemon/{model/ae.rb → ae.rb} +0 -0
  14. data/lib/lemon/cli.rb +28 -279
  15. data/lib/lemon/cli/base.rb +139 -0
  16. data/lib/lemon/cli/coverage.rb +52 -0
  17. data/lib/lemon/cli/generate.rb +51 -0
  18. data/lib/lemon/cli/test.rb +50 -0
  19. data/lib/lemon/core_ext.rb +7 -0
  20. data/lib/lemon/core_ext/kernel.rb +20 -0
  21. data/lib/lemon/core_ext/omission.rb +18 -0
  22. data/lib/lemon/{controller/coverage_analyzer.rb → coverage/analyzer.rb} +41 -19
  23. data/lib/lemon/{model → coverage}/cover_unit.rb +0 -0
  24. data/lib/lemon/{view/cover_reports → coverage/formats}/abstract.rb +0 -0
  25. data/lib/lemon/{view/cover_reports → coverage/formats}/compact.rb +1 -1
  26. data/lib/lemon/{view/cover_reports → coverage/formats}/outline.rb +1 -1
  27. data/lib/lemon/{view/cover_reports → coverage/formats}/verbose.rb +1 -1
  28. data/lib/lemon/{view/cover_reports → coverage/formats}/yaml.rb +1 -1
  29. data/lib/lemon/{model → coverage}/snapshot.rb +0 -0
  30. data/lib/lemon/{model → coverage}/source_parser.rb +0 -0
  31. data/lib/lemon/{controller/scaffold_generator.rb → generator.rb} +53 -14
  32. data/lib/lemon/test_advice.rb +63 -0
  33. data/lib/lemon/test_case.rb +270 -0
  34. data/lib/lemon/test_class.rb +28 -0
  35. data/lib/lemon/test_method.rb +207 -0
  36. data/lib/lemon/test_module.rb +114 -0
  37. data/lib/lemon/test_proc.rb +140 -0
  38. data/lib/lemon/test_setup.rb +54 -0
  39. data/lib/lemon/test_world.rb +9 -0
  40. data/notes/{2010-05-06-files_not_classes.rdoc → 2010-05-06-files-not-classes.rdoc} +0 -0
  41. data/notes/{2010-07-11-acid_testing.rdoc → 2010-07-11-acid-testing.rdoc} +0 -0
  42. data/notes/2011-07-07-nailing-down-the-nomenclature.md +6 -0
  43. data/site/index.html +7 -6
  44. data/{qed → spec}/applique/fs.rb +0 -0
  45. data/{qed → spec}/coverage/01_complete.rdoc +26 -16
  46. data/{qed → spec}/coverage/02_incomplete.rdoc +10 -7
  47. data/{qed → spec}/coverage/03_extensions.rdoc +10 -6
  48. data/spec/coverage/applique/lemon.rb +1 -0
  49. data/try/.test +8 -0
  50. data/try/case_error.rb +18 -0
  51. data/try/case_fail.rb +19 -0
  52. data/try/case_pass.rb +42 -0
  53. data/try/case_pending.rb +18 -0
  54. data/try/case_singleton.rb +18 -0
  55. data/try/case_untested.rb +14 -0
  56. data/try/fixtures/calculator.rb +15 -0
  57. data/{demo/fixture → try/fixtures}/example-use.rb +0 -0
  58. data/{demo/fixture → try/fixtures}/example.rb +0 -0
  59. data/try/helpers/loadpath.rb +1 -0
  60. data/{.config → work/deprecated}/cucumber.yml +0 -0
  61. data/{features → work/deprecated/features}/coverage.feature +0 -0
  62. data/{features → work/deprecated/features}/generate.feature +0 -0
  63. data/{features → work/deprecated/features}/step_definitions/coverage_steps.rb +0 -0
  64. data/{features → work/deprecated/features}/support/ae.rb +0 -0
  65. data/{features → work/deprecated/features}/support/aruba.rb +0 -0
  66. data/{features → work/deprecated/features}/test.feature +0 -0
  67. data/work/deprecated/model/dsl/advice.rb +78 -0
  68. data/work/deprecated/model/dsl/subject.rb +40 -0
  69. data/{lib/lemon → work/deprecated}/model/main.rb +40 -29
  70. data/work/deprecated/model/test.rb +54 -0
  71. data/work/deprecated/model/test_base_dsl.rb +88 -0
  72. data/work/deprecated/model/test_clause.rb +112 -0
  73. data/{lib/lemon → work/deprecated}/model/test_context.rb +24 -24
  74. data/work/deprecated/model/test_feature.rb +128 -0
  75. data/work/deprecated/model/test_scenario.rb +137 -0
  76. data/{lib/lemon → work/deprecated}/model/test_suite.rb +113 -32
  77. data/work/deprecated/rake.rb +103 -0
  78. data/{test → work/deprecated/test}/case_coverage_analyzer.rb +0 -0
  79. data/{test → work/deprecated/test}/case_test_case_dsl.rb +2 -2
  80. data/{test → work/deprecated/test}/fixtures/case_complete.rb +0 -0
  81. data/{test → work/deprecated/test}/fixtures/case_inclusion.rb +0 -0
  82. data/{test → work/deprecated/test}/fixtures/case_incomplete.rb +0 -0
  83. data/{test → work/deprecated/test}/fixtures/example.rb +0 -0
  84. data/{test → work/deprecated/test}/fixtures/helper.rb +0 -0
  85. data/{test → work/deprecated/test}/runner +0 -0
  86. data/work/old-tests/case_example.rb +15 -0
  87. data/work/old-tests/feature_example.rb +40 -0
  88. data/work/reference/dsl2.rb +4 -0
  89. metadata +101 -98
  90. data/README.rdoc +0 -103
  91. data/bin/lemon +0 -4
  92. data/demo/case_example_error.rb +0 -10
  93. data/demo/case_example_fail.rb +0 -15
  94. data/demo/case_example_pass.rb +0 -32
  95. data/demo/case_example_pending.rb +0 -14
  96. data/demo/case_example_untested.rb +0 -10
  97. data/lib/lemon/controller/test_runner.rb +0 -299
  98. data/lib/lemon/model/pending.rb +0 -10
  99. data/lib/lemon/model/test_case.rb +0 -305
  100. data/lib/lemon/model/test_unit.rb +0 -147
  101. data/lib/lemon/view/test_reports/abstract.rb +0 -256
  102. data/lib/lemon/view/test_reports/dotprogress.rb +0 -73
  103. data/lib/lemon/view/test_reports/html.rb +0 -146
  104. data/lib/lemon/view/test_reports/outline.rb +0 -118
  105. data/lib/lemon/view/test_reports/summary.rb +0 -131
  106. data/lib/lemon/view/test_reports/tap.rb +0 -49
  107. data/lib/lemon/view/test_reports/tapj.rb +0 -130
  108. data/lib/lemon/view/test_reports/tapy.rb +0 -141
  109. data/lib/lemon/view/test_reports/verbose.rb +0 -197
  110. data/work/sandbox/lib/sample.rb +0 -13
  111. data/work/sandbox/test/sample_case.rb +0 -12
  112. data/work/trash/example-cover.rb +0 -5
  113. data/work/trash/example.rb +0 -16
File without changes
data/.ruby CHANGED
@@ -9,6 +9,7 @@ copyrights:
9
9
  replacements: []
10
10
  conflicts: []
11
11
  requirements:
12
+ - name: test
12
13
  - name: ae
13
14
  - name: ansi
14
15
  version: 1.3+
@@ -24,14 +25,6 @@ requirements:
24
25
  groups:
25
26
  - test
26
27
  development: true
27
- - name: cucumber
28
- groups:
29
- - test
30
- development: true
31
- - name: aruba
32
- groups:
33
- - test
34
- development: true
35
28
  dependencies: []
36
29
  repositories:
37
30
  - uri: git://github.com/proutils/lemon.git
@@ -47,10 +40,10 @@ extra:
47
40
  alternatives: []
48
41
  revision: 0
49
42
  title: Lemon
50
- suite: proutils
51
43
  summary: Pucker-tight Unit Testing
52
44
  description: Lemon is a unit testing framework that tightly correlates class to test
53
45
  case and method to test unit.
54
- version: 0.8.5
46
+ organization: RubyWorks
47
+ version: 0.9.0
55
48
  name: lemon
56
- date: '2011-07-16'
49
+ date: '2011-08-11'
data/Assembly CHANGED
@@ -22,22 +22,16 @@ yard:
22
22
  yardopts: true
23
23
  priority: 2
24
24
 
25
+ qed:
26
+ files: spec
27
+
25
28
  qedoc:
26
29
  title: Lemony Testing
30
+ files: spec
27
31
  output: QED.rdoc
28
32
 
29
- cucumber:
30
- service : Custom
31
- test : |
32
- system 'cucumber -q -f progress test/cli'
33
-
34
- lemon:
35
- service : Custom
36
- test : |
37
- system 'lemon -Itest/fixtures test/*.rb'
38
-
39
33
  vclog:
40
- output :
34
+ output:
41
35
  - log/AHISTORY.rdoc
42
36
  - log/CHANGELOG.rdoc
43
37
 
@@ -1,5 +1,36 @@
1
1
  = RELEASE HISTORY
2
2
 
3
+ == 0.9.0 / 2011-08-11
4
+
5
+ Version 0.9 is a huge release for Lemon. This release finally makes the transition
6
+ to the new unit subcase syntax --a bit more verbose than the old style but a more
7
+ flexible means of notating unit tests allowing each unit to group together mutiple
8
+ tests. For previous users you will need to change old style tests, e.g.
9
+
10
+ Unit :to_s => "that string" do
11
+ ...
12
+ end
13
+
14
+ To the new style:
15
+
16
+ Unit :to_s do
17
+ Test "that string" do
18
+ ...
19
+ end
20
+ end
21
+
22
+ This release also moves Lemon over to the new Ruby Test library for test runs.
23
+ The `lemon` command line interface has changed and now uses subcommands rather than command
24
+ opitions. So use `lemon coverage` instead of the old `lemon -c`. Since Lemon now uses Ruby
25
+ Test to run tests, `lemon test` is equivalent to `ruby-test`, and the Ruby Test config file
26
+ should be used to configure test runs instead of `.lemonrc` which is no longer supported.
27
+
28
+ Changes:
29
+
30
+ * Utilize Ruby Test for test execution.
31
+ * Implemented new unit block syntax.
32
+
33
+
3
34
  == 0.8.5 / 2011-07-15
4
35
 
5
36
  This release fixes exit code status, which should be -1 if there
data/MANIFEST CHANGED
@@ -1,65 +1,55 @@
1
- #!mast .yardopts .ruby bin demo features lib man qed spec test [A-Z][A-Z]*
1
+ #!mast .yardopts .ruby bin demo lib man qed spec test try [A-Z][A-Z]*
2
2
  .yardopts
3
3
  .ruby
4
- bin/lemon
5
- demo/case_example_error.rb
6
- demo/case_example_fail.rb
7
- demo/case_example_pass.rb
8
- demo/case_example_pending.rb
9
- demo/case_example_untested.rb
10
- demo/fixture/example-use.rb
11
- demo/fixture/example.rb
12
- features/coverage.feature
13
- features/generate.feature
14
- features/step_definitions/coverage_steps.rb
15
- features/support/ae.rb
16
- features/support/aruba.rb
17
- features/test.feature
4
+ bin/lemonade
5
+ lib/lemon/ae.rb
6
+ lib/lemon/cli/base.rb
7
+ lib/lemon/cli/coverage.rb
8
+ lib/lemon/cli/generate.rb
9
+ lib/lemon/cli/test.rb
18
10
  lib/lemon/cli.rb
19
- lib/lemon/controller/coverage_analyzer.rb
20
- lib/lemon/controller/scaffold_generator.rb
21
- lib/lemon/controller/test_runner.rb
22
- lib/lemon/model/ae.rb
23
- lib/lemon/model/cover_unit.rb
24
- lib/lemon/model/main.rb
25
- lib/lemon/model/pending.rb
26
- lib/lemon/model/snapshot.rb
27
- lib/lemon/model/source_parser.rb
28
- lib/lemon/model/test_case.rb
29
- lib/lemon/model/test_context.rb
30
- lib/lemon/model/test_suite.rb
31
- lib/lemon/model/test_unit.rb
32
- lib/lemon/view/cover_reports/abstract.rb
33
- lib/lemon/view/cover_reports/compact.rb
34
- lib/lemon/view/cover_reports/outline.rb
35
- lib/lemon/view/cover_reports/verbose.rb
36
- lib/lemon/view/cover_reports/yaml.rb
37
- lib/lemon/view/test_reports/abstract.rb
38
- lib/lemon/view/test_reports/dotprogress.rb
39
- lib/lemon/view/test_reports/html.rb
40
- lib/lemon/view/test_reports/outline.rb
41
- lib/lemon/view/test_reports/summary.rb
42
- lib/lemon/view/test_reports/tap.rb
43
- lib/lemon/view/test_reports/tapj.rb
44
- lib/lemon/view/test_reports/tapy.rb
45
- lib/lemon/view/test_reports/verbose.rb
11
+ lib/lemon/core_ext/kernel.rb
12
+ lib/lemon/core_ext/omission.rb
13
+ lib/lemon/core_ext.rb
14
+ lib/lemon/coverage/analyzer.rb
15
+ lib/lemon/coverage/cover_unit.rb
16
+ lib/lemon/coverage/formats/abstract.rb
17
+ lib/lemon/coverage/formats/compact.rb
18
+ lib/lemon/coverage/formats/outline.rb
19
+ lib/lemon/coverage/formats/verbose.rb
20
+ lib/lemon/coverage/formats/yaml.rb
21
+ lib/lemon/coverage/snapshot.rb
22
+ lib/lemon/coverage/source_parser.rb
23
+ lib/lemon/generator.rb
24
+ lib/lemon/test_advice.rb
25
+ lib/lemon/test_case.rb
26
+ lib/lemon/test_class.rb
27
+ lib/lemon/test_method.rb
28
+ lib/lemon/test_module.rb
29
+ lib/lemon/test_proc.rb
30
+ lib/lemon/test_setup.rb
31
+ lib/lemon/test_world.rb
46
32
  lib/lemon.rb
47
33
  lib/lemon.yml
48
- qed/applique/fs.rb
49
- qed/coverage/01_complete.rdoc
50
- qed/coverage/02_incomplete.rdoc
51
- qed/coverage/03_extensions.rdoc
52
- test/case_coverage_analyzer.rb
53
- test/case_test_case_dsl.rb
54
- test/fixtures/case_complete.rb
55
- test/fixtures/case_inclusion.rb
56
- test/fixtures/case_incomplete.rb
57
- test/fixtures/example.rb
58
- test/fixtures/helper.rb
59
- test/runner
34
+ spec/applique/fs.rb
35
+ spec/coverage/01_complete.rdoc
36
+ spec/coverage/02_incomplete.rdoc
37
+ spec/coverage/03_extensions.rdoc
38
+ spec/coverage/applique/lemon.rb
39
+ try/.test
40
+ try/case_error.rb
41
+ try/case_fail.rb
42
+ try/case_pass.rb
43
+ try/case_pending.rb
44
+ try/case_singleton.rb
45
+ try/case_untested.rb
46
+ try/fixtures/calculator.rb
47
+ try/fixtures/example-use.rb
48
+ try/fixtures/example.rb
49
+ try/helpers/loadpath.rb
60
50
  HISTORY.rdoc
61
51
  PROFILE
62
- README.rdoc
63
52
  QED.rdoc
53
+ README.md
64
54
  VERSION
65
55
  COPYING.rdoc
data/PROFILE CHANGED
@@ -1,6 +1,5 @@
1
1
  ---
2
2
  title : Lemon
3
- suite : proutils
4
3
  summary: Pucker-tight Unit Testing
5
4
  authors:
6
5
  - Thomas Sawyer <transfire@gmail.com>
@@ -16,15 +15,16 @@ resources:
16
15
  repositories:
17
16
  origin: git://github.com/proutils/lemon.git
18
17
 
19
- copyright: Copyright 2009 Thomas Sawyer
20
- license: BSD-2-Clause
21
-
22
18
  requirements:
19
+ - test
23
20
  - ae
24
21
  - ansi 1.3+
25
22
  - detroit (build)
26
23
  - reap (build)
27
24
  - qed (test)
28
- - cucumber (test)
29
- - aruba (test)
25
+
26
+ organization: RubyWorks
27
+
28
+ copyright: Copyright 2009 Thomas Sawyer
29
+ license: BSD-2-Clause
30
30
 
@@ -0,0 +1,113 @@
1
+ # Lemon
2
+
3
+ [Homepage](http://rubyworks.github.com/lemon) |
4
+ [User Guide](http://wiki.github.com/rubyworks/lemon) |
5
+ [Development](http://github.com/rubyworks/lemon) |
6
+ [Issues](http://github.com/rubyworks/lemon/issues)
7
+
8
+
9
+ ## DESCRIPTION
10
+
11
+ Lemon is a Unit Testing Framework that enforces a strict test structure mirroring the class/module and method structure of the target code. Arguably this promotes the proper technique for low-level unit testing and helps ensure good test coverage.
12
+
13
+ The difference between unit testing and functional testing, and all other forms of testing for that matter, is simply a matter of where the testing *concern* lies. The concerns of unit testing are the concerns of unit tests --the individual methods.
14
+
15
+ IMPORTANT! As of v0.9+ the API has changed. The `unit :name => "description"` notation is no longer supported.
16
+
17
+
18
+ ## EXAMPLE
19
+
20
+ Lemon tests are broken down into target class or module and target methods.
21
+ Withn these lie the acutal tests.
22
+
23
+ Let's say we have a script 'mylib.rb' consisting of the class X:
24
+
25
+ ``` ruby
26
+ class X
27
+ def a; "a"; end
28
+ end
29
+ ```
30
+
31
+ An test case for the class would be written:
32
+
33
+ ``` ruby
34
+ Covers 'mylib'
35
+
36
+ TestCase X do
37
+
38
+ Setup "Description of setup." do
39
+ @x = X.new
40
+ end
41
+
42
+ Unit :a do
43
+ Test "method #a does something expected" do
44
+ @x.a.assert.is_a? String
45
+ end
46
+
47
+ Test "method #a does something else expected" do
48
+ @x.a.assert == "x"
49
+ end
50
+ end
51
+
52
+ end
53
+ ```
54
+
55
+ The `covers` method works just like `require` with the exception that it records the file for reference --under certain scenarios it can be used to improve test coverage analysis.
56
+
57
+ The setup (also called the *concern*) is run for every subsequent test until a new setup is defined.
58
+
59
+ In conjunction with the `#setup` method, there is a `#teardown` method which can be used "tidy-up" after each test if need be.
60
+
61
+ You might have also notice by the documentation that the test methods do not have to be capitalized.
62
+
63
+ That is the bulk of the matter for writing Lemon tests. To learn about additonal features not mentioned here, check-out the [User Guide](http://wiki.github.com/rubyworks/lemon).
64
+
65
+
66
+ ## USAGE
67
+
68
+ ### Running Tests
69
+
70
+ Tests can be run using the `lemonade` command line tool.
71
+
72
+ $ lemonade test test/cases/name_case.rb
73
+
74
+ Lemon utilizes the Ruby Test system to run tests, the `lemonade test` command simply passes off the running of tests to `ruby-test`. So the `ruby-test` command-line utility can also be used directly:
75
+
76
+ $ ruby-test -r lemon test/cases/name_case.rb
77
+
78
+ Normal output is typical _dot-progress_. Other output types can be specified by the `--format` or `-f` option.
79
+
80
+ $ ruby-test -r lemon -f tap test/cases/name_case.rb
81
+
82
+ See [Ruby Test](http://rubyworks.github.com/test) for more information.
83
+
84
+ ### Checking Test Coverage
85
+
86
+ Lemon can check test coverage by loading your target system and comparing it to your tests. To do this use the <code>lemonade coverage</code> command the utility.
87
+
88
+ $ lemonade coverage -Ilib test/cases/*.rb
89
+
90
+ The coverage tool provides class/module and method coverage and is meant to as a "guidance system" for developers working toward complete test coverage. It is not an lines-of-code coverage tool and should not be considered a substitute for one.
91
+
92
+ ### Generating Test Skeletons
93
+
94
+ Because of the one to one correspondence of test case and unit test to class/module and method, Lemon can also generate test scaffolding for previously written code. To do this, use the <code>lemonade generate</code> command line utility and provide the lib location or files of the scripts for which to generate test scaffolding, and the output location for the test scripts.
95
+
96
+ $ lemonade generate -Ilib test/cases/*.rb
97
+
98
+ Generating test case scaffolding from code will undoubtedly strike test-driven developers as a case of putting the cart before the horse. However, it is not unreasonable to argue that high-level, behavior-driven, functional testing frameworks, such as Q.E.D. and Cucumber are better suited to test-first methodologies. While test-driven development can obviously be done with Lemon, unit-testing is more appropriate for testing specific, critical portions of code, or for achieving full test coverage for mission critical applications.
99
+
100
+ ### Test Directory
101
+
102
+ There is no special directory for Lemon tests. Since they are unit tests, `test/` or `test/unit/` are good choices. Other options are `cases/` and `test/cases` since each file generally defines a single test case.
103
+
104
+
105
+ ## COPYRIGHTS
106
+
107
+ Lemon Unit Testing Framework
108
+
109
+ Copyright (c) 2009 Thomas Sawyer
110
+
111
+ Lemon is distributed according to the terms of the **FreeBSD** License.
112
+
113
+ See the COPYING.rdoc file for details.
data/Rakefile CHANGED
@@ -1,13 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/rake'
4
+
5
+ Test::Rake::TestTask.new do |t|
6
+ t.libs << 'test/fixtures'
7
+ t.tests << 'test/*.rb'
8
+ end
9
+
1
10
  namespace :test do
2
11
 
3
- desc 'run lemon unit tests'
12
+ desc 'run lemon unit tests (via shell command)'
4
13
  task :unit do
5
- sh 'lemon -Itest/fixtures test/*.rb'
14
+ sh 'lemonade test -Itest/fixtures test/*.rb'
6
15
  end
7
16
 
8
17
  desc 'run qed demonstration tests'
9
18
  task :qed do
10
- sh 'qed'
19
+ sh 'qed -Ilib spec/'
11
20
  end
12
21
 
13
22
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.8.5
1
+ 0.9.0
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # NOTE: This command would have been called `lemon` but there turns
4
+ # out to be a command by that name used by SQLite 2.x, so
5
+ # we have avoded the name clash by using `lemonade` instead.
6
+
7
+ require 'lemon/cli'
8
+ Lemon.cli(*ARGV)
@@ -16,5 +16,55 @@ module Lemon
16
16
 
17
17
  end
18
18
 
19
- require 'lemon/cli'
20
- require 'lemon/controller/coverage_analyzer'
19
+ # Ruby Test standard location for test objects.
20
+ $TEST_SUITE ||= []
21
+
22
+ require 'lemon/test_class'
23
+
24
+ module Lemon
25
+
26
+ # Lemon's toplevel test domain specific language.
27
+ module DSL
28
+
29
+ # Require script and record it.
30
+ #
31
+ # @param [STRING] script
32
+ # The load path of a script.
33
+ #
34
+ def covers(script)
35
+ # TODO: record coverage list
36
+ require script
37
+ end
38
+ alias :Covers :covers
39
+
40
+ # Define a class/module test case.
41
+ #
42
+ # @param [Module,Class] target
43
+ # The class or module the tests will target.
44
+ #
45
+ # @yield
46
+ # Scope in which to define unit/method testcases.
47
+ #
48
+ def test_case(target, &block)
49
+ case target
50
+ when Class
51
+ $TEST_SUITE << Lemon::TestClass.new(:target=>target, &block)
52
+ when Module
53
+ $TEST_SUITE << Lemon::TestModule.new(:target=>target, &block)
54
+ else
55
+ if defined?(super)
56
+ super(target, &block)
57
+ else
58
+ raise
59
+ end
60
+ end
61
+ end
62
+
63
+ alias :TestCase :test_case
64
+ alias :testcase :test_case
65
+
66
+ end
67
+
68
+ end
69
+
70
+ extend Lemon::DSL