bryanl-gherkin 2.11.1.1
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/.mailmap +2 -0
- data/.rbenv-gemsets +1 -0
- data/.rspec +1 -0
- data/.rvmrc +1 -0
- data/.travis.yml +16 -0
- data/.yardopts +5 -0
- data/Gemfile +5 -0
- data/History.md +788 -0
- data/LICENSE +20 -0
- data/README.md +272 -0
- data/Rakefile +26 -0
- data/build_native_gems.sh +7 -0
- data/cucumber.yml +4 -0
- data/examples/parse_and_output_json.rb +19 -0
- data/features/.cucumber/stepdefs.json +244 -0
- data/features/escaped_pipes.feature +8 -0
- data/features/feature_parser.feature +237 -0
- data/features/json_formatter.feature +498 -0
- data/features/json_parser.feature +331 -0
- data/features/native_lexer.feature +19 -0
- data/features/parser_with_native_lexer.feature +205 -0
- data/features/pretty_formatter.feature +16 -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 +30 -0
- data/features/step_definitions/json_parser_steps.rb +20 -0
- data/features/step_definitions/pretty_formatter_steps.rb +85 -0
- data/features/steps_parser.feature +46 -0
- data/features/support/env.rb +42 -0
- data/gherkin.gemspec +77 -0
- data/install_mingw_os_x.sh +7 -0
- data/js/.npmignore +1 -0
- data/js/lib/gherkin/lexer/.npmignore +0 -0
- data/lib/gherkin.rb +2 -0
- data/lib/gherkin/c_lexer.rb +17 -0
- data/lib/gherkin/formatter/ansi_escapes.rb +97 -0
- data/lib/gherkin/formatter/argument.rb +16 -0
- data/lib/gherkin/formatter/escaping.rb +15 -0
- data/lib/gherkin/formatter/filter_formatter.rb +146 -0
- data/lib/gherkin/formatter/hashable.rb +19 -0
- data/lib/gherkin/formatter/json_formatter.rb +122 -0
- data/lib/gherkin/formatter/line_filter.rb +26 -0
- data/lib/gherkin/formatter/model.rb +281 -0
- data/lib/gherkin/formatter/pretty_formatter.rb +244 -0
- data/lib/gherkin/formatter/regexp_filter.rb +21 -0
- data/lib/gherkin/formatter/step_printer.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 +613 -0
- data/lib/gherkin/js_lexer.rb +20 -0
- data/lib/gherkin/json_parser.rb +177 -0
- data/lib/gherkin/lexer/i18n_lexer.rb +46 -0
- data/lib/gherkin/listener/event.rb +45 -0
- data/lib/gherkin/listener/formatter_listener.rb +143 -0
- data/lib/gherkin/native.rb +7 -0
- data/lib/gherkin/native/java.rb +72 -0
- data/lib/gherkin/native/null.rb +5 -0
- data/lib/gherkin/native/therubyracer.rb +39 -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/README.rdoc +8 -0
- data/lib/gherkin/rb_lexer/ar.rb +1165 -0
- data/lib/gherkin/rb_lexer/bg.rb +1377 -0
- data/lib/gherkin/rb_lexer/bm.rb +1081 -0
- data/lib/gherkin/rb_lexer/ca.rb +1305 -0
- data/lib/gherkin/rb_lexer/cs.rb +1157 -0
- data/lib/gherkin/rb_lexer/cy_gb.rb +1027 -0
- data/lib/gherkin/rb_lexer/da.rb +1043 -0
- data/lib/gherkin/rb_lexer/de.rb +1151 -0
- data/lib/gherkin/rb_lexer/en.rb +1151 -0
- data/lib/gherkin/rb_lexer/en_au.rb +971 -0
- data/lib/gherkin/rb_lexer/en_lol.rb +929 -0
- data/lib/gherkin/rb_lexer/en_pirate.rb +1205 -0
- data/lib/gherkin/rb_lexer/en_scouse.rb +1357 -0
- data/lib/gherkin/rb_lexer/en_tx.rb +1011 -0
- data/lib/gherkin/rb_lexer/eo.rb +990 -0
- data/lib/gherkin/rb_lexer/es.rb +1135 -0
- data/lib/gherkin/rb_lexer/et.rb +985 -0
- data/lib/gherkin/rb_lexer/fi.rb +964 -0
- data/lib/gherkin/rb_lexer/fr.rb +1223 -0
- data/lib/gherkin/rb_lexer/he.rb +1113 -0
- data/lib/gherkin/rb_lexer/hr.rb +1061 -0
- data/lib/gherkin/rb_lexer/hu.rb +1113 -0
- data/lib/gherkin/rb_lexer/id.rb +958 -0
- data/lib/gherkin/rb_lexer/is.rb +1115 -0
- data/lib/gherkin/rb_lexer/it.rb +1081 -0
- data/lib/gherkin/rb_lexer/ja.rb +1413 -0
- data/lib/gherkin/rb_lexer/ko.rb +1097 -0
- data/lib/gherkin/rb_lexer/lt.rb +1040 -0
- data/lib/gherkin/rb_lexer/lu.rb +1127 -0
- data/lib/gherkin/rb_lexer/lv.rb +1161 -0
- data/lib/gherkin/rb_lexer/nl.rb +1110 -0
- data/lib/gherkin/rb_lexer/no.rb +1055 -0
- data/lib/gherkin/rb_lexer/pl.rb +1452 -0
- data/lib/gherkin/rb_lexer/pt.rb +1425 -0
- data/lib/gherkin/rb_lexer/ro.rb +1159 -0
- data/lib/gherkin/rb_lexer/ru.rb +1749 -0
- data/lib/gherkin/rb_lexer/sk.rb +1041 -0
- data/lib/gherkin/rb_lexer/sr_cyrl.rb +1798 -0
- data/lib/gherkin/rb_lexer/sr_latn.rb +1289 -0
- data/lib/gherkin/rb_lexer/sv.rb +1065 -0
- data/lib/gherkin/rb_lexer/tr.rb +1087 -0
- data/lib/gherkin/rb_lexer/uk.rb +1641 -0
- data/lib/gherkin/rb_lexer/uz.rb +1371 -0
- data/lib/gherkin/rb_lexer/vi.rb +1193 -0
- data/lib/gherkin/rb_lexer/zh_cn.rb +1053 -0
- data/lib/gherkin/rb_lexer/zh_tw.rb +1047 -0
- data/lib/gherkin/rubify.rb +24 -0
- data/lib/gherkin/tag_expression.rb +62 -0
- data/ragel/lexer.c.rl.erb +454 -0
- data/ragel/lexer.java.rl.erb +219 -0
- data/ragel/lexer.js.rl.erb +227 -0
- data/ragel/lexer.rb.rl.erb +174 -0
- data/ragel/lexer_common.rl.erb +50 -0
- data/spec/gherkin/c_lexer_spec.rb +22 -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 +139 -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/examples_with_only_header.feature +14 -0
- data/spec/gherkin/fixtures/hantu_pisang.feature +35 -0
- data/spec/gherkin/fixtures/i18n_fr.feature +14 -0
- data/spec/gherkin/fixtures/i18n_fr2.feature +8 -0
- data/spec/gherkin/fixtures/i18n_no.feature +7 -0
- data/spec/gherkin/fixtures/i18n_pt1.feature +44 -0
- data/spec/gherkin/fixtures/i18n_pt2.feature +4 -0
- data/spec/gherkin/fixtures/i18n_pt3.feature +4 -0
- data/spec/gherkin/fixtures/i18n_pt4.feature +4 -0
- data/spec/gherkin/fixtures/i18n_zh-CN.feature +9 -0
- data/spec/gherkin/fixtures/issue_145.feature +22 -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/ansi_escapes_spec.rb +32 -0
- data/spec/gherkin/formatter/filter_formatter_spec.rb +204 -0
- data/spec/gherkin/formatter/json_formatter_spec.rb +92 -0
- data/spec/gherkin/formatter/model_spec.rb +28 -0
- data/spec/gherkin/formatter/pretty_formatter_spec.rb +177 -0
- data/spec/gherkin/formatter/spaces.feature +9 -0
- data/spec/gherkin/formatter/step_printer_spec.rb +55 -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 +241 -0
- data/spec/gherkin/java_lexer_spec.rb +20 -0
- data/spec/gherkin/js_lexer_spec.rb +23 -0
- data/spec/gherkin/json_parser_spec.rb +176 -0
- data/spec/gherkin/lexer/i18n_lexer_spec.rb +43 -0
- data/spec/gherkin/output_stream_string_io.rb +20 -0
- data/spec/gherkin/parser/parser_spec.rb +16 -0
- data/spec/gherkin/rb_lexer_spec.rb +20 -0
- data/spec/gherkin/sexp_recorder.rb +59 -0
- data/spec/gherkin/shared/bom_group.rb +20 -0
- data/spec/gherkin/shared/doc_string_group.rb +163 -0
- data/spec/gherkin/shared/lexer_group.rb +591 -0
- data/spec/gherkin/shared/row_group.rb +125 -0
- data/spec/gherkin/shared/tags_group.rb +54 -0
- data/spec/gherkin/tag_expression_spec.rb +142 -0
- data/spec/spec_helper.rb +75 -0
- data/tasks/bench.rake +184 -0
- data/tasks/bench/feature_builder.rb +49 -0
- data/tasks/bench/null_listener.rb +4 -0
- data/tasks/compile.rake +120 -0
- data/tasks/cucumber.rake +22 -0
- data/tasks/gems.rake +31 -0
- data/tasks/ikvm.rake +124 -0
- data/tasks/ragel_task.rb +100 -0
- data/tasks/release.rake +49 -0
- data/tasks/rspec.rake +8 -0
- data/tasks/yard.rake +7 -0
- data/tasks/yard/default/layout/html/bubble_32x32.png +0 -0
- data/tasks/yard/default/layout/html/bubble_48x48.png +0 -0
- data/tasks/yard/default/layout/html/footer.erb +5 -0
- data/tasks/yard/default/layout/html/index.erb +1 -0
- data/tasks/yard/default/layout/html/layout.erb +25 -0
- data/tasks/yard/default/layout/html/logo.erb +1 -0
- data/tasks/yard/default/layout/html/setup.rb +4 -0
- metadata +473 -0
@@ -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
|
+
|
data/tasks/compile.rake
ADDED
@@ -0,0 +1,120 @@
|
|
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
|
+
'js/lib/gherkin/lexer/*.js',
|
16
|
+
'doc'
|
17
|
+
]
|
18
|
+
|
19
|
+
desc "Compile the Java extensions"
|
20
|
+
task :jar => 'lib/gherkin.jar'
|
21
|
+
|
22
|
+
file 'lib/gherkin.jar' => Dir['java/src/main/java/**/*.java'] do
|
23
|
+
sh("mvn -f java/pom.xml package")
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "Build Javascript lexers"
|
27
|
+
task :js
|
28
|
+
|
29
|
+
rl_langs = ENV['RL_LANGS'] ? ENV['RL_LANGS'].split(',') : []
|
30
|
+
langs = Gherkin::I18n.all.select { |lang| rl_langs.empty? || rl_langs.include?(lang.iso_code) }
|
31
|
+
|
32
|
+
# http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6457127
|
33
|
+
file 'lib/gherkin.jar' => "java/src/main/resources/gherkin/I18nKeywords_in.properties"
|
34
|
+
file "java/src/main/resources/gherkin/I18nKeywords_in.properties" => "java/src/main/resources/gherkin/I18nKeywords_id.properties" do
|
35
|
+
cp "java/src/main/resources/gherkin/I18nKeywords_id.properties", "java/src/main/resources/gherkin/I18nKeywords_in.properties"
|
36
|
+
end
|
37
|
+
|
38
|
+
# http://forums.sun.com/thread.jspa?threadID=5335461
|
39
|
+
file 'lib/gherkin.jar' => "java/src/main/resources/gherkin/I18nKeywords_iw.properties"
|
40
|
+
file "java/src/main/resources/gherkin/I18nKeywords_iw.properties" => "java/src/main/resources/gherkin/I18nKeywords_he.properties" do
|
41
|
+
cp "java/src/main/resources/gherkin/I18nKeywords_he.properties", "java/src/main/resources/gherkin/I18nKeywords_iw.properties"
|
42
|
+
end
|
43
|
+
|
44
|
+
java_i18n_properties = "java/src/main/resources/gherkin/I18n.properties"
|
45
|
+
file java_i18n_properties => 'lib/gherkin/i18n.yml' do
|
46
|
+
File.open(java_i18n_properties, 'wb') do |io|
|
47
|
+
io.puts("# Generated file. Do not edit.")
|
48
|
+
io.puts("i18n.isoCodes=#{langs.map{|i18n| i18n.iso_code}.join(',')}")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
langs.each do |i18n|
|
53
|
+
java = RagelTask.new('java', i18n)
|
54
|
+
rb = RagelTask.new('rb', i18n)
|
55
|
+
js = RagelTask.new('js', i18n)
|
56
|
+
|
57
|
+
lang_country = i18n.iso_code.split(/-/)
|
58
|
+
suffix = lang_country.length == 1 ? lang_country[0] : "#{lang_country[0]}_#{lang_country[1].upcase}"
|
59
|
+
java_properties = "java/src/main/resources/gherkin/I18nKeywords_#{suffix}.properties"
|
60
|
+
file java_properties => 'lib/gherkin/i18n.yml' do
|
61
|
+
File.open(java_properties, 'wb') do |io|
|
62
|
+
io.puts("# Generated file. Do not edit.")
|
63
|
+
(Gherkin::I18n::KEYWORD_KEYS + %w{name native}).each do |key|
|
64
|
+
value = Gherkin::I18n.unicode_escape(i18n.keywords(key).join("|"))
|
65
|
+
io.puts("#{key}:#{value}")
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
file 'lib/gherkin.jar' => [java.target, rb.target, java_properties, java_i18n_properties]
|
70
|
+
|
71
|
+
begin
|
72
|
+
if !defined?(JRUBY_VERSION)
|
73
|
+
require 'rake/extensiontask'
|
74
|
+
|
75
|
+
c = RagelTask.new('c', i18n)
|
76
|
+
|
77
|
+
extconf = "ext/gherkin_lexer_#{i18n.underscored_iso_code}/extconf.rb"
|
78
|
+
file extconf do
|
79
|
+
FileUtils.mkdir(File.dirname(extconf)) unless File.directory?(File.dirname(extconf))
|
80
|
+
File.open(extconf, "w") do |io|
|
81
|
+
io.write(<<-EOF)
|
82
|
+
require 'mkmf'
|
83
|
+
CONFIG['warnflags'].gsub!(/-Wshorten-64-to-32/, '') if CONFIG['warnflags']
|
84
|
+
$CFLAGS << ' -O0 -Wall' if CONFIG['CC'] =~ /gcc|clang/
|
85
|
+
dir_config("gherkin_lexer_#{i18n.underscored_iso_code}")
|
86
|
+
have_library("c", "main")
|
87
|
+
create_makefile("gherkin_lexer_#{i18n.underscored_iso_code}")
|
88
|
+
EOF
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
Rake::ExtensionTask.new("gherkin_lexer_#{i18n.underscored_iso_code}") do |ext|
|
93
|
+
if ENV['RUBY_CC_VERSION']
|
94
|
+
ext.cross_compile = true
|
95
|
+
ext.cross_platform = 'x86-mingw32'
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
# The way tasks are defined with compile:xxx (but without namespace) in rake-compiler forces us
|
100
|
+
# to use these hacks for setting up dependencies. Ugly!
|
101
|
+
Rake::Task["compile:gherkin_lexer_#{i18n.underscored_iso_code}"].prerequisites.unshift(extconf)
|
102
|
+
Rake::Task["compile:gherkin_lexer_#{i18n.underscored_iso_code}"].prerequisites.unshift(c.target)
|
103
|
+
Rake::Task["compile:gherkin_lexer_#{i18n.underscored_iso_code}"].prerequisites.unshift(rb.target)
|
104
|
+
Rake::Task["compile:gherkin_lexer_#{i18n.underscored_iso_code}"].prerequisites.unshift(js.target) if ENV['GHERKIN_JS']
|
105
|
+
|
106
|
+
Rake::Task["compile"].prerequisites.unshift(extconf)
|
107
|
+
Rake::Task["compile"].prerequisites.unshift(c.target)
|
108
|
+
Rake::Task["compile"].prerequisites.unshift(rb.target)
|
109
|
+
Rake::Task["compile"].prerequisites.unshift(js.target) if ENV['GHERKIN_JS']
|
110
|
+
|
111
|
+
Rake::Task["js"].prerequisites.unshift(js.target) if ENV['GHERKIN_JS']
|
112
|
+
end
|
113
|
+
rescue LoadError
|
114
|
+
unless defined?($c_warned)
|
115
|
+
warn "WARNING: Rake::ExtensionTask not installed. Skipping C compilation."
|
116
|
+
$c_warned = true
|
117
|
+
task :compile # no-op
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
data/tasks/cucumber.rake
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
unless ENV['RUBY_CC_VERSION']
|
3
|
+
require 'cucumber/rake/task'
|
4
|
+
|
5
|
+
Cucumber::Rake::Task.new(:cucumber) do |t|
|
6
|
+
profile = ENV['TRAVIS'] ? 'travis' : 'default'
|
7
|
+
t.cucumber_opts = "--profile #{profile}"
|
8
|
+
end
|
9
|
+
|
10
|
+
namespace :cucumber do
|
11
|
+
Cucumber::Rake::Task.new(:rcov, "Run Cucumber using RCov") do |t|
|
12
|
+
t.cucumber_opts = "--profile default"
|
13
|
+
t.rcov = RUBY_VERSION =~ /^1\.8/
|
14
|
+
t.rcov_opts = %w{--exclude spec\/}
|
15
|
+
end
|
16
|
+
|
17
|
+
Cucumber::Rake::Task.new(:native_lexer, "Run Native lexer Cucumber features") do |t|
|
18
|
+
t.cucumber_opts = "--profile native_lexer"
|
19
|
+
end
|
20
|
+
task :native_lexer => [:clean, :compile]
|
21
|
+
end
|
22
|
+
end
|
data/tasks/gems.rake
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
namespace :gems do
|
2
|
+
task :win do
|
3
|
+
unless File.directory?(File.expand_path('~/.rake-compiler'))
|
4
|
+
STDERR.puts "[ERROR] You must install MinGW rubies to build gherkin gems for Windows. See README.rdoc"
|
5
|
+
exit(1)
|
6
|
+
end
|
7
|
+
# rvm and mingw ruby versions have to match to avoid errors
|
8
|
+
sh "rvm 1.8.7-p352@cucumber do rake cross compile RUBY_CC_VERSION=1.8.7"
|
9
|
+
sh "bundle exec rake cross compile RUBY_CC_VERSION=1.9.3"
|
10
|
+
# This will copy the .so files to the proper place
|
11
|
+
sh "bundle exec rake -t cross compile RUBY_CC_VERSION=1.8.7:1.9.3"
|
12
|
+
end
|
13
|
+
|
14
|
+
desc 'Prepare JRuby binares'
|
15
|
+
task :jruby => [:jar] do
|
16
|
+
sh "rvm jruby@cucumber exec rspec spec"
|
17
|
+
end
|
18
|
+
|
19
|
+
task :sanity do
|
20
|
+
raise "The jruby gem looks too small" if File.stat("release/gherkin-#{GHERKIN_VERSION}-java.gem").size < 1000000
|
21
|
+
end
|
22
|
+
|
23
|
+
desc "Prepare binaries for all gems"
|
24
|
+
task :prepare => [
|
25
|
+
:clean,
|
26
|
+
:spec,
|
27
|
+
:win,
|
28
|
+
:jruby
|
29
|
+
]
|
30
|
+
|
31
|
+
end
|
data/tasks/ikvm.rake
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
namespace :ikvm do
|
4
|
+
IKVM_VERSION = '0.46.0.1'
|
5
|
+
IKVM_DIR = "ikvm/ikvm-#{IKVM_VERSION}"
|
6
|
+
IKVM_ZIP = "ikvm/ikvmbin-#{IKVM_VERSION}.zip"
|
7
|
+
CLOBBER.include(IKVM_DIR, IKVM_ZIP)
|
8
|
+
IKVM_BIN_DIR = "#{IKVM_DIR}/bin"
|
9
|
+
IKVMC_EXE = "#{IKVM_BIN_DIR}/ikvmc.exe"
|
10
|
+
GHERKIN_EXE = "release/gherkin.exe"
|
11
|
+
GHERKIN_PKG_DLL = "release/nuspec/lib/gherkin.dll"
|
12
|
+
GHERKIN_NUSPEC = "release/nuspec/gherkin.nuspec"
|
13
|
+
GHERKIN_NUPKG = "release/gherkin.#{GHERKIN_VERSION}.nupkg"
|
14
|
+
GHERKIN_LIB_DLL = 'lib/gherkin.dll'
|
15
|
+
|
16
|
+
def mono(args)
|
17
|
+
if(`which mono`.strip =~ /mono/)
|
18
|
+
# http://monomvc.wordpress.com/2012/03/06/nuget-on-mono/
|
19
|
+
sh("mono --runtime=v4.0.30319 #{args}")
|
20
|
+
else
|
21
|
+
raise "[ERROR] You must install Mono and IKVM build gherkin for .NET. See README.md"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def ikvmc(args)
|
26
|
+
begin
|
27
|
+
mono("#{IKVMC_EXE} #{args}")
|
28
|
+
rescue => e
|
29
|
+
if e.message =~ /Cannot open assembly/
|
30
|
+
e.message << "\n\n[ERROR] You must install Mono and IKVM build gherkin for .NET. See README.md"
|
31
|
+
end
|
32
|
+
raise e
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def nuget(args)
|
37
|
+
mono("/usr/local/nuget/NuGet.exe #{args}")
|
38
|
+
end
|
39
|
+
|
40
|
+
file GHERKIN_EXE => [IKVMC_EXE, 'lib/gherkin.jar'] do
|
41
|
+
ikvmc("-target:exe lib/gherkin.jar -out:#{GHERKIN_EXE}")
|
42
|
+
end
|
43
|
+
|
44
|
+
file GHERKIN_PKG_DLL => [IKVMC_EXE, 'lib/gherkin.jar'] do
|
45
|
+
mkdir_p File.dirname(GHERKIN_PKG_DLL) unless File.directory?(File.dirname(GHERKIN_PKG_DLL))
|
46
|
+
ikvmc("-target:library lib/gherkin.jar -out:#{GHERKIN_PKG_DLL} -version:#{GHERKIN_VERSION}")
|
47
|
+
end
|
48
|
+
|
49
|
+
file GHERKIN_LIB_DLL => GHERKIN_PKG_DLL do
|
50
|
+
cp GHERKIN_PKG_DLL, GHERKIN_LIB_DLL
|
51
|
+
end
|
52
|
+
|
53
|
+
file GHERKIN_NUPKG => [GHERKIN_PKG_DLL, GHERKIN_NUSPEC] do
|
54
|
+
pkg_dir = File.dirname(GHERKIN_EXE)
|
55
|
+
mkdir_p File.dirname(pkg_dir) unless File.directory?(pkg_dir)
|
56
|
+
nuget("Pack #{GHERKIN_NUSPEC} -Version #{GHERKIN_VERSION} -OutputDirectory #{pkg_dir}")
|
57
|
+
# Now, fix the path inside the file - see https://github.com/cucumber/gherkin/issues/148
|
58
|
+
require 'zip/zipfilesystem'
|
59
|
+
Zip::ZipFile.open(GHERKIN_NUPKG) do |zipfile|
|
60
|
+
begin
|
61
|
+
zipfile.file.rename 'lib%2Fgherkin.dll', 'lib/gherkin.dll'
|
62
|
+
rescue => looks_like_nuget_has_been_fixed
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
file GHERKIN_NUSPEC do
|
68
|
+
mkdir_p File.dirname(GHERKIN_NUSPEC) unless File.directory?(File.dirname(GHERKIN_NUSPEC))
|
69
|
+
File.open(GHERKIN_NUSPEC, "w") do |io|
|
70
|
+
io.write(<<-EOF)
|
71
|
+
<?xml version="1.0"?>
|
72
|
+
<package>
|
73
|
+
<metadata>
|
74
|
+
<id>gherkin</id>
|
75
|
+
<version>#{GHERKIN_VERSION}</version>
|
76
|
+
<authors>aslakhellesoy</authors>
|
77
|
+
<owners>Mike Sassak, Gregory Hnatiuk, Aslak Hellesøy</owners>
|
78
|
+
<projectUrl>https://github.com/cucumber/gherkin</projectUrl>
|
79
|
+
<licenseUrl>https://github.com/cucumber/gherkin/blob/master/LICENSE</licenseUrl>
|
80
|
+
<iconUrl>https://github.com/cucumber/cukes.info/raw/master/templates/images/gherkin/gherkin_128x128.png</iconUrl>
|
81
|
+
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
82
|
+
<description>A fast lexer and parser for the Gherkin language based on Ragel</description>
|
83
|
+
<copyright>Copyright (c) 2009-2011 Mike Sassak, Gregory Hnatiuk, Aslak Hellesøy</copyright>
|
84
|
+
<dependencies>
|
85
|
+
<dependency id="IKVM" version="#{IKVM_VERSION}" />
|
86
|
+
</dependencies>
|
87
|
+
<tags>gherkin cucumber specflow bdd lexer parser</tags>
|
88
|
+
</metadata>
|
89
|
+
</package>
|
90
|
+
EOF
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
task :nupkg => GHERKIN_NUPKG
|
95
|
+
|
96
|
+
task :check => [GHERKIN_EXE, :copy_ikvm_dlls] do
|
97
|
+
puts "************** Pretty printing some features with .NET. **************"
|
98
|
+
mono "#{GHERKIN_EXE} features"
|
99
|
+
puts "************** DONE Pretty printing some features with .NET. All OK. **************"
|
100
|
+
end
|
101
|
+
|
102
|
+
task :copy_ikvm_dlls => IKVMC_EXE do
|
103
|
+
exe_dir = File.dirname(GHERKIN_EXE)
|
104
|
+
mkdir_p File.dirname(exe_dir) unless File.directory?(exe_dir)
|
105
|
+
Dir["#{IKVM_BIN_DIR}/*.dll"].each do |dll|
|
106
|
+
cp dll, exe_dir
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
task :push => GHERKIN_NUPKG do
|
111
|
+
nuget("Push #{GHERKIN_NUPKG}")
|
112
|
+
nuget("Publish gherkin #{GHERKIN_VERSION}")
|
113
|
+
end
|
114
|
+
|
115
|
+
file IKVMC_EXE do
|
116
|
+
sh("wget http://downloads.sourceforge.net/project/ikvm/ikvm/#{IKVM_VERSION}/ikvmbin-#{IKVM_VERSION}.zip -O #{IKVM_ZIP}")
|
117
|
+
Dir.chdir('ikvm') do
|
118
|
+
sh("unzip ikvmbin-#{IKVM_VERSION}.zip")
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
task :ikvm => ['ikvm:check']
|
124
|
+
|
data/tasks/ragel_task.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'erb'
|
3
|
+
require 'rbconfig'
|
4
|
+
|
5
|
+
class RagelTask
|
6
|
+
begin
|
7
|
+
# Support Rake >= 0.9.0
|
8
|
+
require 'rake/dsl_definition'
|
9
|
+
include Rake::DSL
|
10
|
+
rescue LoadError
|
11
|
+
end
|
12
|
+
|
13
|
+
RL_OUTPUT_DIR = File.dirname(__FILE__) + "/../ragel/i18n"
|
14
|
+
UGLIFYJS = File.dirname(__FILE__) + "/../js/node_modules/uglify-js/bin/uglifyjs"
|
15
|
+
|
16
|
+
def initialize(lang, i18n)
|
17
|
+
@lang = lang
|
18
|
+
@i18n = i18n
|
19
|
+
define_tasks
|
20
|
+
end
|
21
|
+
|
22
|
+
def define_tasks
|
23
|
+
deps = [lang_ragel, common_ragel]
|
24
|
+
deps.unshift(UGLIFYJS) if(@lang == 'js')
|
25
|
+
|
26
|
+
file target => deps do
|
27
|
+
mkdir_p(File.dirname(target)) unless File.directory?(File.dirname(target))
|
28
|
+
sh "ragel #{flags} #{lang_ragel} -o #{target}"
|
29
|
+
if(@lang == 'js')
|
30
|
+
# Ragel chokes if we put the escaped triple quotes in .rl, so we'll do the replace with sed after the fact. Lots of backslashes!!
|
31
|
+
sed = Config::CONFIG['host_os'] =~ /linux/i ? "sed -i" : "sed -i ''"
|
32
|
+
sh %{#{sed} 's/ESCAPED_TRIPLE_QUOTE/\\\\\\\\\\\\"\\\\\\\\\\\\"\\\\\\\\\\\\"/' #{target}}
|
33
|
+
|
34
|
+
# Minify
|
35
|
+
sh %{node #{UGLIFYJS} #{target} > #{target.gsub(/\.js$/, '.min.js')}}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
file UGLIFYJS do
|
40
|
+
unless File.exist?(UGLIFYJS)
|
41
|
+
Dir.chdir('js') do
|
42
|
+
sh "npm install"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
file lang_ragel => lang_erb do
|
48
|
+
write(ERB.new(IO.read(lang_erb)).result(binding), lang_ragel)
|
49
|
+
end
|
50
|
+
|
51
|
+
file common_ragel => common_erb do
|
52
|
+
write(ERB.new(IO.read(common_erb)).result(binding), common_ragel)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def target
|
57
|
+
{
|
58
|
+
'c' => "ext/gherkin_lexer_#{@i18n.underscored_iso_code}/gherkin_lexer_#{@i18n.underscored_iso_code}.c",
|
59
|
+
'java' => "java/src/main/java/gherkin/lexer/i18n/#{@i18n.underscored_iso_code.upcase}.java",
|
60
|
+
'rb' => "lib/gherkin/rb_lexer/#{@i18n.underscored_iso_code}.rb",
|
61
|
+
'js' => "js/lib/gherkin/lexer/#{@i18n.underscored_iso_code}.js"
|
62
|
+
}[@lang]
|
63
|
+
end
|
64
|
+
|
65
|
+
def common_ragel
|
66
|
+
RL_OUTPUT_DIR + "/lexer_common.#{@i18n.underscored_iso_code}.rl"
|
67
|
+
end
|
68
|
+
|
69
|
+
def common_erb
|
70
|
+
File.dirname(__FILE__) + '/../ragel/lexer_common.rl.erb'
|
71
|
+
end
|
72
|
+
|
73
|
+
def lang_ragel
|
74
|
+
RL_OUTPUT_DIR + "/#{@i18n.underscored_iso_code}.#{@lang}.rl"
|
75
|
+
end
|
76
|
+
|
77
|
+
def lang_erb
|
78
|
+
File.dirname(__FILE__) + "/../ragel/lexer.#{@lang}.rl.erb"
|
79
|
+
end
|
80
|
+
|
81
|
+
def flags
|
82
|
+
{
|
83
|
+
'c' => '-C',
|
84
|
+
'java' => '-J',
|
85
|
+
'rb' => '-R',
|
86
|
+
'js' => '-E'
|
87
|
+
}[@lang]
|
88
|
+
end
|
89
|
+
|
90
|
+
def write(content, filename)
|
91
|
+
mkdir_p(File.dirname(filename)) unless File.directory?(File.dirname(filename))
|
92
|
+
File.open(filename, "wb") do |file|
|
93
|
+
file.write(content)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def ragel_list(keywords)
|
98
|
+
"(#{keywords.map{|keyword| %{"#{keyword}"}}.join(' | ')})"
|
99
|
+
end
|
100
|
+
end
|