gherkin 2.2.5-x86-mingw32
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/.gitattributes +2 -0
- data/.gitignore +11 -0
- data/.mailmap +2 -0
- data/.rspec +1 -0
- data/.rvmrc +1 -0
- data/Gemfile +5 -0
- data/History.txt +306 -0
- data/LICENSE +20 -0
- data/README.rdoc +59 -0
- data/Rakefile +16 -0
- data/VERSION +1 -0
- data/bin/gherkin +5 -0
- data/build_native_gems.sh +8 -0
- data/cucumber.yml +3 -0
- data/features/escaped_pipes.feature +8 -0
- data/features/feature_parser.feature +237 -0
- data/features/json_formatter.feature +278 -0
- data/features/json_parser.feature +318 -0
- data/features/native_lexer.feature +19 -0
- data/features/parser_with_native_lexer.feature +205 -0
- data/features/pretty_formatter.feature +15 -0
- data/features/step_definitions/eyeball_steps.rb +3 -0
- data/features/step_definitions/gherkin_steps.rb +29 -0
- data/features/step_definitions/json_formatter_steps.rb +28 -0
- data/features/step_definitions/json_parser_steps.rb +20 -0
- data/features/step_definitions/pretty_formatter_steps.rb +82 -0
- data/features/steps_parser.feature +46 -0
- data/features/support/env.rb +38 -0
- data/gherkin.gemspec +59 -0
- data/ikvm/.gitignore +3 -0
- data/java/.gitignore +2 -0
- data/java/src/main/java/gherkin/lexer/i18n/.gitignore +1 -0
- data/java/src/main/resources/gherkin/.gitignore +1 -0
- data/lib/.gitignore +4 -0
- data/lib/gherkin.rb +2 -0
- data/lib/gherkin/c_lexer.rb +17 -0
- data/lib/gherkin/cli/main.rb +33 -0
- data/lib/gherkin/formatter/argument.rb +28 -0
- data/lib/gherkin/formatter/colors.rb +119 -0
- data/lib/gherkin/formatter/escaping.rb +15 -0
- data/lib/gherkin/formatter/filter_formatter.rb +136 -0
- data/lib/gherkin/formatter/json_formatter.rb +72 -0
- data/lib/gherkin/formatter/line_filter.rb +26 -0
- data/lib/gherkin/formatter/model.rb +231 -0
- data/lib/gherkin/formatter/monochrome_format.rb +9 -0
- data/lib/gherkin/formatter/pretty_formatter.rb +174 -0
- data/lib/gherkin/formatter/regexp_filter.rb +21 -0
- data/lib/gherkin/formatter/tag_count_formatter.rb +47 -0
- data/lib/gherkin/formatter/tag_filter.rb +19 -0
- data/lib/gherkin/i18n.rb +180 -0
- data/lib/gherkin/i18n.yml +601 -0
- data/lib/gherkin/json_parser.rb +88 -0
- data/lib/gherkin/lexer/i18n_lexer.rb +47 -0
- data/lib/gherkin/listener/event.rb +45 -0
- data/lib/gherkin/listener/formatter_listener.rb +113 -0
- data/lib/gherkin/native.rb +7 -0
- data/lib/gherkin/native/ikvm.rb +55 -0
- data/lib/gherkin/native/java.rb +55 -0
- data/lib/gherkin/native/null.rb +9 -0
- data/lib/gherkin/parser/meta.txt +5 -0
- data/lib/gherkin/parser/parser.rb +164 -0
- data/lib/gherkin/parser/root.txt +11 -0
- data/lib/gherkin/parser/steps.txt +4 -0
- data/lib/gherkin/rb_lexer.rb +8 -0
- data/lib/gherkin/rb_lexer/.gitignore +1 -0
- data/lib/gherkin/rb_lexer/README.rdoc +8 -0
- data/lib/gherkin/rubify.rb +24 -0
- data/lib/gherkin/tag_expression.rb +62 -0
- data/lib/gherkin/tools.rb +8 -0
- data/lib/gherkin/tools/files.rb +34 -0
- data/lib/gherkin/tools/reformat.rb +20 -0
- data/lib/gherkin/tools/stats.rb +20 -0
- data/lib/gherkin/tools/stats_listener.rb +60 -0
- data/lib/gherkin/version.rb +3 -0
- data/ragel/i18n/.gitignore +1 -0
- data/ragel/lexer.c.rl.erb +459 -0
- data/ragel/lexer.java.rl.erb +224 -0
- data/ragel/lexer.rb.rl.erb +179 -0
- data/ragel/lexer_common.rl.erb +50 -0
- data/spec/gherkin/c_lexer_spec.rb +21 -0
- data/spec/gherkin/fixtures/1.feature +8 -0
- data/spec/gherkin/fixtures/comments_in_table.feature +9 -0
- data/spec/gherkin/fixtures/complex.feature +45 -0
- data/spec/gherkin/fixtures/complex.json +143 -0
- data/spec/gherkin/fixtures/complex_for_filtering.feature +60 -0
- data/spec/gherkin/fixtures/complex_with_tags.feature +61 -0
- data/spec/gherkin/fixtures/dos_line_endings.feature +45 -0
- data/spec/gherkin/fixtures/hantu_pisang.feature +35 -0
- data/spec/gherkin/fixtures/i18n_fr.feature +14 -0
- data/spec/gherkin/fixtures/i18n_no.feature +7 -0
- data/spec/gherkin/fixtures/i18n_zh-CN.feature +9 -0
- data/spec/gherkin/fixtures/scenario_outline_with_tags.feature +13 -0
- data/spec/gherkin/fixtures/scenario_without_steps.feature +5 -0
- data/spec/gherkin/fixtures/simple_with_comments.feature +7 -0
- data/spec/gherkin/fixtures/simple_with_tags.feature +11 -0
- data/spec/gherkin/fixtures/with_bom.feature +3 -0
- data/spec/gherkin/formatter/argument_spec.rb +28 -0
- data/spec/gherkin/formatter/colors_spec.rb +18 -0
- data/spec/gherkin/formatter/filter_formatter_spec.rb +165 -0
- data/spec/gherkin/formatter/model_spec.rb +15 -0
- data/spec/gherkin/formatter/pretty_formatter_spec.rb +140 -0
- data/spec/gherkin/formatter/spaces.feature +9 -0
- data/spec/gherkin/formatter/tabs.feature +9 -0
- data/spec/gherkin/formatter/tag_count_formatter_spec.rb +30 -0
- data/spec/gherkin/i18n_spec.rb +149 -0
- data/spec/gherkin/java_lexer_spec.rb +20 -0
- data/spec/gherkin/json.rb +5 -0
- data/spec/gherkin/json_parser_spec.rb +67 -0
- data/spec/gherkin/lexer/i18n_lexer_spec.rb +43 -0
- data/spec/gherkin/output_stream_string_io.rb +24 -0
- data/spec/gherkin/parser/parser_spec.rb +16 -0
- data/spec/gherkin/rb_lexer_spec.rb +19 -0
- data/spec/gherkin/sexp_recorder.rb +56 -0
- data/spec/gherkin/shared/lexer_group.rb +592 -0
- data/spec/gherkin/shared/py_string_group.rb +153 -0
- data/spec/gherkin/shared/row_group.rb +120 -0
- data/spec/gherkin/shared/tags_group.rb +54 -0
- data/spec/gherkin/tag_expression_spec.rb +137 -0
- data/spec/spec_helper.rb +68 -0
- data/tasks/bench.rake +184 -0
- data/tasks/bench/feature_builder.rb +49 -0
- data/tasks/bench/generated/.gitignore +1 -0
- data/tasks/bench/null_listener.rb +4 -0
- data/tasks/compile.rake +102 -0
- data/tasks/cucumber.rake +18 -0
- data/tasks/gems.rake +42 -0
- data/tasks/ikvm.rake +54 -0
- data/tasks/ragel_task.rb +70 -0
- data/tasks/rdoc.rake +9 -0
- data/tasks/release.rake +30 -0
- data/tasks/rspec.rake +8 -0
- metadata +447 -0
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
Bundler.setup
|
4
|
+
|
5
|
+
require 'gherkin'
|
6
|
+
require 'stringio'
|
7
|
+
require 'gherkin/sexp_recorder'
|
8
|
+
require 'gherkin/output_stream_string_io'
|
9
|
+
require 'gherkin/json'
|
10
|
+
require 'gherkin/shared/lexer_group'
|
11
|
+
require 'gherkin/shared/tags_group'
|
12
|
+
require 'gherkin/shared/py_string_group'
|
13
|
+
require 'gherkin/shared/row_group'
|
14
|
+
|
15
|
+
module GherkinSpecHelper
|
16
|
+
def scan_file(file)
|
17
|
+
@lexer.scan(fixture(file))
|
18
|
+
end
|
19
|
+
|
20
|
+
def fixture(file)
|
21
|
+
File.new(File.dirname(__FILE__) + "/gherkin/fixtures/" + file).read
|
22
|
+
end
|
23
|
+
|
24
|
+
def rubify_hash(hash)
|
25
|
+
if defined?(JRUBY_VERSION)
|
26
|
+
h = {}
|
27
|
+
hash.keySet.each{|key| h[key] = hash[key]}
|
28
|
+
h
|
29
|
+
else
|
30
|
+
hash
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
RSpec.configure do |c|
|
36
|
+
c.include(GherkinSpecHelper)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Allows comparison of Java List with Ruby Array (rows)
|
40
|
+
RSpec::Matchers.define :r do |expected|
|
41
|
+
match do |row|
|
42
|
+
def row.inspect
|
43
|
+
"r " + self.map{|cell| cell}.inspect
|
44
|
+
end
|
45
|
+
row.map{|cell| cell}.should == expected
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
RSpec::Matchers.define :a do |expected|
|
50
|
+
match do |array|
|
51
|
+
def array.inspect
|
52
|
+
"a " + self.map{|e| e.to_sym}.inspect
|
53
|
+
end
|
54
|
+
array.map{|e| e.to_sym}.should == expected
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
RSpec::Matchers.define :sym do |expected|
|
59
|
+
match do |actual|
|
60
|
+
expected.to_s == actual.to_s
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
RSpec::Matchers.define :allow do |event|
|
65
|
+
match do |parser|
|
66
|
+
parser.expected.index(event)
|
67
|
+
end
|
68
|
+
end
|
data/tasks/bench.rake
ADDED
@@ -0,0 +1,184 @@
|
|
1
|
+
%w{/../lib /bench}.each do |l|
|
2
|
+
$LOAD_PATH << File.expand_path(File.dirname(__FILE__) + l)
|
3
|
+
end
|
4
|
+
|
5
|
+
require 'benchmark'
|
6
|
+
|
7
|
+
GENERATED_FEATURES = File.expand_path(File.dirname(__FILE__) + "/bench/generated")
|
8
|
+
|
9
|
+
class RandomFeatureGenerator
|
10
|
+
def initialize(number)
|
11
|
+
require 'faker'
|
12
|
+
require 'feature_builder'
|
13
|
+
|
14
|
+
@number = number
|
15
|
+
end
|
16
|
+
|
17
|
+
def generate
|
18
|
+
@number.times do
|
19
|
+
name = catch_phrase
|
20
|
+
feature = FeatureBuilder.new(name) do |f|
|
21
|
+
num_scenarios = rand_in(1..10)
|
22
|
+
num_scenarios.times do
|
23
|
+
f.scenario(bs) do |steps|
|
24
|
+
num_steps = rand_in(3..10)
|
25
|
+
num_steps.times do
|
26
|
+
steps.step(sentence, self)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
write feature.to_s, name
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def write(content, name)
|
36
|
+
File.open(GENERATED_FEATURES + "/#{name.downcase.gsub(/[\s\-\/]/, '_')}.feature", "w+") do |file|
|
37
|
+
file << content
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def rand_in(range)
|
42
|
+
ary = range.to_a
|
43
|
+
ary[rand(ary.length - 1)]
|
44
|
+
end
|
45
|
+
|
46
|
+
def catch_phrase
|
47
|
+
Faker::Company.catch_phrase
|
48
|
+
end
|
49
|
+
|
50
|
+
def bs
|
51
|
+
Faker::Company.bs.capitalize
|
52
|
+
end
|
53
|
+
|
54
|
+
def sentence
|
55
|
+
Faker::Lorem.sentence
|
56
|
+
end
|
57
|
+
|
58
|
+
def table_cell
|
59
|
+
Faker::Lorem.words(rand(2)+1).join(" ")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
class Benchmarker
|
64
|
+
def initialize
|
65
|
+
@features = Dir[GENERATED_FEATURES + "/**/*feature"]
|
66
|
+
end
|
67
|
+
|
68
|
+
def report(lexer)
|
69
|
+
Benchmark.bm do |x|
|
70
|
+
x.report("#{lexer}:") { send :"run_#{lexer}" }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def report_all
|
75
|
+
Benchmark.bmbm do |x|
|
76
|
+
x.report("native_gherkin:") { run_native_gherkin }
|
77
|
+
x.report("native_gherkin_no_parser:") { run_native_gherkin_no_parser }
|
78
|
+
x.report("rb_gherkin:") { run_rb_gherkin }
|
79
|
+
x.report("cucumber:") { run_cucumber }
|
80
|
+
x.report("tt:") { run_tt }
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def run_cucumber
|
85
|
+
require 'cucumber'
|
86
|
+
require 'logger'
|
87
|
+
step_mother = Cucumber::StepMother.new
|
88
|
+
logger = Logger.new(STDOUT)
|
89
|
+
logger.level = Logger::INFO
|
90
|
+
step_mother.log = logger
|
91
|
+
step_mother.load_plain_text_features(@features)
|
92
|
+
end
|
93
|
+
|
94
|
+
def run_tt
|
95
|
+
require 'cucumber'
|
96
|
+
# Using Cucumber's Treetop lexer, but never calling #build to build the AST
|
97
|
+
lexer = Cucumber::Parser::NaturalLanguage.new(nil, 'en').parser
|
98
|
+
@features.each do |file|
|
99
|
+
source = IO.read(file)
|
100
|
+
parse_tree = lexer.parse(source)
|
101
|
+
if parse_tree.nil?
|
102
|
+
raise Cucumber::Parser::SyntaxError.new(lexer, file, 0)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def run_rb_gherkin
|
108
|
+
require 'gherkin'
|
109
|
+
require 'null_formatter'
|
110
|
+
parser = Gherkin::Parser::Parser.new(NullFormatter.new, true, "root", true)
|
111
|
+
@features.each do |feature|
|
112
|
+
parser.parse(File.read(feature), feature, 0)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def run_native_gherkin
|
117
|
+
require 'gherkin'
|
118
|
+
require 'null_listener'
|
119
|
+
parser = Gherkin::Parser::Parser.new(NullFormatter.new, true, "root", false)
|
120
|
+
@features.each do |feature|
|
121
|
+
parser.parse(File.read(feature), feature, 0)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def run_native_gherkin_no_parser
|
126
|
+
require 'gherkin'
|
127
|
+
require 'gherkin/lexer/i18n_lexer'
|
128
|
+
require 'null_listener'
|
129
|
+
lexer = Gherkin::Lexer::I18nLexer.new(NullListener.new, false)
|
130
|
+
@features.each do |feature|
|
131
|
+
lexer.scan(File.read(feature), feature, 0)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
desc "Generate 500 random features and benchmark Cucumber, Treetop and Gherkin with them"
|
137
|
+
task :bench => ["bench:clean", "bench:gen"] do
|
138
|
+
benchmarker = Benchmarker.new
|
139
|
+
benchmarker.report_all
|
140
|
+
end
|
141
|
+
|
142
|
+
namespace :bench do
|
143
|
+
desc "Generate [number] features with random content, or 500 features if number is not provided"
|
144
|
+
task :gen, :number do |t, args|
|
145
|
+
args.with_defaults(:number => 500)
|
146
|
+
generator = RandomFeatureGenerator.new(args.number.to_i)
|
147
|
+
generator.generate
|
148
|
+
end
|
149
|
+
|
150
|
+
desc "Benchmark Cucumber AST building from the features in tasks/bench/generated"
|
151
|
+
task :cucumber do
|
152
|
+
benchmarker = Benchmarker.new
|
153
|
+
benchmarker.report("cucumber")
|
154
|
+
end
|
155
|
+
|
156
|
+
desc "Benchmark the Treetop parser with the features in tasks/bench/generated"
|
157
|
+
task :tt do
|
158
|
+
benchmarker = Benchmarker.new
|
159
|
+
benchmarker.report("tt")
|
160
|
+
end
|
161
|
+
|
162
|
+
desc "Benchmark the Ruby Gherkin lexer+parser with the features in tasks/bench/generated"
|
163
|
+
task :rb_gherkin do
|
164
|
+
benchmarker = Benchmarker.new
|
165
|
+
benchmarker.report("rb_gherkin")
|
166
|
+
end
|
167
|
+
|
168
|
+
desc "Benchmark the ntive Gherkin lexer+parser with the features in tasks/bench/generated"
|
169
|
+
task :native_gherkin do
|
170
|
+
benchmarker = Benchmarker.new
|
171
|
+
benchmarker.report("native_gherkin")
|
172
|
+
end
|
173
|
+
|
174
|
+
desc "Benchmark the native Gherkin lexer (no parser) with the features in tasks/bench/generated"
|
175
|
+
task :native_gherkin_no_parser do
|
176
|
+
benchmarker = Benchmarker.new
|
177
|
+
benchmarker.report("native_gherkin_no_parser")
|
178
|
+
end
|
179
|
+
|
180
|
+
desc "Remove all generated features in tasks/bench/generated"
|
181
|
+
task :clean do
|
182
|
+
rm_f FileList[GENERATED_FEATURES + "/**/*feature"]
|
183
|
+
end
|
184
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
class StepsBuilder
|
2
|
+
def initialize
|
3
|
+
@steps = []
|
4
|
+
end
|
5
|
+
|
6
|
+
def step(content, generator)
|
7
|
+
@steps << " Given #{content}"
|
8
|
+
if(rand(5) == 0)
|
9
|
+
cols = rand(8) + 1
|
10
|
+
rows = rand(10)
|
11
|
+
rows.times do
|
12
|
+
row = " |"
|
13
|
+
cols.times do
|
14
|
+
row << generator.table_cell << "|"
|
15
|
+
end
|
16
|
+
@steps << row
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_s
|
22
|
+
@steps.join("\n")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class FeatureBuilder
|
27
|
+
def initialize(name, &block)
|
28
|
+
@name = name
|
29
|
+
@scenarios = {}
|
30
|
+
block.call(self)
|
31
|
+
end
|
32
|
+
|
33
|
+
def scenario(name, &block)
|
34
|
+
@scenarios[name] = StepsBuilder.new
|
35
|
+
block.call(@scenarios[name])
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_s
|
39
|
+
str = "Feature: #{@name}\n"
|
40
|
+
@scenarios.each do |scenario, steps|
|
41
|
+
str += "\n"
|
42
|
+
str += " Scenario: #{scenario}\n"
|
43
|
+
str += steps.to_s
|
44
|
+
str += "\n"
|
45
|
+
end
|
46
|
+
str
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
*.feature
|
data/tasks/compile.rake
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/ragel_task'
|
2
|
+
BYPASS_NATIVE_IMPL = true
|
3
|
+
require 'gherkin/i18n'
|
4
|
+
|
5
|
+
CLEAN.include [
|
6
|
+
'pkg', 'tmp',
|
7
|
+
'**/*.{o,bundle,jar,so,obj,pdb,lib,def,exp,log,rbc}', 'ext',
|
8
|
+
'java/target',
|
9
|
+
'ragel/i18n/*.rl',
|
10
|
+
'lib/gherkin/rb_lexer/*.rb',
|
11
|
+
'lib/*.dll',
|
12
|
+
'ext/**/*.c',
|
13
|
+
'java/src/main/java/gherkin/lexer/i18n/*.java',
|
14
|
+
'java/src/main/resources/gherkin/*.properties',
|
15
|
+
]
|
16
|
+
|
17
|
+
desc "Compile the Java extensions"
|
18
|
+
task :jar => 'lib/gherkin.jar'
|
19
|
+
|
20
|
+
file 'lib/gherkin.jar' => Dir['java/src/main/java/**/*.java'] do
|
21
|
+
sh("mvn -f java/pom.xml package")
|
22
|
+
end
|
23
|
+
|
24
|
+
rl_langs = ENV['RL_LANGS'] ? ENV['RL_LANGS'].split(',') : []
|
25
|
+
langs = Gherkin::I18n.all.select { |lang| rl_langs.empty? || rl_langs.include?(lang.iso_code) }
|
26
|
+
|
27
|
+
# http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6457127
|
28
|
+
file 'lib/gherkin.jar' => "java/src/main/resources/gherkin/I18nKeywords_in.properties"
|
29
|
+
file "java/src/main/resources/gherkin/I18nKeywords_in.properties" => "java/src/main/resources/gherkin/I18nKeywords_id.properties" do
|
30
|
+
cp "java/src/main/resources/gherkin/I18nKeywords_id.properties", "java/src/main/resources/gherkin/I18nKeywords_in.properties"
|
31
|
+
end
|
32
|
+
|
33
|
+
# http://forums.sun.com/thread.jspa?threadID=5335461
|
34
|
+
file 'lib/gherkin.jar' => "java/src/main/resources/gherkin/I18nKeywords_iw.properties"
|
35
|
+
file "java/src/main/resources/gherkin/I18nKeywords_iw.properties" => "java/src/main/resources/gherkin/I18nKeywords_he.properties" do
|
36
|
+
cp "java/src/main/resources/gherkin/I18nKeywords_he.properties", "java/src/main/resources/gherkin/I18nKeywords_iw.properties"
|
37
|
+
end
|
38
|
+
|
39
|
+
langs.each do |i18n|
|
40
|
+
java = RagelTask.new('java', i18n)
|
41
|
+
rb = RagelTask.new('rb', i18n)
|
42
|
+
|
43
|
+
lang_country = i18n.iso_code.split(/-/)
|
44
|
+
suffix = lang_country.length == 1 ? lang_country[0] : "#{lang_country[0]}_#{lang_country[1].upcase}"
|
45
|
+
java_properties = "java/src/main/resources/gherkin/I18nKeywords_#{suffix}.properties"
|
46
|
+
file java_properties => 'lib/gherkin/i18n.yml' do
|
47
|
+
File.open(java_properties, 'wb') do |io|
|
48
|
+
io.puts("# Generated file. Do not edit.")
|
49
|
+
(Gherkin::I18n::KEYWORD_KEYS + %w{name native}).each do |key|
|
50
|
+
value = Gherkin::I18n.unicode_escape(i18n.keywords(key).join("|"))
|
51
|
+
io.puts("#{key}:#{value}")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
file 'lib/gherkin.jar' => [java.target, rb.target, java_properties]
|
56
|
+
|
57
|
+
begin
|
58
|
+
if !defined?(JRUBY_VERSION)
|
59
|
+
require 'rake/extensiontask'
|
60
|
+
|
61
|
+
c = RagelTask.new('c', i18n)
|
62
|
+
|
63
|
+
extconf = "ext/gherkin_lexer_#{i18n.underscored_iso_code}/extconf.rb"
|
64
|
+
file extconf do
|
65
|
+
FileUtils.mkdir(File.dirname(extconf)) unless File.directory?(File.dirname(extconf))
|
66
|
+
File.open(extconf, "w") do |io|
|
67
|
+
io.write(<<-EOF)
|
68
|
+
require 'mkmf'
|
69
|
+
CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
|
70
|
+
$CFLAGS << ' -O0 -Wall -Werror' if CONFIG['CC'] =~ /gcc/
|
71
|
+
dir_config("gherkin_lexer_#{i18n.underscored_iso_code}")
|
72
|
+
have_library("c", "main")
|
73
|
+
create_makefile("gherkin_lexer_#{i18n.underscored_iso_code}")
|
74
|
+
EOF
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
Rake::ExtensionTask.new("gherkin_lexer_#{i18n.underscored_iso_code}") do |ext|
|
79
|
+
if ENV['RUBY_CC_VERSION']
|
80
|
+
ext.cross_compile = true
|
81
|
+
ext.cross_platform = 'x86-mingw32'
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# The way tasks are defined with compile:xxx (but without namespace) in rake-compiler forces us
|
86
|
+
# to use these hacks for setting up dependencies. Ugly!
|
87
|
+
Rake::Task["compile:gherkin_lexer_#{i18n.underscored_iso_code}"].prerequisites.unshift(extconf)
|
88
|
+
Rake::Task["compile:gherkin_lexer_#{i18n.underscored_iso_code}"].prerequisites.unshift(c.target)
|
89
|
+
Rake::Task["compile:gherkin_lexer_#{i18n.underscored_iso_code}"].prerequisites.unshift(rb.target)
|
90
|
+
|
91
|
+
Rake::Task["compile"].prerequisites.unshift(extconf)
|
92
|
+
Rake::Task["compile"].prerequisites.unshift(c.target)
|
93
|
+
Rake::Task["compile"].prerequisites.unshift(rb.target)
|
94
|
+
end
|
95
|
+
rescue LoadError
|
96
|
+
unless defined?($c_warned)
|
97
|
+
warn "WARNING: Rake::ExtensionTask not installed. Skipping C compilation."
|
98
|
+
$c_warned = true
|
99
|
+
task :compile # no-op
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
data/tasks/cucumber.rake
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'cucumber/rake/task'
|
2
|
+
|
3
|
+
Cucumber::Rake::Task.new(:cucumber) do |t|
|
4
|
+
t.cucumber_opts = "--profile default"
|
5
|
+
end
|
6
|
+
|
7
|
+
namespace :cucumber do
|
8
|
+
Cucumber::Rake::Task.new(:rcov, "Run Cucumber using RCov") do |t|
|
9
|
+
t.cucumber_opts = "--profile default"
|
10
|
+
t.rcov = true
|
11
|
+
t.rcov_opts = %w{--exclude spec\/}
|
12
|
+
end
|
13
|
+
|
14
|
+
Cucumber::Rake::Task.new(:native_lexer, "Run Native lexer Cucumber features") do |t|
|
15
|
+
t.cucumber_opts = "--profile native_lexer"
|
16
|
+
end
|
17
|
+
task :native_lexer => [:clean, :compile]
|
18
|
+
end
|
data/tasks/gems.rake
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
namespace :gems do
|
2
|
+
task :win do
|
3
|
+
unless File.directory?(File.expand_path('~/.rake-compiler'))
|
4
|
+
STDERR.puts <<-EOM
|
5
|
+
|
6
|
+
You must install Windows rubies to ~/.rake-compiler with:
|
7
|
+
|
8
|
+
rake-compiler cross-ruby VERSION=1.8.6-p287
|
9
|
+
# (Later 1.9.1 patch levels don't compile on mingw)
|
10
|
+
rake-compiler cross-ruby VERSION=1.9.1-p243
|
11
|
+
EOM
|
12
|
+
exit(1)
|
13
|
+
end
|
14
|
+
# rvm and mingw ruby versions have to match to avoid errors
|
15
|
+
sh "rvm 1.8.6@cucumber rake cross compile RUBY_CC_VERSION=1.8.6"
|
16
|
+
sh "rvm 1.9.1@cucumber rake cross compile RUBY_CC_VERSION=1.9.1"
|
17
|
+
# This will copy the .so files to the proper place
|
18
|
+
sh "rake cross compile RUBY_CC_VERSION=1.8.6:1.9.1"
|
19
|
+
end
|
20
|
+
|
21
|
+
desc 'Prepare JRuby binares'
|
22
|
+
task :jruby => [:jar] do
|
23
|
+
sh "rvm jruby@cucumber -S rspec spec"
|
24
|
+
end
|
25
|
+
|
26
|
+
desc 'Prepare IronRuby binaries'
|
27
|
+
task :ironruby => [:jruby, 'ikvm:dll', 'ikvm:copy_ikvm_dlls']
|
28
|
+
|
29
|
+
task :sanity do
|
30
|
+
raise "The jruby gem looks too small" if File.stat("release/gherkin-#{Gherkin::VERSION}-java.gem").size < 1000000
|
31
|
+
end
|
32
|
+
|
33
|
+
desc "Prepare binaries for all gems"
|
34
|
+
task :prepare => [
|
35
|
+
:clean,
|
36
|
+
:spec,
|
37
|
+
:win,
|
38
|
+
:jruby,
|
39
|
+
:ironruby
|
40
|
+
]
|
41
|
+
|
42
|
+
end
|