gherkin 2.0.1-universal-dotnet → 2.0.2-universal-dotnet
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/History.txt +12 -0
- data/VERSION.yml +1 -1
- data/features/json_formatter.feature +108 -48
- data/features/json_parser.feature +307 -0
- data/features/pretty_formatter.feature +9 -3
- data/features/step_definitions/json_lexer_steps.rb +20 -0
- data/features/step_definitions/pretty_formatter_steps.rb +44 -14
- data/lib/gherkin/cli/main.rb +1 -1
- data/lib/gherkin/formatter/json_formatter.rb +50 -13
- data/lib/gherkin/formatter/pretty_formatter.rb +23 -9
- data/lib/gherkin/i18n.rb +1 -1
- data/lib/gherkin/json_lexer.rb +103 -0
- data/lib/gherkin/tools/reformat.rb +6 -3
- data/lib/gherkin/tools/stats_listener.rb +3 -0
- data/ragel/lexer.java.rl.erb +2 -2
- data/ragel/lexer_common.rl.erb +1 -1
- data/spec/gherkin/fixtures/complex.json +124 -0
- data/spec/gherkin/formatter/pretty_formatter_spec.rb +3 -0
- data/spec/gherkin/json_lexer_spec.rb +97 -0
- data/spec/gherkin/shared/lexer_group.rb +12 -0
- data/spec/spec_helper.rb +2 -8
- data/tasks/compile.rake +16 -2
- metadata +10 -8
- data/lib/gherkin/parser/json_parser.rb +0 -102
- data/spec/gherkin/fixtures/complex.js +0 -105
- data/spec/gherkin/parser/json_parser_spec.rb +0 -129
| @@ -1,16 +1,19 @@ | |
| 1 1 | 
             
            require 'stringio'
         | 
| 2 2 | 
             
            require 'gherkin/tools/files'
         | 
| 3 3 | 
             
            require 'gherkin/formatter/pretty_formatter'
         | 
| 4 | 
            +
            require 'gherkin/parser/formatter_listener'
         | 
| 4 5 |  | 
| 5 6 | 
             
            module Gherkin
         | 
| 6 7 | 
             
              module Tools
         | 
| 7 8 | 
             
                class Reformat < Files
         | 
| 8 9 | 
             
                  def run
         | 
| 9 10 | 
             
                    each do |file|
         | 
| 10 | 
            -
                       | 
| 11 | 
            -
                       | 
| 11 | 
            +
                      io = defined?(JRUBY_VERSION) ? Java.java.io.StringWriter.new : StringIO.new
         | 
| 12 | 
            +
                      formatter = Formatter::PrettyFormatter.new(io, true)
         | 
| 13 | 
            +
                      listener = Parser::FormatterListener.new(formatter)
         | 
| 12 14 | 
             
                      scan(file, listener)
         | 
| 13 | 
            -
                       | 
| 15 | 
            +
                      string = defined?(JRUBY_VERSION) ? io.getBuffer.toString : io.string
         | 
| 16 | 
            +
                      File.open(file, 'w') {|io| io.write(string)}
         | 
| 14 17 | 
             
                    end
         | 
| 15 18 | 
             
                  end
         | 
