bryanl-gherkin 2.11.1.1-java
Sign up to get free protection for your applications and to get access to all the features.
- 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/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/java.rb +72 -0
- data/lib/gherkin/native/null.rb +5 -0
- data/lib/gherkin/native/therubyracer.rb +39 -0
- data/lib/gherkin/native.rb +7 -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/README.rdoc +8 -0
- data/lib/gherkin/rb_lexer.rb +8 -0
- data/lib/gherkin/rubify.rb +24 -0
- data/lib/gherkin/tag_expression.rb +62 -0
- data/lib/gherkin.jar +0 -0
- data/lib/gherkin.rb +2 -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/feature_builder.rb +49 -0
- data/tasks/bench/null_listener.rb +4 -0
- data/tasks/bench.rake +184 -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/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
- data/tasks/yard.rake +7 -0
- metadata +412 -0
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
|
data/tasks/release.rake
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
namespace :release do
|
2
|
+
desc 'Upload all packages and tag git'
|
3
|
+
task :ALL => ['gems:sanity', 'ikvm:check', :mvn_deploy_jar, :mvn_deploy_site, :push_native_gems, :push_npm_package, 'ikvm:push', :release, :push_yard, :symlink_docs, :post_release]
|
4
|
+
|
5
|
+
desc 'Push all gems to rubygems.org'
|
6
|
+
task :push_native_gems do
|
7
|
+
Dir.chdir('release') do
|
8
|
+
Dir['*.gem'].each do |gem_file|
|
9
|
+
sh("gem push #{gem_file}")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
task :post_release => :ikvm do
|
15
|
+
puts "\n\n****** Manually close and release at https://oss.sonatype.org/index.html#stagingRepositories ******\n\n"
|
16
|
+
end
|
17
|
+
|
18
|
+
desc 'Push jar to central Maven repo'
|
19
|
+
task :mvn_deploy_jar do
|
20
|
+
Dir.chdir('java') do
|
21
|
+
sh("mvn clean source:jar javadoc:jar deploy")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
desc 'Push javadocs to cukes.info'
|
26
|
+
task :mvn_deploy_site do
|
27
|
+
Dir.chdir('java') do
|
28
|
+
sh("mvn site:site site:deploy")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
desc 'Push npm package to http://npmjs.org/'
|
33
|
+
task :push_npm_package do
|
34
|
+
Dir.chdir('js') do
|
35
|
+
sh("npm publish")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
desc 'Push yardoc to http://cukes.info/gherkin/api/#{GHERKIN_VERSION}'
|
40
|
+
task :push_yard => :yard do
|
41
|
+
sh("tar czf release/api-#{GHERKIN_VERSION}.tgz -C doc .")
|
42
|
+
sh("scp release/api-#{GHERKIN_VERSION}.tgz cukes.info:/var/www/gherkin/api/ruby")
|
43
|
+
end
|
44
|
+
|
45
|
+
task :symlink_docs do
|
46
|
+
sh("ssh cukes.info 'cd /var/www/gherkin/api/ruby && mkdir #{GHERKIN_VERSION} && tar xzf api-#{GHERKIN_VERSION}.tgz -C #{GHERKIN_VERSION} && rm -f latest && ln -s #{GHERKIN_VERSION} latest'")
|
47
|
+
sh("ssh cukes.info 'cd /var/www/gherkin/api/java && rm -f latest && ln -s #{GHERKIN_VERSION} latest'")
|
48
|
+
end
|
49
|
+
end
|
data/tasks/rspec.rake
ADDED
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= yieldall %>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
|
+
<head>
|
5
|
+
<%= erb(:headers) %>
|
6
|
+
</head>
|
7
|
+
<body>
|
8
|
+
<script type="text/javascript" charset="utf-8">
|
9
|
+
if (window.top.frames.main) document.body.className = 'frames';
|
10
|
+
</script>
|
11
|
+
|
12
|
+
<div id="header">
|
13
|
+
<%= erb(:logo) %>
|
14
|
+
<%= erb(:breadcrumb) %>
|
15
|
+
<%= erb(:search) %>
|
16
|
+
<div class="clear"></div>
|
17
|
+
</div>
|
18
|
+
|
19
|
+
<iframe id="search_frame"></iframe>
|
20
|
+
|
21
|
+
<div id="content"><%= yieldall %></div>
|
22
|
+
|
23
|
+
<%= erb(:footer) %>
|
24
|
+
</body>
|
25
|
+
</html>
|
@@ -0,0 +1 @@
|
|
1
|
+
<h3><img src="<%= url_for('images/bubble_32x32.png') %>"></img> Gherkin <%= GHERKIN_VERSION %></h3>
|
data/tasks/yard.rake
ADDED