Skip to main content

Template Matching

Since v2.16.0

Template matching allow users to compare any source content with a target template that can either be specified as a text literal or text stored in a file, and perform capture, ignore, and inject operations at the same time.

Examples​

The following examples assume that the following JSON value is bound to an attribute named my value in the currently available scope:

  • {"id":42,"category":{"name":"pet"},"name":"tiger","status":"available"}

Templates can contain JSON, XML, HTML, or any type of text and can also have multiple lines. The examples below use single-line JSON only.

Match and Ignore​

The following example will successfully match my value and:

  • Ignore the id value where @{*} appears
Then my value should match template
"""
{"id":@{*},"category":{"name":"pet"},"name":"tiger","status":"available"}
"""

Match, Ignore, and Capture​

The following example will successfully match my value and:

  • Ignore the id value where @{*} appears
  • Capture the tiger value where @{pet name} appears and bind it to the attribute named pet name in the feature scope
Then my value should match template
"""
{"id":@{*},"category":{"name":"pet"},"name":"@{pet name}","status":"available"}
"""

Subsequent steps can access the captured pet name attribute like any other Gwen binding. For example, the following checks it's value:

And pet name should be "tiger"

Match, Ignore, Capture, and Inject​

The following example will successfully match my value and:

  • Ignore the id value where @{*} appears
  • Caputre the tiger value where @{pet name} appears and bind it to the attribute named pet name in the feature scope
  • Inject the value bound to the my status attribute into the template where ${my status} appears.
Given my status is "available"
Then my value should match template
"""
{"id":@{*},"category":{"name":"pet"},"name":"@{pet name}","status":"${my status}"}
"""
And pet name should be "tiger"

Ignore Multiple Lines​

Multiple lines can be ignored anywhere in a template by specifying @{**}