| 16 19 | 
             
                end
         | 
    
        data/ragel/lexer.java.rl.erb
    CHANGED
    
    | @@ -142,9 +142,9 @@ public class <%= @i18n.underscored_iso_code.upcase %> implements Lexer { | |
| 142 142 |  | 
| 143 143 | 
             
              %% write data noerror;
         | 
| 144 144 |  | 
| 145 | 
            -
              public void scan(String  | 
| 145 | 
            +
              public void scan(String source, String uri, int offset)  {
         | 
| 146 146 | 
             
                listener.location(uri, offset);
         | 
| 147 | 
            -
                String input =  | 
| 147 | 
            +
                String input = source + "\n%_FEATURE_END_%";
         | 
| 148 148 | 
             
                byte[] data = null;
         | 
| 149 149 | 
             
                try {
         | 
| 150 150 | 
             
                  data = input.getBytes("UTF-8");
         | 
    
        data/ragel/lexer_common.rl.erb
    CHANGED
    
    | @@ -20,7 +20,7 @@ | |
| 20 20 | 
             
              ScenarioHeadingEnd = EOL+ space* ( I18N_Feature | I18N_Background | I18N_Scenario | I18N_ScenarioOutline | I18N_Step | '@' | '#' | EOF ) >next_keyword_start;
         | 
| 21 21 | 
             
              BackgroundHeadingEnd = EOL+ space* ( I18N_Feature | I18N_Scenario | I18N_ScenarioOutline | I18N_Step | '@' | '#'| EOF ) >next_keyword_start;
         | 
| 22 22 | 
             
              ScenarioOutlineHeadingEnd = EOL+ space* ( I18N_Feature | I18N_Scenario | I18N_Step | '@' | '#' | EOF ) >next_keyword_start;
         | 
| 23 | 
            -
              ExamplesHeadingEnd = EOL+ space* ( I18N_Feature | '|' ) >next_keyword_start;
         | 
| 23 | 
            +
              ExamplesHeadingEnd = EOL+ space* ( I18N_Feature | '|' | '#') >next_keyword_start;
         | 
| 24 24 |  | 
| 25 25 | 
             
              FeatureHeading = space* I18N_Feature %begin_content ^FeatureHeadingEnd* :>> FeatureHeadingEnd @store_feature_content;
         | 
| 26 26 | 
             
              BackgroundHeading = space* I18N_Background %begin_content ^BackgroundHeadingEnd* :>> BackgroundHeadingEnd @store_background_content;
         | 
| @@ -0,0 +1,124 @@ | |
| 1 | 
            +
            { "name": "Feature Text",
         | 
| 2 | 
            +
              "keyword": "Feature",
         | 
| 3 | 
            +
              "description": "In order to test multiline forms",
         | 
| 4 | 
            +
              "tags": [
         | 
| 5 | 
            +
                "@tag1",
         | 
| 6 | 
            +
                "@tag2"
         | 
| 7 | 
            +
              ],
         | 
| 8 | 
            +
              "background" : {
         | 
| 9 | 
            +
                "description": "",
         | 
| 10 | 
            +
                "name": "", 
         | 
| 11 | 
            +
                "keyword": "Background",
         | 
| 12 | 
            +
                "steps": [
         | 
| 13 | 
            +
                  { "name": "this is a background step",
         | 
| 14 | 
            +
                    "keyword": "Given " },
         | 
| 15 | 
            +
                  { "name": "this is another one",
         | 
| 16 | 
            +
                    "keyword": "When ",
         | 
| 17 | 
            +
                    "line": 412 }
         | 
| 18 | 
            +
                ]
         | 
| 19 | 
            +
              },
         | 
| 20 | 
            +
              "elements": [
         | 
| 21 | 
            +
                { "type": "scenario_outline",
         | 
| 22 | 
            +
                  "keyword": "Scenario Outline",
         | 
| 23 | 
            +
                  "name": "An Scenario Outline",
         | 
| 24 | 
            +
                  "description": "",
         | 
| 25 | 
            +
                  "tags": [ "@foo" ],
         | 
| 26 | 
            +
                  "steps": [
         | 
| 27 | 
            +
                    { "name": "A step with a table",
         | 
| 28 | 
            +
                      "keyword": "Given ",
         | 
| 29 | 
            +
                      "table" : [
         | 
| 30 | 
            +
                        {"cells":
         | 
| 31 | 
            +
                          [ "a","row","for","a","step" ]
         | 
| 32 | 
            +
                        }
         | 
| 33 | 
            +
                      ]
         | 
| 34 | 
            +
                    }
         | 
| 35 | 
            +
                  ],
         | 
| 36 | 
            +
                  "examples": [
         | 
| 37 | 
            +
                    { "name": "Sweet Example", 
         | 
| 38 | 
            +
                      "keyword": "Examples",
         | 
| 39 | 
            +
                      "description": "",
         | 
| 40 | 
            +
                      "table" : [
         | 
| 41 | 
            +
                        {"cells" :
         | 
| 42 | 
            +
                          [ "Fill","In" ]
         | 
| 43 | 
            +
                        },
         | 
| 44 | 
            +
                        {"cells" :
         | 
| 45 | 
            +
                          [ "The","Blanks" ]
         | 
| 46 | 
            +
                        }
         | 
| 47 | 
            +
                      ],
         | 
| 48 | 
            +
                      "tags" : [ "@exampletag" ]
         | 
| 49 | 
            +
                    }
         | 
| 50 | 
            +
                  ]
         | 
| 51 | 
            +
                },
         | 
| 52 | 
            +
                { "type" : "scenario",
         | 
| 53 | 
            +
                  "keyword": "Scenario",
         | 
| 54 | 
            +
                  "name" : "Reading a Scenario",
         | 
| 55 | 
            +
                  "description": "",
         | 
| 56 | 
            +
                  "tags" : [
         | 
| 57 | 
            +
                    "@tag3",
         | 
| 58 | 
            +
                    "@tag4"
         | 
| 59 | 
            +
                  ],
         | 
| 60 | 
            +
                  "steps" : [
         | 
| 61 | 
            +
                    { "name" : "there is a step",
         | 
| 62 | 
            +
                      "keyword": "Given "},
         | 
| 63 | 
            +
                    { "name" : "not another step",
         | 
| 64 | 
            +
                      "keyword": "But " }
         | 
| 65 | 
            +
                  ]
         | 
| 66 | 
            +
                },
         | 
| 67 | 
            +
                { "type" : "scenario",
         | 
| 68 | 
            +
                  "keyword": "Scenario",
         | 
| 69 | 
            +
                  "name" : "Reading a second scenario",
         | 
| 70 | 
            +
                  "description": "With two lines of text",
         | 
| 71 | 
            +
                  "tags" : [ "@tag3" ],
         | 
| 72 | 
            +
                  "steps" : [
         | 
| 73 | 
            +
                    { "name" : "a third step with a table",
         | 
| 74 | 
            +
                      "keyword": "Given ",
         | 
| 75 | 
            +
                      "table" : [
         | 
| 76 | 
            +
                        { "cells" :
         | 
| 77 | 
            +
                          [ "a","b" ]
         | 
| 78 | 
            +
                        },
         | 
| 79 | 
            +
                        { "cells" :
         | 
| 80 | 
            +
                          [ "c","d" ]
         | 
| 81 | 
            +
                        },
         | 
| 82 | 
            +
                        { "cells" :
         | 
| 83 | 
            +
                          [ "e", "f" ]
         | 
| 84 | 
            +
                        }
         | 
| 85 | 
            +
                      ]
         | 
| 86 | 
            +
                    },
         | 
| 87 | 
            +
                    { "name" : "I am still testing things",
         | 
| 88 | 
            +
                      "keyword": "Given ",
         | 
| 89 | 
            +
                      "table" : [
         | 
| 90 | 
            +
                        { "cells" :
         | 
| 91 | 
            +
                          [ "g","h" ]
         | 
| 92 | 
            +
                        },
         | 
| 93 | 
            +
                        { "cells" :
         | 
| 94 | 
            +
                          [ "e","r" ]
         | 
| 95 | 
            +
                        },
         | 
| 96 | 
            +
                        { "cells" :
         | 
| 97 | 
            +
                          [ "k", "i" ]
         | 
| 98 | 
            +
                        },
         | 
| 99 | 
            +
                        { "cells" :
         | 
| 100 | 
            +
                          [ "n", "" ]
         | 
| 101 | 
            +
                        }
         | 
| 102 | 
            +
                      ]
         | 
| 103 | 
            +
                    },
         | 
| 104 | 
            +
                    { "name" : "I am done testing these tables",
         | 
| 105 | 
            +
                      "keyword": "Given " },
         | 
| 106 | 
            +
                    { "name" : "I am happy",
         | 
| 107 | 
            +
                      "keyword": "Given " }
         | 
| 108 | 
            +
                  ]
         | 
| 109 | 
            +
                },
         | 
| 110 | 
            +
                { "type" : "scenario",
         | 
| 111 | 
            +
                  "keyword": "Scenario",
         | 
| 112 | 
            +
                  "name" : "Hammerzeit", 
         | 
| 113 | 
            +
                  "description": "",
         | 
| 114 | 
            +
                  "steps" : [
         | 
| 115 | 
            +
                    { "name" : "All work and no play", 
         | 
| 116 | 
            +
                      "keyword": "Given ",
         | 
| 117 | 
            +
                      "py_string" : "Makes Homer something something\nAnd something else" },
         | 
| 118 | 
            +
                    { "name" : "crazy",
         | 
| 119 | 
            +
                      "keyword": "Given " }
         | 
| 120 | 
            +
                  ]
         | 
| 121 | 
            +
                }
         | 
| 122 | 
            +
              ]
         | 
| 123 | 
            +
            }
         | 
| 124 | 
            +
             | 
| @@ -79,6 +79,7 @@ module Gherkin | |
| 79 79 |  | 
| 80 80 | 
             
              Scenario: Scenario Description
         | 
| 81 81 | 
             
                description has multiple lines
         | 
| 82 | 
            +
             | 
| 82 83 | 
             
                Given there is a step
         | 
| 83 84 | 
             
                  """
         | 
| 84 85 | 
             
                  with
         | 
| @@ -97,6 +98,8 @@ module Gherkin | |
| 97 98 | 
             
            @foo
         | 
| 98 99 | 
             
            Feature: Feature Description
         | 
| 99 100 | 
             
              Some preamble
         | 
| 101 | 
            +
              on several
         | 
| 102 | 
            +
              lines
         | 
| 100 103 |  | 
| 101 104 | 
             
              # A Scenario Outline comment
         | 
| 102 105 | 
             
              @bar
         | 
| @@ -0,0 +1,97 @@ | |
| 1 | 
            +
            #encoding: utf-8
         | 
| 2 | 
            +
            require 'spec_helper'
         | 
| 3 | 
            +
            require 'gherkin/json_lexer'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Gherkin
         | 
| 6 | 
            +
              describe JSONLexer do 
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                before do
         | 
| 9 | 
            +
                  @listener = Gherkin::SexpRecorder.new
         | 
| 10 | 
            +
                  @lexer = Gherkin::JSONLexer.new(@listener)
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                describe "An empty feature" do
         | 
| 14 | 
            +
                  it "should scan empty features" do
         | 
| 15 | 
            +
                    @lexer.scan('{}')
         | 
| 16 | 
            +
                    @listener.to_sexp.should == [
         | 
| 17 | 
            +
                      [:eof]
         | 
| 18 | 
            +
                    ]
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                describe "A barely empty feature" do
         | 
| 23 | 
            +
                  it "should scan a feature with no elements" do
         | 
| 24 | 
            +
                    @lexer.scan('{ "keyword": "Feature", "name": "One", "description": "", "line" : 3 }')
         | 
| 25 | 
            +
                    @listener.to_sexp.should == [
         | 
| 26 | 
            +
                      [:feature, "Feature", "One", "", 3],
         | 
| 27 | 
            +
                      [:eof]
         | 
| 28 | 
            +
                    ]
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                describe "Missing line numbers" do
         | 
| 33 | 
            +
                  it "should indicate a line number of 0 if a line attribute doesn't exist" do
         | 
| 34 | 
            +
                    @lexer.scan('{ "name": "My Sweet Featur", "keyword": "Feature", "description": "" }')
         | 
| 35 | 
            +
                    @listener.to_sexp.should == [
         | 
| 36 | 
            +
                      [:feature, "Feature", "My Sweet Featur", "", 0],
         | 
| 37 | 
            +
                      [:eof]
         | 
| 38 | 
            +
                    ]
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                describe "Keywords" do
         | 
| 43 | 
            +
                  it "should use the keyword from the source when provided" do
         | 
| 44 | 
            +
                    @lexer.scan('{ "name" : "My Sweet Featur", "language": "fr", "keyword": "Feature", "description": "" }')
         | 
| 45 | 
            +
                    @listener.to_sexp.should == [
         | 
| 46 | 
            +
                      [:feature, "Feature", "My Sweet Featur", "",  0],
         | 
| 47 | 
            +
                      [:eof]
         | 
| 48 | 
            +
                    ]
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                describe "A complex feature with tags, comments, multiple scenarios, and multiple steps and tables" do
         | 
| 53 | 
            +
                  it "should find things in the right order" do
         | 
| 54 | 
            +
                    scan_file("complex.json")
         | 
| 55 | 
            +
                    @listener.to_sexp.should == [
         | 
| 56 | 
            +
                      [:tag, "@tag1", 0],
         | 
| 57 | 
            +
                      [:tag, "@tag2", 0],
         | 
| 58 | 
            +
                      [:feature, "Feature", "Feature Text","In order to test multiline forms", 0],
         | 
| 59 | 
            +
                      [:background, "Background", "", "", 0],
         | 
| 60 | 
            +
                      [:step, "Given ", "this is a background step", 0],
         | 
| 61 | 
            +
                      [:step, "When ", "this is another one", 412],
         | 
| 62 | 
            +
                      [:tag, "@foo", 0],
         | 
| 63 | 
            +
                      [:scenario_outline, "Scenario Outline", "An Scenario Outline","", 0],
         | 
| 64 | 
            +
                      [:step, "Given ", "A step with a table", 0],
         | 
| 65 | 
            +
                      [:row, %w{a row for a step}, 0],
         | 
| 66 | 
            +
                      [:tag, "@exampletag", 0],
         | 
| 67 | 
            +
                      [:examples, "Examples", "Sweet Example", "", 0],
         | 
| 68 | 
            +
                      [:row, %w{Fill In}, 0],
         | 
| 69 | 
            +
                      [:row, %w{The Blanks}, 0],
         | 
| 70 | 
            +
                      [:tag, "@tag3", 0],
         | 
| 71 | 
            +
                      [:tag, "@tag4", 0],
         | 
| 72 | 
            +
                      [:scenario, "Scenario", "Reading a Scenario", "", 0],
         | 
| 73 | 
            +
                      [:step, "Given ", "there is a step", 0],
         | 
| 74 | 
            +
                      [:step, "But ", "not another step", 0],
         | 
| 75 | 
            +
                      [:tag, "@tag3", 0],
         | 
| 76 | 
            +
                      [:scenario, "Scenario", "Reading a second scenario", "With two lines of text", 0],
         | 
| 77 | 
            +
                      [:step, "Given ", "a third step with a table", 0],
         | 
| 78 | 
            +
                      [:row, %w{a b}, 0],
         | 
| 79 | 
            +
                      [:row, %w{c d}, 0],
         | 
| 80 | 
            +
                      [:row, %w{e f}, 0],
         | 
| 81 | 
            +
                      [:step, "Given ", "I am still testing things", 0],
         | 
| 82 | 
            +
                      [:row, %w{g h}, 0],
         | 
| 83 | 
            +
                      [:row, %w{e r}, 0],
         | 
| 84 | 
            +
                      [:row, %w{k i}, 0],
         | 
| 85 | 
            +
                      [:row, ['n', ''], 0], 
         | 
| 86 | 
            +
                      [:step, "Given ", "I am done testing these tables", 0],
         | 
| 87 | 
            +
                      [:step, "Given ", "I am happy", 0],
         | 
| 88 | 
            +
                      [:scenario, "Scenario", "Hammerzeit", "", 0],
         | 
| 89 | 
            +
                      [:step, "Given ", "All work and no play", 0],
         | 
| 90 | 
            +
                      [:py_string, "Makes Homer something something\nAnd something else", 0 ],
         | 
| 91 | 
            +
                      [:step, "Given ", "crazy", 0],
         | 
| 92 | 
            +
                      [:eof]
         | 
| 93 | 
            +
                    ]
         | 
| 94 | 
            +
                  end        
         | 
| 95 | 
            +
                end
         | 
| 96 | 
            +
              end
         | 
| 97 | 
            +
            end
         | 
| @@ -39,6 +39,18 @@ module Gherkin | |
| 39 39 | 
             
                      ]
         | 
| 40 40 | 
             
                    end
         | 
| 41 41 |  | 
| 42 | 
            +
                    it "should not consume comments as part of a multiline example name" do
         | 
| 43 | 
            +
                      scan("Examples: thing\n# ho hum\n| 1 | 2 |\n| 3 | 4 |\n")
         | 
| 44 | 
            +
                      @listener.to_sexp.should == [
         | 
| 45 | 
            +
                        [:location, 'test.feature', 0],
         | 
| 46 | 
            +
                        [:examples, "Examples", "thing", "", 1],
         | 
| 47 | 
            +
                        [:comment,  "# ho hum", 2],
         | 
| 48 | 
            +
                        [:row, ["1","2"], 3],
         | 
| 49 | 
            +
                        [:row, ["3","4"], 4],
         | 
| 50 | 
            +
                        [:eof]
         | 
| 51 | 
            +
                      ]
         | 
| 52 | 
            +
                    end
         | 
| 53 | 
            +
             | 
| 42 54 | 
             
                    it "should allow empty comment lines" do 
         | 
| 43 55 | 
             
                      scan("#\n   # A comment\n   #\n")
         | 
| 44 56 | 
             
                      @listener.to_sexp.should == [
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -1,25 +1,19 @@ | |
| 1 | 
            +
            require 'rubygems'
         | 
| 2 | 
            +
            require 'rspec/autorun'
         | 
| 1 3 | 
             
            require 'gherkin'
         | 
| 2 4 | 
             
            require 'stringio'
         | 
| 3 5 | 
             
            require 'gherkin/sexp_recorder'
         | 
| 4 6 | 
             
            require 'gherkin/output_stream_string_io'
         | 
| 5 | 
            -
            require 'rubygems'
         | 
| 6 | 
            -
            require 'rspec/autorun'
         | 
| 7 7 | 
             
            require 'gherkin/shared/lexer_group'
         | 
| 8 8 | 
             
            require 'gherkin/shared/tags_group'
         | 
| 9 9 | 
             
            require 'gherkin/shared/py_string_group'
         | 
| 10 10 | 
             
            require 'gherkin/shared/row_group'
         | 
| 11 11 |  | 
| 12 12 | 
             
            module GherkinSpecHelper
         | 
| 13 | 
            -
              # TODO: Rename to gherkin_scan_file
         | 
| 14 13 | 
             
              def scan_file(file)
         | 
| 15 14 | 
             
                @lexer.scan(File.new(File.dirname(__FILE__) + "/gherkin/fixtures/" + file).read, file, 0)
         | 
| 16 15 | 
             
              end
         | 
| 17 16 |  | 
| 18 | 
            -
              # TODO: Remove
         | 
| 19 | 
            -
              def parse_file(file)
         | 
| 20 | 
            -
                @parser.parse(File.new(File.dirname(__FILE__) + "/gherkin/fixtures/" + file).read)
         | 
| 21 | 
            -
              end
         | 
| 22 | 
            -
             | 
| 23 17 | 
             
              def rubify_hash(hash)
         | 
| 24 18 | 
             
                if defined?(JRUBY_VERSION)
         | 
| 25 19 | 
             
                  h = {}
         | 
    
        data/tasks/compile.rake
    CHANGED
    
    | @@ -24,15 +24,29 @@ end | |
| 24 24 | 
             
            rl_langs = ENV['RL_LANGS'] ? ENV['RL_LANGS'].split(',') : []
         | 
| 25 25 | 
             
            langs = Gherkin::I18n.all.select { |lang| rl_langs.empty? || rl_langs.include?(lang.iso_code) }
         | 
| 26 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 | 
            +
             | 
| 27 39 | 
             
            langs.each do |i18n|
         | 
| 28 40 | 
             
              java = RagelTask.new('java', i18n)
         | 
| 29 41 | 
             
              rb   = RagelTask.new('rb', i18n)
         | 
| 30 42 |  | 
| 31 | 
            -
               | 
| 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"
         | 
| 32 46 | 
             
              file java_properties => 'lib/gherkin/i18n.yml' do
         | 
| 33 47 | 
             
                File.open(java_properties, 'wb') do |io|
         | 
| 34 48 | 
             
                  io.puts("# Generated file. Do not edit.")
         | 
| 35 | 
            -
                  Gherkin::I18n::KEYWORD_KEYS.each do |key|
         | 
| 49 | 
            +
                  (Gherkin::I18n::KEYWORD_KEYS + %w{name native}).each do |key|
         | 
| 36 50 | 
             
                    value = Gherkin::I18n.unicode_escape(i18n.keywords(key).join("|"))
         | 
| 37 51 | 
             
                    io.puts("#{key}:#{value}")
         | 
| 38 52 | 
             
                  end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: gherkin
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              hash:  | 
| 4 | 
            +
              hash: 11
         | 
| 5 5 | 
             
              prerelease: false
         | 
| 6 6 | 
             
              segments: 
         | 
| 7 7 | 
             
              - 2
         | 
| 8 8 | 
             
              - 0
         | 
| 9 | 
            -
              -  | 
| 10 | 
            -
              version: 2.0. | 
| 9 | 
            +
              - 2
         | 
| 10 | 
            +
              version: 2.0.2
         | 
| 11 11 | 
             
            platform: universal-dotnet
         | 
| 12 12 | 
             
            authors: 
         | 
| 13 13 | 
             
            - Mike Sassak
         | 
| @@ -17,7 +17,7 @@ autorequire: | |
| 17 17 | 
             
            bindir: bin
         | 
| 18 18 | 
             
            cert_chain: []
         | 
| 19 19 |  | 
| 20 | 
            -
            date: 2010-06- | 
| 20 | 
            +
            date: 2010-06-16 00:00:00 +02:00
         | 
| 21 21 | 
             
            default_executable: gherkin
         | 
| 22 22 | 
             
            dependencies: 
         | 
| 23 23 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| @@ -110,12 +110,14 @@ files: | |
| 110 110 | 
             
            - features/escaped_pipes.feature
         | 
| 111 111 | 
             
            - features/feature_parser.feature
         | 
| 112 112 | 
             
            - features/json_formatter.feature
         | 
| 113 | 
            +
            - features/json_parser.feature
         | 
| 113 114 | 
             
            - features/native_lexer.feature
         | 
| 114 115 | 
             
            - features/parser_with_native_lexer.feature
         | 
| 115 116 | 
             
            - features/pretty_formatter.feature
         | 
| 116 117 | 
             
            - features/step_definitions/eyeball_steps.rb
         | 
| 117 118 | 
             
            - features/step_definitions/gherkin_steps.rb
         | 
| 118 119 | 
             
            - features/step_definitions/json_formatter_steps.rb
         | 
| 120 | 
            +
            - features/step_definitions/json_lexer_steps.rb
         | 
| 119 121 | 
             
            - features/step_definitions/pretty_formatter_steps.rb
         | 
| 120 122 | 
             
            - features/steps_parser.feature
         | 
| 121 123 | 
             
            - features/support/env.rb
         | 
| @@ -141,6 +143,7 @@ files: | |
| 141 143 | 
             
            - lib/gherkin/i18n.rb
         | 
| 142 144 | 
             
            - lib/gherkin/i18n.yml
         | 
| 143 145 | 
             
            - lib/gherkin/i18n_lexer.rb
         | 
| 146 | 
            +
            - lib/gherkin/json_lexer.rb
         | 
| 144 147 | 
             
            - lib/gherkin/native.rb
         | 
| 145 148 | 
             
            - lib/gherkin/native/ikvm.rb
         | 
| 146 149 | 
             
            - lib/gherkin/native/java.rb
         | 
| @@ -148,7 +151,6 @@ files: | |
| 148 151 | 
             
            - lib/gherkin/parser/event.rb
         | 
| 149 152 | 
             
            - lib/gherkin/parser/filter_listener.rb
         | 
| 150 153 | 
             
            - lib/gherkin/parser/formatter_listener.rb
         | 
| 151 | 
            -
            - lib/gherkin/parser/json_parser.rb
         | 
| 152 154 | 
             
            - lib/gherkin/parser/meta.txt
         | 
| 153 155 | 
             
            - lib/gherkin/parser/parser.rb
         | 
| 154 156 | 
             
            - lib/gherkin/parser/root.txt
         | 
| @@ -173,7 +175,7 @@ files: | |
| 173 175 | 
             
            - spec/gherkin/fixtures/1.feature
         | 
| 174 176 | 
             
            - spec/gherkin/fixtures/comments_in_table.feature
         | 
| 175 177 | 
             
            - spec/gherkin/fixtures/complex.feature
         | 
| 176 | 
            -
            - spec/gherkin/fixtures/complex. | 
| 178 | 
            +
            - spec/gherkin/fixtures/complex.json
         | 
| 177 179 | 
             
            - spec/gherkin/fixtures/dos_line_endings.feature
         | 
| 178 180 | 
             
            - spec/gherkin/fixtures/i18n_fr.feature
         | 
| 179 181 | 
             
            - spec/gherkin/fixtures/i18n_no.feature
         | 
| @@ -189,10 +191,10 @@ files: | |
| 189 191 | 
             
            - spec/gherkin/i18n_lexer_spec.rb
         | 
| 190 192 | 
             
            - spec/gherkin/i18n_spec.rb
         | 
| 191 193 | 
             
            - spec/gherkin/java_lexer_spec.rb
         | 
| 194 | 
            +
            - spec/gherkin/json_lexer_spec.rb
         | 
| 192 195 | 
             
            - spec/gherkin/output_stream_string_io.rb
         | 
| 193 196 | 
             
            - spec/gherkin/parser/filter_listener_spec.rb
         | 
| 194 197 | 
             
            - spec/gherkin/parser/formatter_listener_spec.rb
         | 
| 195 | 
            -
            - spec/gherkin/parser/json_parser_spec.rb
         | 
| 196 198 | 
             
            - spec/gherkin/parser/parser_spec.rb
         | 
| 197 199 | 
             
            - spec/gherkin/parser/tag_expression_spec.rb
         | 
| 198 200 | 
             
            - spec/gherkin/rb_lexer_spec.rb
         | 
| @@ -256,10 +258,10 @@ test_files: | |
| 256 258 | 
             
            - spec/gherkin/i18n_lexer_spec.rb
         | 
| 257 259 | 
             
            - spec/gherkin/i18n_spec.rb
         | 
| 258 260 | 
             
            - spec/gherkin/java_lexer_spec.rb
         | 
| 261 | 
            +
            - spec/gherkin/json_lexer_spec.rb
         | 
| 259 262 | 
             
            - spec/gherkin/output_stream_string_io.rb
         | 
| 260 263 | 
             
            - spec/gherkin/parser/filter_listener_spec.rb
         | 
| 261 264 | 
             
            - spec/gherkin/parser/formatter_listener_spec.rb
         | 
| 262 | 
            -
            - spec/gherkin/parser/json_parser_spec.rb
         | 
| 263 265 | 
             
            - spec/gherkin/parser/parser_spec.rb
         | 
| 264 266 | 
             
            - spec/gherkin/parser/tag_expression_spec.rb
         | 
| 265 267 | 
             
            - spec/gherkin/rb_lexer_spec.rb
         |