2.19.1
======
March 28, 2019
- Resolve hostname in JUnit reports

2.19.0
======
March 24, 2019
- Introduce Disabled evaluation status to support conditionally disabling steps
- Upgrade library dependencies
  - scopt from 3.7.0 to 3.7.1
  - scala-logging from 3.9.0 to 3.9.2
  - commons-codec from 1.11 to 1.12
  - commons-text from 1.4 to 1.6
  - joda-time from 2.10 to 2.10.1

2.18.3
======
March 12, 2019
- Clear thread local settings before executing each feature
- Log non assertion exceptions as errors in console
- Update Scala from 2.12.7 to 2.12.8

2.18.2
======
February 17, 2019
- Fixed issue with `record.index`

2.18.1
======
February 17, 2019
- Honor hard, soft, and sustained assertion modes when processing data table records
- Add implicit `record.index` attribute to current data table record scope
  - `record.index` starts at 0 (whereas `record.number` starts at 1)

2.18.0
======
January 26, 2019
- Add support for hard, soft, and sustained [assertion modes](https://github.com/gwen-interpreter/gwen/wiki/Assertion-Modes)
  though new setting:
  - `gwen.assertion.mode`
    - Set to one of these values:
      - `hard` to halt execution on first assertion error and report failure (default)
      - `soft` to collect all assertion errors and continue execution whilst reporting them as failures
      - `sustained` to collect all assertion errors and continue execution without reporting them as failures

2.17.0
======
November 24, 2018
- Add global default and working Gwen properties. Properties are loaded in the following order of precedence:
  - System properties passed through `-D` Java command line option
  - `~/gwen.properties` file in root of user directory (user overrides)
  - Properties files passed into Gwen through the -p/--properties command line option
    - These are loaded in the order provided so that later ones override earlier ones
  - `./gwen.properties` file in working directory where Gwen is invoked (working defaults)
  - `~/.gwen/gwen.properties file` in `.gwen` folder of user home directory (global defaults)

2.16.3
======
November 17, 2018
- Add settings exception for raising invalid settings errors

2.16.2
======
October 6, 2018
- Use java futures instead of parallel collections to ensure that all cores are utilised at all times during parallel
  execution.
- Update scala from version 2.12.6 to 2.12.7

2.16.1
======
October 2, 2018
- Use `==` instead of `.equals` for string equality check in assertions (as per scala recommendation)

2.16.0
======
September 1, 2018
- Introduced @Synchronized annotation for StepDefs to support synchronized execution of certain steps.
  StepDefs having this annotation will have their steps executed by a single feature thread at a time in the case
  of parallel execution. This feature was requested through PR gwen-interpreter/gwen-web#63 raised by @rkevin99 and
  implemented in PR #42 in the core interpreter.
- Number all attachment items in reports

2.15.2
======
June 23, 2018
- Update scala from version 2.12.4 to 2.12.6
- Update gherkin from version 5.0.0 to 5.1.0
- Update scalaLogging from version 3.8.0 to 3.9.0
- Update jline from version 2.14.5 to 2.14.6
- Update commonsText from version 1.2 to 1.4
- Update jodaTime from version 2.9.9 to 2.10

2.15.1
======
June 19, 2018
- add tag filtering for Examples clauses

2.15.0
======
June 5, 2018
- Add support for loading settings from one comma separated setting and from many individual
  settings with arbitrarily named suffixes. If both forms are provided, then all values are merged.
  - For example, the following 3 settings..
      ```
      setting.values=value1,value2=2
      setting.values.0=value3
      setting.values.1=valueX=1,valueY=2
      ```
      ..will resolve to the following 4 values:
      - `value1`
      - `value2=2`
      - `value3`
      - `valueX=1,valueY=2`

2.14.0
======
May 13, 2018
- Add support for thread-local Gwen settings

2.13.2
======
May 9, 2018
- fix multi-valued settings

2.13.1
======
Apr 11, 2018
- trim extracted xpath nodes
- add some unit tests

2.13.0
======
Mar 24, 2018
- Contributions by @acuciureanu
  - PR #42 - Unit tests for SQL support
  - PR #43 - Refactoring of sbt build file
- Introduce [template matching](https://github.com/gwen-interpreter/gwen/wiki/Template-Matching)
  - The following DSL's where introduced
    - `<reference> <should|should not> match template "<expression>"`
    - `<reference> <should|should not> match template file "<filepath>"`
    - `<source> at <json path|xpath> "<path>" <should|should not> match template "<expression>"`
    - `<source> at <json path|xpath> "<path>" <should|should not> match template file "<filepath>"`
  - Template expressions may contain:
    - Extract attributes: `@{name}`
      - Extracts and binds the source value at `@{name}` in the template to the `name` attribute in the feature scope
    - Ignore values: `!{}`
      - Ignores the source value at `!{}` in the template
    - Inject values: `${name}`
      - Injects the value bound to the `name` attribute into `${name}` in the template

2.12.6
======
Mar 3, 2018
- Update library dependencies
  - scala-logging 3.7.2 to 3.8.0
  - commons-text 1.1 to 1.2
  - scalatest 3.0.4 to 3.0.5

2.12.5
======
Feb 24, 2018
- Fix issue gwen-interpreter/gwen-web#50 raised by @Rahul9844
  - Only log the visible environment bindings (global or global+scoped) on failure

2.12.4
======
Feb 5, 2008
- Fix StepDef parameter matching
- Fix issue gwen-interpreter/gwen-web#48 raised by @Rahul9844: report count is incorrect in case of scenario outline

2.12.3
======
Feb 2, 2018
- Fix issue with masking underlying errors

2.12.2
======
Jan 23, 2018
- Fix issue gwen-interpreter/gwen-web#46 raised by @Rahul9844: infinite recursion error when calling a step that
  - expects a data table with no data table followed by another call with a data table

2.12.1
======
Jan 22, 2018
- Improved error handling for Gherkin syntax errors
- Suppressed stack trace of errors handled by Gwen

2.12.0
======
Jan 15, 2018
- Add support for loading multi valued settings from single setting contain CSV or name-value pairs or multiple
  individual settings with the same prefixed and different suffixed name. If both forms are provided, then all values
  are merged.
  - Example:
    - CSV
        ```
        setting.values=value1=1,value2=2
        ```
    - Prefix + suffix
        ```
        setting.value3=3
        setting.value4=4
        ```

2.11.4
======
Jan 9, 2018
- Fix issue gwen-interpreter/gwen-web#45 raised by @ketu4u2010: Gwen fails to handle DSL keywords in string literals

2.11.3
======
Dec 23, 2017
- Fix issue #40 reopened by @Rahul9844: support empty StepDef params in any position

2.11.2
======
Dec 21, 2017
- Fix issue #40 raised by @Rahul9844: support empty StepDef params

2.11.1
======
Nov 4, 2017
- Update scala from 2.12.3 to 2.12.4
- Update gherkin from 4.1.3 to 5.0.0
- Update scopt from 3.6.0 to 3.7.0
- Update slf4j-log4j from 1.7.22 to 1.7.25
- Update scala-logging from 3.5.0 to 3.7.2
- Update jline from 2.14.2 to 2.14.5
- Update commons-codec from 1.10 to 1.11
- Update scala-csv from 1.3.4 to 1.3.5
- Update json-path from 2.2.0 to 2.4.0
- Update joda-time from 2.9.7 to 2.9.9

2.11.0
======
Sep 26, 2017
- <step> for each <entry> in <source> delimited by "<delimiter>"
   - Calls <step> for each string entry in <source> text delimited by some value
- Refactored attachments handling

2.10.1
======
Sep 21, 2017
- Improved error handling for @Examples tag

2.10.0
======
Sep 19, 2017
- Allow attributes in scoped data bindings to be overridden with blanks.
- Add new DSLs
  - I capture <attribute> by javascript "<expression>"
    - Eagerly captures the result of a javascript expression
  - <step> if <condition>
    - Calls <step> if a javascript predicate <condition> returns true (skips it otherwise)
  - Feature request #34 - SQL insert, update, and delete support
    - I update the <dbName> database by sql "<updateSmt>"
      - Runs an insert, update, or delete statement on a database
      - Number of rows affected accessible as attribute named '<dbName> rows affected'
- Make current record of data feeds available through 'data record number' attribute
- Make current record of for-each iteration available through '<element name> number' attribute
- Make current record of repeat-until iteration available through '<element name> iteration' attribute
- Fix error reporting for priority steps
- Better error reporting for
  - nested settings properties that fail to resolve at load time
  - javascript errors
- Implement #36 - access feature file name and scenario name
- Allow override when using the following DSL to set a property value:
  - my <name> <property|setting> <is|will be> "<value>"
- Add interpolation for filepath in @Examples tag

2.9.2
=====
Sep 1, 2017
- If no elements are found by for-each step, then set status to Passed instead of Skipped
  and display '-- none found --' in report line.

2.9.1
=====
Aug 31, 2017
- Allow dry run in REPL mode
- Check sql db properties on dry run
- ensure that repeat while/until steps fail correctly if the terminating condition is not satisfied before timeout
- Use filename as hyperlink in HTML report summary line if feature has no name

2.9.0
======
Aug 23, 2017
- Update Scala from 2.12.1 to 2.12.3
- Update Gherkin from 4.0.0 to 4.1.3
- Update Scopt from 3.5.0 to 3.6.0
- send errors to system error
- print REPL banner after meta load
- use warn log level for case where no features were provided
- Added support for binding SQL query using DocString syntax
  - <attribute> <is|will be> defined in the <dbName> database by sql
      """
      <selectStmt>
      """

2.8.0
=====
Jul 17, 2017
- Add support for DocStrings
- Evaluate all javascript expressions in anonymous function block and move to ScriptSupport class
- Add paste mode to REPL to support multiline step evaluation (steps with tables or docStrings)
- Add Gherkin language header to Gwen model

2.7.3
=====
Jul 11, 2017
- Fix fail handling where cause was not being reported correctly

2.7.2
=====
Jul 10, 2017
- Add syntax checking for DataTable tags
- Report error if Data Table tag is specified without StepDef tag
- Give steps that call other steps execution priority over all other steps or StepDefs that may have the same
  structure to ensure that they are evaluated and not raised as conflicts that require renaming.
- All data table cell references must be include data record index unless in foreach step

2.7.1
=====
Jul 8, 2017
- Renamed JS methods for consistency
- Changed dry run values for consistency

2.7.0
=====
Jul 7, 2017
- PR gwen-interpreter/gwen#32 - Add support for Gherkin data tables (horizontal, vertical, and matrix forms)
- Log the results of bound value lookups at debug level
- Refactor of code to make dry run more seamless

2.6.1
=====
Jun 27, 2017
- Correct id in example rows for scenario outlines in JSON reports
- Use StringEscapeUtils from Apache Commons to escape HTML, XML, and JSON in reports where necessary

2.6.0
=====
Jun 25, 2017
- Add cucumber compliant JSON output reports
  - json -f/--format option
  - evaluated scenario outlines are expanded in the report (and not expanded if not evaluated)
- Expand evaluated scenario outlines in JUnit-XML reports (and do not expanded if not evaluated)
- Capture location of all gherkin nodes instead of just steps only
- Add support for binding closure functions to data scopes

2.5.0
=====
Jun 9, 2017
- Make string interpolation work with multi-line strings (use DOTALL mode in regex matcher)
- Introduce Java Scripting API (JSR 223) to support JavaScript evaluation in non web engines
- Merge common steps into default engine support class so other engines can easily inherit them

2.4.1
=====
Jun 1, 2017
- Make env REPL output more compact and readable
- Remove json-play dependency

2.4.0
=====
May 30, 2017
- Enable cntl-d in REPL for exit (issue #31 raised by @asgillet)

2.3.1
=====
May 20, 2017
- Add findEntries function to scoped data stack to enable finding entries by predicate

2.3.0
=====
Apr 11, 2017
- Add cache in feature scope for storing temporary objects (non string values)
- Add support for sourcing examples tables from CSV files in scenario outlines
- Add settings for enabling or disabling auto meta and CSV data file discovery
  - gwen.auto.discover.meta (true to enable auto meta discovery, false to disable, default is true for enabled)
  - gwen.auto.discover.data.csv (true to enable auto CSV data discovery, false to disable, default is true for enabled)

2.2.1
=====
Mar 31, 2017
- Only generate slideshow in report if screen shot capture is enabled

2.2.0
=====
Mar 12, 2017
- Added support for scenario outlines (see PR #29)
  - You can use them inline or as StepDefs
  - Examples records in outlines are expanded into scenarios during the normalisation phase
  - Each example record is a hyperlink in the HTML report that expands the scenario when clicked
- Escape description lines in HTML report

2.1.0
=====
Feb 10, 2017
- Added support for binding SQL query results to attributes
- Introduced GWEN_CLASSPATH environment variable for adding external JARs to Gwen classpath

2.0.0
=====
Jan 20, 2017
- Update to Java 8 (Java 7 no longer supported)
- Update from Scala 2.11.8 to 2.12.1
- Updated following dependencies
  - json-play from 2.3.9 to 2.6.0-M1
  - scopt from 3.3.0 to 3.5.0
  - slf4j-log4j12 from 1.7.7 to 1.7.22
  - jline from 2.13 to 2.14.2
  - scala-csv from 1.2.2 to 1.3.4
  - scala-test from 2.2.4 to 3.0.1
- Added dependencies
  - joda-time 2.9.7
  - scala-logging 3.5.0
- Removed dependencies
  - scala-logging-slf4j 2.1.2
  
1.4.3
=====
Nov 24, 2016, 9:43 AM GMT+10 (AEDT)
- Fixed issue with junit reports that caused an exception to be thrown when
  the feature file being reported on is in the top level working directory.
- Move generic compare logic into core environment context
- Mix XPath, Regex, and JSON support into core environment context
    
1.4.2
=====
Oct 11, 2016, 9:16 PM GMT+10 (AEDT)
- Fixed play function in modal popup slideshow. Solution was to:
  - add `height="100%"` to the slideshow image tag
  - if the 1st frame is displayed then point the reel control to the last frame 
    and immediately back to 1st frame before triggering play

1.4.1
=====
Sep 14, 2016, 12:42 PM GMT+10 (AEST)
- Fix analytics and timings in reports
- Suppress hyperlink for 'Loaded' status in reports

1.4.0
=====
Sep 12, 2016, 10:37 PM GMT+10 (AEST)
- Include total elapsed time at the top of all reports
- Include start and finish times at the top of all reports
- Make failed status in detail report a hyperlink to first failed scenario
- Enhancement #26: meta imports 
  - to allow fine grained and explicit control over how meta is loaded
- Internally store tags in list instead of set
- Display elapsed time on report summary lines
- Do not auto discover CSV files below feature directory
- Do not treat embedded '+' literals in strings as concatenation operator
- Use flash scope to track changes made to global attributes in local scopes
- wrap long text in reports
- store atts as list of nvp tuples instaed of json
- update gherkin parser from v3.1.2 to v4.0.0
- improved stepdef lookup performance (use lazy iterator)

1.3.4
=====
Aug 17, 2016, 8:32 PM GMT+10 (AEST)
- Report ambiguous stepdef lookup errors instead of exiting interpreter
- Raise invalid property error if a property without a key is found in a 
  properties file

1.3.3
=====
Jul 22, 2016, 11:48 AM GMT+10 (AEST)
- Expose duration formatter in Predefs object
- Preserve order of fields when reading CSV data
- Do not evaluate StepDef if calling step fails interpolation

1.3.2
=====
Jul 18, 2016, 8:11 PM GMT+10 (AEST)
- Fix version hyperlink in report 
- Update scala version from 2.11.7 to 2.11.8

1.3.1
=====
Jul 15, 2016, 11:10 PM GMT+10 (AEST)
- Wrap list of meta that is displayed in HTML detail reports with a 
  collapsable container that is hidden by default and can be expanded when 
  user clicks the 'no of meta files' hyperlink.
- Link version number in report to release notes

1.3.0
=====
Jun 21, 2016, 7:09 PM GMT+10 (AEST)
- User request #21
  - Implemented ability to discover multiple meta files in directories
    instead of just one
- Fix issue #23 
  - Raise ambigious error if a step resolves to more than one StepDef at runtime
- Fix issue #24
  - Change stepdef parameter interpolation for dry run mode so that 
    `$<name>` becomes `$[param:name]` (otherwise it forever recurses)
- Implement enhancement #25
  - Add support for passing directories to the `-m/--meta` option instead of 
    just files. All meta files within a specified directory will be recursively 
    loaded.
    
1.2.1
=====
May 24, 2016, 7.23 PM GMT+10 (AEST)
- Issue gwen-interpreter/gwen-web#24 
    Fixed tag filtering to accept tagged features and scenarios that have at 
    least one specified include tag and exclude all specified exclude tags. The 
    specified include and exclude tags are now partitioned and evaluated 
    separately (as per above) instead of being logically ANDed together from 
    left to right.
- Only dump environment on failure when in batch mode

1.2.0
=====
Apr 12, 2016, 10.01 PM GMT+10 (AEST)
- Added JSON path matching support using library: https://github.com/jayway/JsonPath

1.1.2
=====
Mar 30, 2016, 1:23 AM GMT+11 (AEDT)
- Prefix all attachment filenames with the sequence counter number

1.1.1
=====
Mar 6, 2016, 10:08 PM GMT+11 (AEDT)
- Return exit code zero when exiting REPL if no feature or meta files 
  were passed in.

1.1.0
=====
Feb 29, 2016, 8:50 PM GMT+11 (AEDT)
- Added support for configuring a ramp up interval (in seconds) for 
  staggered parallel execution ~ for user request issue #18. The 
  interval can be set through the `gwen.rampup.interval.seconds` setting
  This setting is only applicable for parallel execution mode. If it is 
  not set or is set to zero, then no staggering will occur (as per default 
  behavior). 
- Added new `gwen.report.suppress.meta` setting for controlling whether or 
  not meta reports should be generated with HTML reports (default value is 
  false). If you have a lot of meta, suppressing the meta reports can 
  save a lot of disk space. Enabling this setting does not suppress the 
  hyperlinked stepdefs in feature reports (they will always be rendered).

1.0.3
=====
Feb 11, 2016, 11:33 PM GMT+11 (AEDT)
- Do not allow StepDef names to start with keywords Given, When, Then, And or But
  - throw error and immediately abort execution when not satisfied

1.0.2
=====
Feb 4, 2016, 2:10 AM GMT+11 (AEDT)
- Fixed #17 - Map null values in scoped attributes to None in getOpt calls
 
1.0.1
=====
Jan 26, 2016, 11:00 PM GMT+11 (AEDT)
- Resolved #15 - Use compact report attachment names

1.0.0
=====
Jan 19, 2016, 11:24 PM GMT+11 (AEDT)
First gwen release.
- Uses:
  - io.cucumber gherkin3 v3.1.2
  - com.typesafe.play play-json v2.3.9
  - com.github.scopt scopt v3.3.0
  - com.typesafe.scala-logging scala-logging-slf4j v2.1.2
  - org.slf4j slf4j-log4j12 v1.7.7
  - jline jline v2.13
  - commons-codec commons-codec v1.10
  - com.github.tototoshi scala-csv v1.2.2
- Requires:
  - Java 7+
- Introduces:
  - Abstract evaluation engine
  - REPL console with commands:
    - help
    - env -a|-f "filter"
    - history
    - !# (history bang operator)
    - Given|When|Then|And|But <step> (evaluates a step)
    - exit|quit|bye
    - <tab> (for tab completion)
  - Batch execution
  - Evaluation reports (Rich HTML and JUnit-XML)
  - Slideshows in reports
  - Data scopes (global, local, and user defined scopes)
  - Meta features
  - Composable step definitions (@StepDef) with parameters
  - Serial and parallel execution
  - Feature and scenario level tags (annoations)
  - Static validation (--dry-run)
  - Data driven execution (csv data feeds)
  - System process calls
  - Fail fast options
  - Hybrid engine support   
  - String interpolation
  - User level properties and meta overrides
  - @Ignore tag
  - Base64 encoding and decoding
  - XML matching using XPath expressions
  - Configuration settings:
    - gwen.feature.failfast
    - gwen.feature.failfast.exit
    - gwen.report.slideshow.framespersecond
    - gwen.report.overwrite
    - log4j.configuration
- Usage and options:
```
Usage: install-dir/bin/gwen.sh|gwen.bat [options] [<features>]

  [options]
  --version
        Prints the implementation version
  --help
        Prints this usage text
  -b | --batch
        Batch/server mode
  -| | --parallel
        Parallel batch execution mode)
  -p <properties files> | --properties <properties files>
        Comma separated list of properties file paths
  -r <report directory> | --report <report directory>
        Evaluation report output directory
  -f <formats> | --formats <formats>
        Comma separated list of report formats to produce
         - Supported formats include: html,junit (default is html)
  -t <tags> | --tags <tags>
        Comma separated list of @include or ~@exclude tags
  -n | --dry-run
        Do not evaluate steps on engine (validate for correctness only)
  -i <input data file> | --input-data <input data file>
        Input data (CSV file with column headers)
  -m <meta files> | --meta <meta files>
        Comma separated list of meta file paths

  [<features>]
       Space separated list of feature files and/or directory paths
```
