yard-bench 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.document +11 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/LICENSE.txt +22 -0
- data/README.md +38 -0
- data/Rakefile +35 -0
- data/config/cucumber.yml +6 -0
- data/examples/example_benchmark.rb +34 -0
- data/features/bm_dsl.feature +36 -0
- data/features/monkeypatches.feature +82 -0
- data/features/step_definitions/cukes_bm_dsl.rb +83 -0
- data/features/step_definitions/cukes_monkeypatches.rb +136 -0
- data/features/support/color-comment-formatter.rb +20 -0
- data/features/support/env.rb +5 -0
- data/lib/dsl/bm_dsl.rb +158 -0
- data/lib/dsl/monkeypatches.rb +334 -0
- data/lib/yard-bench/handler.rb +45 -0
- data/lib/yard-bench/version.rb +7 -0
- data/lib/yard-bench.rb +8 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/yard-bench_spec.rb +7 -0
- data/templates/default/method_details/html/benchmarks.erb +16 -0
- data/templates/default/method_details/setup.rb +6 -0
- data/templates/default/method_details/text/benchmarks.erb +15 -0
- data/yard-bench.gemspec +36 -0
- data/yard-bench.komodoproject +4 -0
- metadata +157 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: f4b741f7ac917188402ae134a53b8ee9f65a4409
|
4
|
+
data.tar.gz: a6db99b9f15facdd66aabd7936176681a0259caa
|
5
|
+
!binary "U0hBNTEy":
|
6
|
+
metadata.gz: 4c3359d6aaf319af83c779c4998aa438f5ed846b69335a6b6a1082e3eb19450f30cf9f6e2b237cb11d3b004d44f77facc265132ffc54775b2c63e02dc228a894
|
7
|
+
data.tar.gz: 22637cfe552421e8bf4d11bb1fd1817a84b27fe7ad2568eb1b6dfc7d589680322935b8e4e7ad1cba61da41b857454afc3330388db48b87b3dd16d94fb8d1a3af
|
data/.document
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# .document is used by rdoc and yard to know how to generate documentation
|
2
|
+
# for example, it can be used to control how rdoc gets built when you do `gem install foo`
|
3
|
+
|
4
|
+
README.rdoc
|
5
|
+
lib/**/*.rb
|
6
|
+
bin/*
|
7
|
+
|
8
|
+
# Files below this - are treated as 'extra files', and aren't parsed for ruby code
|
9
|
+
-
|
10
|
+
features/**/*.feature
|
11
|
+
LICENSE
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2013 Alexei Matyushkin
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Alexei Matyushkin
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# YARD::Bench
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'yard-bench'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install yard-bench
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
Put the following code anywhere within your class:
|
22
|
+
|
23
|
+
benchmark :func1, :func2
|
24
|
+
|
25
|
+
or even:
|
26
|
+
|
27
|
+
class String
|
28
|
+
⌚ :⋅
|
29
|
+
|
30
|
+
and the benchmarks for the chosen functions will be included in yardoc.
|
31
|
+
|
32
|
+
## Contributing
|
33
|
+
|
34
|
+
1. Fork it
|
35
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
36
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
37
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
38
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
|
3
|
+
Rake::TaskManager.record_task_metadata = true
|
4
|
+
|
5
|
+
require 'bueller'
|
6
|
+
Bueller::Tasks.new
|
7
|
+
|
8
|
+
require 'rspec/core/rake_task'
|
9
|
+
RSpec::Core::RakeTask.new(:examples) do |examples|
|
10
|
+
examples.rspec_opts = '-Ispec'
|
11
|
+
end
|
12
|
+
|
13
|
+
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
14
|
+
spec.rspec_opts = '-Ispec'
|
15
|
+
spec.rcov = true
|
16
|
+
end
|
17
|
+
|
18
|
+
require 'cucumber/rake/task'
|
19
|
+
Cucumber::Rake::Task.new(:features) do |t|
|
20
|
+
t.cucumber_opts = "--format Cucumber::Formatter::ColorCommentFormatter"
|
21
|
+
end
|
22
|
+
|
23
|
+
task :default => :examples
|
24
|
+
|
25
|
+
require 'yard'
|
26
|
+
YARD::Rake::YardocTask.new do |t|
|
27
|
+
t.files = ['lib/**/*.rb', 'features/**/*.feature', 'features/**/*.rb', 'examples/**/*.rb']
|
28
|
+
t.options = ['-e./lib/yard-bench.rb', '--no-private']
|
29
|
+
end
|
30
|
+
|
31
|
+
task :list do
|
32
|
+
Rake.application.tasks.each do |task|
|
33
|
+
print task.name() + ' #' + task.comment.to_s() + "\n"
|
34
|
+
end
|
35
|
+
end
|
data/config/cucumber.yml
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require_relative '../lib/dsl/bm_dsl'
|
4
|
+
|
5
|
+
# Example module to test benchmarking functionality.
|
6
|
+
module BmExamples
|
7
|
+
# Example class to test benchmarking functionality.
|
8
|
+
class BmExample
|
9
|
+
benchmark :do_it
|
10
|
+
⌚ :do_other
|
11
|
+
|
12
|
+
# The value
|
13
|
+
attr_reader :value
|
14
|
+
# Constructor.
|
15
|
+
# @param value [Fixnum] the value to add to 10 within {#value} initializer.
|
16
|
+
# @param addval [Fixnum] another value to add to 10 within {#value} initializer.
|
17
|
+
# @param attrs [Hash] additional parameters (ignored.)
|
18
|
+
def initialize value, addval, *attrs
|
19
|
+
@value = 10 + value + addval
|
20
|
+
end
|
21
|
+
# Multiplies {#value} by parameter given.
|
22
|
+
# @param deg [Fixnum]
|
23
|
+
# @return [Fixnum] {#value} multiplied by deg.
|
24
|
+
def do_it deg
|
25
|
+
@value * deg
|
26
|
+
end
|
27
|
+
# Produces a power of the parameter given.
|
28
|
+
# @param base [Fixnum]
|
29
|
+
# @return [Fixnum] {#value} in a power of base
|
30
|
+
def do_other base = 2
|
31
|
+
@value ** base
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
Feature: The DSL for benchmarking within YARD documentation
|
2
|
+
In order to provide benchmarking within YARDoc
|
3
|
+
A developer uses DSL
|
4
|
+
|
5
|
+
# -----------------------------------------------------------
|
6
|
+
# -------------------- Callers --------------------------
|
7
|
+
# -----------------------------------------------------------
|
8
|
+
|
9
|
+
Scenario: ☎ is the method to create new instance of a class with suggested params if needed
|
10
|
+
Given I have a class with contructor requiring parameters
|
11
|
+
When I call a ☎ method on it
|
12
|
+
Then I have an instance of the class
|
13
|
+
|
14
|
+
Scenario: ☏ is the method to be called on an instance of the class with suggested params if needed
|
15
|
+
Given I have an instance method of the class requiring parameters
|
16
|
+
When I call a ☏ method for it
|
17
|
+
Then I have params suggested and the method called
|
18
|
+
|
19
|
+
# -----------------------------------------------------------
|
20
|
+
# -------------------- Measures -------------------------
|
21
|
+
# -----------------------------------------------------------
|
22
|
+
|
23
|
+
Scenario: The benchmarks set are to be processed with call to ::Kernel::⌛ method
|
24
|
+
Given I marked some methods as benchmarkable
|
25
|
+
When I call a ⌛ method
|
26
|
+
Then I yield all the benchmarks
|
27
|
+
|
28
|
+
Scenario: The benchmarks may be set with wildcards
|
29
|
+
Given I marked all methods of a class as benchmarkable via `:⋅`
|
30
|
+
When I call a ⌛ method
|
31
|
+
Then I yield all the benchmarks
|
32
|
+
|
33
|
+
Scenario: The only benchmark is to be returned properly for the class’ method
|
34
|
+
Given I marked all methods of a class as benchmarkable via `:⋅`
|
35
|
+
When I call a get method with `BmTests::BmTester`, `do_it` parameters
|
36
|
+
Then I yield the benchmarks for `do_it` method
|
@@ -0,0 +1,82 @@
|
|
1
|
+
Feature: Applying shorthands and some new methods to standard library
|
2
|
+
In order to make the coding a really delightful process
|
3
|
+
A developer uses new aliases/shorthands/functions and enjoys
|
4
|
+
|
5
|
+
# -----------------------------------------------------------
|
6
|
+
# -------------------- Kernel ---------------------------
|
7
|
+
# -----------------------------------------------------------
|
8
|
+
|
9
|
+
Scenario: λ is the alias for lambda
|
10
|
+
Given I define lambda with newly introduced λ alias
|
11
|
+
When I call a codeblock defined with “λ”
|
12
|
+
Then the code is being executed and returns proper value (squared param)
|
13
|
+
|
14
|
+
Scenario: λ is the proper lambda (parameter count aware) alias for lambda
|
15
|
+
Given I define lambda with newly introduced λ alias
|
16
|
+
When I call a codeblock defined with “λ” with wrong amount of arguments
|
17
|
+
Then I got ArgumentError as the result
|
18
|
+
|
19
|
+
Scenario: Λ is the alias for proc
|
20
|
+
Given I define proc with newly introduced Λ alias
|
21
|
+
When I call a codeblock defined with “Λ”
|
22
|
+
Then the code is being executed and returns proper value (squared param)
|
23
|
+
|
24
|
+
Scenario: Λ is the proc not lambda (parameter count unaware) alias for proc
|
25
|
+
Given I define proc with newly introduced Λ alias
|
26
|
+
When I call a codeblock defined with “Λ” with wrong amount of arguments
|
27
|
+
Then the code is being executed and returns proper value (squared param)
|
28
|
+
|
29
|
+
# -----------------------------------------------------------
|
30
|
+
|
31
|
+
Scenario: Random values for the supported classes should be produced
|
32
|
+
Given I define classset as default (String, Fixnum, Array, Hash)
|
33
|
+
When I ask for a random value on a classset
|
34
|
+
Then the random value should have one of the classes given
|
35
|
+
|
36
|
+
# -----------------------------------------------------------
|
37
|
+
# -------------------- Randoms --------------------------
|
38
|
+
# -----------------------------------------------------------
|
39
|
+
|
40
|
+
Scenario: Random value for the String class should be produced
|
41
|
+
Given I am `using YARD::MonkeyPatches`
|
42
|
+
When I call random of a size 1024 on a String instance
|
43
|
+
Then the random value should be generated of type String and have length of 1024
|
44
|
+
|
45
|
+
Scenario: Random value for the Fixnum class should be produced
|
46
|
+
Given I am `using YARD::MonkeyPatches`
|
47
|
+
When I call random on a Fixnum instance 1024
|
48
|
+
Then the random value should be generated of type Fixnum and be less than 1024
|
49
|
+
|
50
|
+
Scenario: Random value for the Array class should be produced
|
51
|
+
Given I am `using YARD::MonkeyPatches`
|
52
|
+
When I call random of a size 1024 on an Array instance
|
53
|
+
Then the random value should be generated of type Array and have length of 1024
|
54
|
+
|
55
|
+
Scenario: Random value for the Hash class should be produced
|
56
|
+
Given I am `using YARD::MonkeyPatches`
|
57
|
+
When I call random of a size 1024 on a Hash instance
|
58
|
+
Then the random value should be generated of type Hash and have length of 1024
|
59
|
+
|
60
|
+
# -----------------------------------------------------------
|
61
|
+
# -------------------- Singletons -----------------------
|
62
|
+
# -----------------------------------------------------------
|
63
|
+
|
64
|
+
Scenario: Random value for the String class should be produced by call to String.∀
|
65
|
+
Given I am `using YARD::MonkeyPatches`
|
66
|
+
When I call ∀ on a String class
|
67
|
+
Then the random value should be generated of type String and have default length of 32
|
68
|
+
|
69
|
+
Scenario: Random value for the Fixnum class should be produced by call to Fixnum.∀
|
70
|
+
Given I am `using YARD::MonkeyPatches`
|
71
|
+
When I call ∀ on a Fixnum class
|
72
|
+
Then the random value should be generated of type Fixnum and be not greater than 1024
|
73
|
+
|
74
|
+
Scenario: Random value for the Array class should be produced by call to Array.∀
|
75
|
+
Given I am `using YARD::MonkeyPatches`
|
76
|
+
When I call ∀ on an Array class with size parameter 64
|
77
|
+
Then the random value should be generated of type Array and have size of the parameter
|
78
|
+
|
79
|
+
Scenario: Random value for the Hash class should be produced by call to Hash.∀
|
80
|
+
Given I am `using YARD::MonkeyPatches`
|
81
|
+
When I call ∀ on a Hash class with size parameter 64
|
82
|
+
Then the random value should be generated of type Hash and have size of the parameter
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'yard-bench'
|
4
|
+
|
5
|
+
using YARD::MonkeyPatches
|
6
|
+
using YARD::Bench
|
7
|
+
|
8
|
+
# @private
|
9
|
+
module BmTests
|
10
|
+
class BmTester
|
11
|
+
attr_reader :value
|
12
|
+
def initialize value, addval, *attrs
|
13
|
+
@value = 10 + value + addval
|
14
|
+
end
|
15
|
+
def do_it deg
|
16
|
+
@value * deg
|
17
|
+
end
|
18
|
+
def do_other base = 2
|
19
|
+
base * @value
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# -----------------------------------------------------------
|
25
|
+
# -------------------- Callers --------------------------
|
26
|
+
# -----------------------------------------------------------
|
27
|
+
|
28
|
+
Given(/^I have a class with contructor requiring parameters$/) do
|
29
|
+
# BmTests::BmTester above
|
30
|
+
end
|
31
|
+
|
32
|
+
When(/^I call a ☎ method on it$/) do
|
33
|
+
@inst = BmTests::BmTester.☎
|
34
|
+
end
|
35
|
+
|
36
|
+
Then(/^I have an instance of the class$/) do
|
37
|
+
BmTests::BmTester === @inst
|
38
|
+
end
|
39
|
+
|
40
|
+
Given(/^I have an instance method of the class requiring parameters$/) do
|
41
|
+
# BmTests::BmTester.do_it above
|
42
|
+
end
|
43
|
+
|
44
|
+
When(/^I call a ☏ method for it$/) do
|
45
|
+
@res = BmTests::BmTester.☏ :do_it
|
46
|
+
end
|
47
|
+
|
48
|
+
Then(/^I have params suggested and the method called$/) do
|
49
|
+
puts @res
|
50
|
+
end
|
51
|
+
|
52
|
+
# -----------------------------------------------------------
|
53
|
+
# -------------------- Measures -------------------------
|
54
|
+
# -----------------------------------------------------------
|
55
|
+
|
56
|
+
Given(/^I marked some methods as benchmarkable$/) do
|
57
|
+
class String
|
58
|
+
benchmark :capitalize
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
Given(/^I marked all methods of a class as benchmarkable via `:⋅`$/) do
|
63
|
+
class BmTests::BmTester
|
64
|
+
benchmark :⋅
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
When(/^I call a ⌛ method$/) do
|
69
|
+
puts YARD::Bench::Marks.⌛
|
70
|
+
end
|
71
|
+
|
72
|
+
Then(/^I yield all the benchmarks$/) do
|
73
|
+
# pending # express the regexp above with the code you wish you had
|
74
|
+
end
|
75
|
+
|
76
|
+
When(/^I call a get method with `BmTests::BmTester`, `do_it` parameters$/) do
|
77
|
+
puts YARD::Bench::Marks.get 'BmTests::BmTester', 'do_it'
|
78
|
+
end
|
79
|
+
|
80
|
+
Then(/^I yield the benchmarks for `do_it` method$/) do
|
81
|
+
# pending # express the regexp above with the code you wish you had
|
82
|
+
end
|
83
|
+
|
@@ -0,0 +1,136 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'yard-bench'
|
4
|
+
|
5
|
+
using YARD::MonkeyPatches
|
6
|
+
|
7
|
+
# -----------------------------------------------------------
|
8
|
+
# -------------------- Kernel ---------------------------
|
9
|
+
# -----------------------------------------------------------
|
10
|
+
|
11
|
+
Given(/^I define lambda with newly introduced λ alias$/) do
|
12
|
+
@cb = λ { |a| a*2 }
|
13
|
+
@orig = lambda { |a| a*2 }
|
14
|
+
end
|
15
|
+
|
16
|
+
Given(/^I define proc with newly introduced Λ alias$/) do
|
17
|
+
@cb = Λ { |a| a*2 }
|
18
|
+
@orig = proc { |a| a*2 }
|
19
|
+
end
|
20
|
+
|
21
|
+
When(/^I call a codeblock defined with “(.*?)”$/) do |arg|
|
22
|
+
@result = @cb.call arg
|
23
|
+
@expected = @orig.call arg
|
24
|
+
end
|
25
|
+
|
26
|
+
Then(/^the code is being executed and returns proper value \(squared param\)$/) do
|
27
|
+
@expected == @result
|
28
|
+
end
|
29
|
+
|
30
|
+
When(/^I call a codeblock defined with “(.*?)” with wrong amount of arguments$/) do |arg|
|
31
|
+
@result = (@cb.call(arg, arg, arg) rescue $!)
|
32
|
+
end
|
33
|
+
|
34
|
+
Then(/^I got ArgumentError as the result$/) do
|
35
|
+
ArgumentError === @result
|
36
|
+
end
|
37
|
+
|
38
|
+
# -----------------------------------------------------------
|
39
|
+
|
40
|
+
Given(/^I define classset as default \((.*)\)$/) do |arg|
|
41
|
+
@c = instance_eval("[#{arg}]")
|
42
|
+
end
|
43
|
+
|
44
|
+
When(/^I ask for a random value on a classset$/) do
|
45
|
+
@r = random
|
46
|
+
end
|
47
|
+
|
48
|
+
Then(/^the random value should have one of the classes given$/) do
|
49
|
+
10.times { @c.include? @r.class }
|
50
|
+
end
|
51
|
+
|
52
|
+
# -----------------------------------------------------------
|
53
|
+
# -------------------- Randoms --------------------------
|
54
|
+
# -----------------------------------------------------------
|
55
|
+
|
56
|
+
Given(/^I am `using YARD::MonkeyPatches`$/) do
|
57
|
+
# already using in the top of file
|
58
|
+
end
|
59
|
+
|
60
|
+
When(/^I call random of a size (\d+) on a String instance$/) do |sz|
|
61
|
+
@i = "".∀ :size => sz.to_i
|
62
|
+
end
|
63
|
+
|
64
|
+
Then(/^the random value should be generated of type String and have length of (\d*)$/) do |sz|
|
65
|
+
String === @i && sz.to_i == @i.length
|
66
|
+
puts "Generated String: “#{@i}”"
|
67
|
+
end
|
68
|
+
|
69
|
+
When(/^I call random on a Fixnum instance (\d+)$/) do |mx|
|
70
|
+
@i = mx.to_i.∀
|
71
|
+
end
|
72
|
+
|
73
|
+
Then(/^the random value should be generated of type Fixnum and be less than (\d+)$/) do |mx|
|
74
|
+
Fixnum === @i && @i < mx.to_i
|
75
|
+
puts "Generated Fixnum: “#{@i}”"
|
76
|
+
end
|
77
|
+
|
78
|
+
When(/^I call random of a size (\d+) on an Array instance$/) do |sz|
|
79
|
+
@i = [].∀ :size => sz.to_i
|
80
|
+
end
|
81
|
+
|
82
|
+
Then(/^the random value should be generated of type Array and have length of (\d+)$/) do |mx|
|
83
|
+
Array === @i && mx.to_i == @i.size
|
84
|
+
puts "Generated Array (1st element): “#{@i[0]}”"
|
85
|
+
end
|
86
|
+
|
87
|
+
When(/^I call random of a size (\d+) on a Hash instance$/) do |sz|
|
88
|
+
@i = {}.∀ :size => sz.to_i
|
89
|
+
end
|
90
|
+
|
91
|
+
Then(/^the random value should be generated of type Hash and have length of (\d+)$/) do |mx|
|
92
|
+
Hash === @i && mx.to_i == @i.size
|
93
|
+
puts "Generated Hash (1st element): “#{@i.first}”"
|
94
|
+
end
|
95
|
+
|
96
|
+
# -----------------------------------------------------------
|
97
|
+
# -------------------- Singletons -----------------------
|
98
|
+
# -----------------------------------------------------------
|
99
|
+
|
100
|
+
When(/^I call ∀ on a String class$/) do
|
101
|
+
@is = String.∀
|
102
|
+
end
|
103
|
+
|
104
|
+
Then(/^the random value should be generated of type String and have default length of (\d+)$/) do |sz|
|
105
|
+
String === @is && sz.to_i == @is.length
|
106
|
+
puts "Generated String: “#{@is}”"
|
107
|
+
end
|
108
|
+
|
109
|
+
When(/^I call ∀ on a Fixnum class$/) do
|
110
|
+
@if = Fixnum.∀
|
111
|
+
end
|
112
|
+
|
113
|
+
Then(/^the random value should be generated of type Fixnum and be not greater than (\d+)$/) do |maxval|
|
114
|
+
Fixnum === @if && @if < maxval.to_i
|
115
|
+
puts "Generated Fixnum: “#{@if}”"
|
116
|
+
end
|
117
|
+
|
118
|
+
When(/^I call ∀ on an Array class with size parameter (\d+)$/) do |sz|
|
119
|
+
@sz = sz.to_i
|
120
|
+
@ia = Array.∀ :size => @sz
|
121
|
+
end
|
122
|
+
|
123
|
+
Then(/^the random value should be generated of type Array and have size of the parameter$/) do
|
124
|
+
Array === @ia && @ia.size == @sz
|
125
|
+
puts "Generated Array (1st element): “#{@ia[0]}”"
|
126
|
+
end
|
127
|
+
|
128
|
+
When(/^I call ∀ on a Hash class with size parameter (\d+)$/) do |sz|
|
129
|
+
@sz = sz.to_i
|
130
|
+
@ih = Hash.∀ :size => @sz
|
131
|
+
end
|
132
|
+
|
133
|
+
Then(/^the random value should be generated of type Hash and have size of the parameter$/) do
|
134
|
+
Hash === @ih && @ih.size == @sz
|
135
|
+
puts "Generated Hash (1st element): “#{@ih.first}”"
|
136
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# features/support/color-comment-formatter.rb
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'cucumber/formatter/pretty'
|
6
|
+
|
7
|
+
module Cucumber
|
8
|
+
module Formatter
|
9
|
+
class ColorCommentFormatter < Cucumber::Formatter::Pretty
|
10
|
+
def initialize(step_mother, io, options)
|
11
|
+
super(step_mother, io, options)
|
12
|
+
end
|
13
|
+
|
14
|
+
def comment_line comment_line
|
15
|
+
@io.puts(format_string(comment_line, :comment).indent(@indent))
|
16
|
+
@io.flush
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|