The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Cucumber::Messages - Library of classes to encapsulate Cucumber messages

SYNOPSIS

  use Cucumber::Messages;

  my $loc = Cucumber::Messages::Location->new(
     line => 12, column => 26
  );
  my $loc_json = $loc->to_json;

  my $envelope = Cucumber::Messages::Envelope->from_json($serialized_envelope);

DESCRIPTION

Cucumber messages define the central protocol in the Cucumber ecosystem by which the various components communicate. Messages are serialized to NDJSON.

This library provides both serialization/deserialization to/from NDJSON as well as the in-memory representation of the messages for Perl applications.

Each serialized message should be wrapped in a Cucumber::Messages::Envelope and can thereby be deserialized by calling the from_json class message with the serialized representation as its argument, like shown in the SYNOPSIS.

MESSAGE CLASSES

Cucumber::Messages::Attachment

DESCRIPTION

Represents the Attachment message in Cucumber's message protocol.

//// Attachments (parse errors, execution errors, screenshots, links...)

* An attachment represents any kind of data associated with a line in a [Source](#io.cucumber.messages.Source) file. It can be used for:

 * Syntax errors during parse time
 * Screenshots captured and attached during execution
 * Logs captured and attached during execution

 It is not to be used for runtime errors raised/thrown during execution. This
 is captured in `TestResult`.

ATTRIBUTES

body

* The body of the attachment. If `contentEncoding` is `IDENTITY`, the attachment is simply the string. If it's `BASE64`, the string should be Base64 decoded to obtain the attachment.

content_encoding

* Whether to interpret `body` "as-is" (IDENTITY) or if it needs to be Base64-decoded (BASE64).

 Content encoding is *not* determined by the media type, but rather by the type
 of the object being attached:

 - string => IDENTITY
 - byte array => BASE64
 - stream => BASE64

Available constants for valid values of this field:

  • CONTENTENCODING_IDENTITY

  • CONTENTENCODING_BASE64

file_name

* Suggested file name of the attachment. (Provided by the user as an argument to `attach`)

media_type

* The media type of the data. This can be any valid [IANA Media Type](https://www.iana.org/assignments/media-types/media-types.xhtml) as well as Cucumber-specific media types such as `text/x.cucumber.gherkin+plain` and `text/x.cucumber.stacktrace+plain`

source

test_case_started_id

test_step_id

url

* A URL where the attachment can be retrieved. This field should not be set by Cucumber. It should be set by a program that reads a message stream and does the following for each Attachment message:

 - Writes the body (after base64 decoding if necessary) to a new file.
 - Sets `body` and `contentEncoding` to `null`
 - Writes out the new attachment message

 This will result in a smaller message stream, which can improve performance and
 reduce bandwidth of message consumers. It also makes it easier to process and download attachments
 separately from reports.

Cucumber::Messages::Duration

DESCRIPTION

Represents the Duration message in Cucumber's message protocol.

The structure is pretty close of the Timestamp one. For clarity, a second type of message is used.

ATTRIBUTES

seconds

nanos

Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.

Cucumber::Messages::Envelope

DESCRIPTION

Represents the Envelope message in Cucumber's message protocol.

When removing a field, replace it with reserved, rather than deleting the line. When adding a field, add it to the end and increment the number by one. See https://developers.google.com/protocol-buffers/docs/proto#updating for details

* All the messages that are passed between different components/processes are Envelope messages.

ATTRIBUTES

attachment

gherkin_document

hook

meta

parameter_type

parse_error

pickle

source

step_definition

test_case

test_case_finished

test_case_started

test_run_finished

test_run_started

test_step_finished

test_step_started

undefined_parameter_type

Cucumber::Messages::GherkinDocument

DESCRIPTION

Represents the GherkinDocument message in Cucumber's message protocol.

* The [AST](https://en.wikipedia.org/wiki/Abstract_syntax_tree) of a Gherkin document. Cucumber implementations should *not* depend on `GherkinDocument` or any of its children for execution - use [Pickle](#io.cucumber.messages.Pickle) instead.

 The only consumers of `GherkinDocument` should only be formatters that produce
 "rich" output, resembling the original Gherkin document.

ATTRIBUTES

uri

* The [URI](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier) of the source, typically a file path relative to the root directory

feature

comments

All the comments in the Gherkin document

Cucumber::Messages::Background

DESCRIPTION

Represents the Background message in Cucumber's message protocol.

ATTRIBUTES

location

The location of the `Background` keyword

keyword

name

description

steps

id

Cucumber::Messages::Comment

DESCRIPTION

Represents the Comment message in Cucumber's message protocol.

* A comment in a Gherkin document

ATTRIBUTES

location

The location of the comment

text

The text of the comment

Cucumber::Messages::DataTable

DESCRIPTION

Represents the DataTable message in Cucumber's message protocol.

ATTRIBUTES

location

rows

Cucumber::Messages::DocString

DESCRIPTION

Represents the DocString message in Cucumber's message protocol.

ATTRIBUTES

location

media_type

content

delimiter

Cucumber::Messages::Examples

DESCRIPTION

Represents the Examples message in Cucumber's message protocol.

ATTRIBUTES

location

The location of the `Examples` keyword

tags

keyword

name

description

table_header

table_body

id

Cucumber::Messages::Feature

DESCRIPTION

Represents the Feature message in Cucumber's message protocol.

ATTRIBUTES

location

The location of the `Feature` keyword

tags

All the tags placed above the `Feature` keyword

language

The [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) language code of the Gherkin document

keyword

The text of the `Feature` keyword (in the language specified by `language`)

name

The name of the feature (the text following the `keyword`)

description

The line(s) underneath the line with the `keyword` that are used as description

children

Zero or more children

Cucumber::Messages::FeatureChild

DESCRIPTION

Represents the FeatureChild message in Cucumber's message protocol.

* A child node of a `Feature` node

ATTRIBUTES

rule

background

scenario

Cucumber::Messages::Rule

DESCRIPTION

Represents the Rule message in Cucumber's message protocol.

ATTRIBUTES

location

The location of the `Rule` keyword

tags

All the tags placed above the `Rule` keyword

keyword

name

description

children

id

Cucumber::Messages::RuleChild

DESCRIPTION

Represents the RuleChild message in Cucumber's message protocol.

* A child node of a `Rule` node

ATTRIBUTES

background

scenario

Cucumber::Messages::Scenario

DESCRIPTION

Represents the Scenario message in Cucumber's message protocol.

ATTRIBUTES

location

The location of the `Scenario` keyword

tags

keyword

name

description

steps

examples

id

Cucumber::Messages::Step

DESCRIPTION

Represents the Step message in Cucumber's message protocol.

A step

ATTRIBUTES

location

The location of the steps' `keyword`

keyword

text

doc_string

data_table

id

Unique ID to be able to reference the Step from PickleStep

Cucumber::Messages::TableCell

DESCRIPTION

Represents the TableCell message in Cucumber's message protocol.

A cell in a `TableRow`

ATTRIBUTES

location

The location of the cell

value

The value of the cell

Cucumber::Messages::TableRow

DESCRIPTION

Represents the TableRow message in Cucumber's message protocol.

A row in a table

ATTRIBUTES

location

The location of the first cell in the row

cells

Cells in the row

id

Cucumber::Messages::Tag

DESCRIPTION

Represents the Tag message in Cucumber's message protocol.

* A tag

ATTRIBUTES

location

Location of the tag

name

The name of the tag (including the leading `@`)

id

Unique ID to be able to reference the Tag from PickleTag

Cucumber::Messages::Hook

DESCRIPTION

Represents the Hook message in Cucumber's message protocol.

ATTRIBUTES

id

name

source_reference

tag_expression

Cucumber::Messages::Location

DESCRIPTION

Represents the Location message in Cucumber's message protocol.

* Points to a line and a column in a text file

ATTRIBUTES

line

column

Cucumber::Messages::Meta

DESCRIPTION

Represents the Meta message in Cucumber's message protocol.

* This message contains meta information about the environment. Consumers can use this for various purposes.

ATTRIBUTES

protocol_version

* The [SEMVER](https://semver.org/) version number of the protocol

implementation

SpecFlow, Cucumber-JVM, Cucumber.js, Cucumber-Ruby, Behat etc.

runtime

Java, Ruby, Node.js etc

os

Windows, Linux, MacOS etc

cpu

386, arm, amd64 etc

ci

Cucumber::Messages::Ci

DESCRIPTION

Represents the Ci message in Cucumber's message protocol.

CI environment

ATTRIBUTES

name

Name of the CI product, e.g. "Jenkins", "CircleCI" etc.

url

Link to the build

build_number

The build number. Some CI servers use non-numeric build numbers, which is why this is a string

git

Cucumber::Messages::Git

DESCRIPTION

Represents the Git message in Cucumber's message protocol.

Information about Git, provided by the Build/CI server as environment variables.

ATTRIBUTES

remote

revision

branch

tag

Cucumber::Messages::Product

DESCRIPTION

Represents the Product message in Cucumber's message protocol.

Used to describe various properties of Meta

ATTRIBUTES

name

The product name

version

The product version

Cucumber::Messages::ParameterType

DESCRIPTION

Represents the ParameterType message in Cucumber's message protocol.

ATTRIBUTES

name

The name is unique, so we don't need an id.

regular_expressions

prefer_for_regular_expression_match

use_for_snippets

id

Cucumber::Messages::ParseError

DESCRIPTION

Represents the ParseError message in Cucumber's message protocol.

ATTRIBUTES

source

message

Cucumber::Messages::Pickle

DESCRIPTION

Represents the Pickle message in Cucumber's message protocol.

//// Pickles

* A `Pickle` represents a template for a `TestCase`. It is typically derived from another format, such as [GherkinDocument](#io.cucumber.messages.GherkinDocument). In the future a `Pickle` may be derived from other formats such as Markdown or Excel files.

 By making `Pickle` the main data structure Cucumber uses for execution, the
 implementation of Cucumber itself becomes simpler, as it doesn't have to deal
 with the complex structure of a [GherkinDocument](#io.cucumber.messages.GherkinDocument).

 Each `PickleStep` of a `Pickle` is matched with a `StepDefinition` to create a `TestCase`

ATTRIBUTES

id

* A unique id for the pickle

uri

The uri of the source file

name

The name of the pickle

language

The language of the pickle

steps

One or more steps

tags

* One or more tags. If this pickle is constructed from a Gherkin document, It includes inherited tags from the `Feature` as well.

ast_node_ids

* Points to the AST node locations of the pickle. The last one represents the unique id of the pickle. A pickle constructed from `Examples` will have the first id originating from the `Scenario` AST node, and the second from the `TableRow` AST node.

Cucumber::Messages::PickleDocString

DESCRIPTION

Represents the PickleDocString message in Cucumber's message protocol.

ATTRIBUTES

media_type

content

Cucumber::Messages::PickleStep

DESCRIPTION

Represents the PickleStep message in Cucumber's message protocol.

* An executable step

ATTRIBUTES

argument

ast_node_ids

References the IDs of the source of the step. For Gherkin, this can be the ID of a Step, and possibly also the ID of a TableRow

id

A unique ID for the PickleStep

text

Cucumber::Messages::PickleStepArgument

DESCRIPTION

Represents the PickleStepArgument message in Cucumber's message protocol.

An optional argument

ATTRIBUTES

doc_string

data_table

Cucumber::Messages::PickleTable

DESCRIPTION

Represents the PickleTable message in Cucumber's message protocol.

ATTRIBUTES

rows

Cucumber::Messages::PickleTableCell

DESCRIPTION

Represents the PickleTableCell message in Cucumber's message protocol.

ATTRIBUTES

value

Cucumber::Messages::PickleTableRow

DESCRIPTION

Represents the PickleTableRow message in Cucumber's message protocol.

ATTRIBUTES

cells

Cucumber::Messages::PickleTag

DESCRIPTION

Represents the PickleTag message in Cucumber's message protocol.

* A tag

ATTRIBUTES

name

ast_node_id

Points to the AST node this was created from

Cucumber::Messages::Source

DESCRIPTION

Represents the Source message in Cucumber's message protocol.

//// Source

* A source file, typically a Gherkin document or Java/Ruby/JavaScript source code

ATTRIBUTES

uri

* The [URI](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier) of the source, typically a file path relative to the root directory

data

The contents of the file

media_type

The media type of the file. Can be used to specify custom types, such as text/x.cucumber.gherkin+plain

Available constants for valid values of this field:

  • MEDIATYPE_TEXT_X_CUCUMBER_GHERKIN_PLAIN

  • MEDIATYPE_TEXT_X_CUCUMBER_GHERKIN_MARKDOWN

Cucumber::Messages::SourceReference

DESCRIPTION

Represents the SourceReference message in Cucumber's message protocol.

* Points to a [Source](#io.cucumber.messages.Source) identified by `uri` and a [Location](#io.cucumber.messages.Location) within that file.

ATTRIBUTES

uri

java_method

java_stack_trace_element

location

Cucumber::Messages::JavaMethod

DESCRIPTION

Represents the JavaMethod message in Cucumber's message protocol.

ATTRIBUTES

class_name

method_name

method_parameter_types

Cucumber::Messages::JavaStackTraceElement

DESCRIPTION

Represents the JavaStackTraceElement message in Cucumber's message protocol.

ATTRIBUTES

class_name

file_name

method_name

Cucumber::Messages::StepDefinition

DESCRIPTION

Represents the StepDefinition message in Cucumber's message protocol.

ATTRIBUTES

id

pattern

source_reference

Cucumber::Messages::StepDefinitionPattern

DESCRIPTION

Represents the StepDefinitionPattern message in Cucumber's message protocol.

ATTRIBUTES

source

type

Available constants for valid values of this field:

  • TYPE_CUCUMBER_EXPRESSION

  • TYPE_REGULAR_EXPRESSION

Cucumber::Messages::TestCase

DESCRIPTION

Represents the TestCase message in Cucumber's message protocol.

//// TestCases

* A `TestCase` contains a sequence of `TestStep`s.

ATTRIBUTES

id

pickle_id

The ID of the `Pickle` this `TestCase` is derived from.

test_steps

Cucumber::Messages::Group

DESCRIPTION

Represents the Group message in Cucumber's message protocol.

ATTRIBUTES

children

start

value

Cucumber::Messages::StepMatchArgument

DESCRIPTION

Represents the StepMatchArgument message in Cucumber's message protocol.

* Represents a single argument extracted from a step match and passed to a step definition. This is used for the following purposes: - Construct an argument to pass to a step definition (possibly through a parameter type transform) - Highlight the matched parameter in rich formatters such as the HTML formatter

 This message closely matches the `Argument` class in the `cucumber-expressions` library.

ATTRIBUTES

group

* Represents the outermost capture group of an argument. This message closely matches the `Group` class in the `cucumber-expressions` library.

parameter_type_name

Cucumber::Messages::StepMatchArgumentsList

DESCRIPTION

Represents the StepMatchArgumentsList message in Cucumber's message protocol.

ATTRIBUTES

step_match_arguments

Cucumber::Messages::TestStep

DESCRIPTION

Represents the TestStep message in Cucumber's message protocol.

* A `TestStep` is derived from either a `PickleStep` combined with a `StepDefinition`, or from a `Hook`.

ATTRIBUTES

hook_id

Pointer to the `Hook` (if derived from a Hook)

id

pickle_step_id

Pointer to the `PickleStep` (if derived from a `PickleStep`)

step_definition_ids

Pointer to all the matching `StepDefinition`s (if derived from a `PickleStep`)

step_match_arguments_lists

A list of list of StepMatchArgument (if derived from a `PickleStep`). Each element represents a matching step definition. A size of 0 means `UNDEFINED`, and a size of 2+ means `AMBIGUOUS`

Cucumber::Messages::TestCaseFinished

DESCRIPTION

Represents the TestCaseFinished message in Cucumber's message protocol.

ATTRIBUTES

test_case_started_id

timestamp

will_be_retried

Cucumber::Messages::TestCaseStarted

DESCRIPTION

Represents the TestCaseStarted message in Cucumber's message protocol.

ATTRIBUTES

attempt

* The first attempt should have value 0, and for each retry the value should increase by 1.

id

* Because a `TestCase` can be run multiple times (in case of a retry), we use this field to group messages relating to the same attempt.

test_case_id

timestamp

Cucumber::Messages::TestRunFinished

DESCRIPTION

Represents the TestRunFinished message in Cucumber's message protocol.

ATTRIBUTES

message

Error message. Can be a stack trace from a failed `BeforeAll` or `AfterAll`. If there are undefined parameter types, the message is simply "The following parameter type(s() are not defined: xxx, yyy". The independent `UndefinedParameterType` messages can be used to generate snippets for those parameter types.

success

success = StrictModeEnabled ? (failed_count == 0 && ambiguous_count == 0 && undefined_count == 0 && pending_count == 0) : (failed_count == 0 && ambiguous_count == 0)

timestamp

Timestamp when the TestRun is finished

Cucumber::Messages::TestRunStarted

DESCRIPTION

Represents the TestRunStarted message in Cucumber's message protocol.

ATTRIBUTES

timestamp

Cucumber::Messages::TestStepFinished

DESCRIPTION

Represents the TestStepFinished message in Cucumber's message protocol.

ATTRIBUTES

test_case_started_id

test_step_id

test_step_result

timestamp

Cucumber::Messages::TestStepResult

DESCRIPTION

Represents the TestStepResult message in Cucumber's message protocol.

ATTRIBUTES

duration

message

status

Available constants for valid values of this field:

  • STATUS_UNKNOWN

  • STATUS_PASSED

  • STATUS_SKIPPED

  • STATUS_PENDING

  • STATUS_UNDEFINED

  • STATUS_AMBIGUOUS

  • STATUS_FAILED

Cucumber::Messages::TestStepStarted

DESCRIPTION

Represents the TestStepStarted message in Cucumber's message protocol.

ATTRIBUTES

test_case_started_id

test_step_id

timestamp

Cucumber::Messages::Timestamp

DESCRIPTION

Represents the Timestamp message in Cucumber's message protocol.

ATTRIBUTES

seconds

Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.

nanos

Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive.

Cucumber::Messages::UndefinedParameterType

DESCRIPTION

Represents the UndefinedParameterType message in Cucumber's message protocol.

ATTRIBUTES

expression

name

LICENSE

Please see the included LICENSE for the canonical version. In summary:

The MIT License (MIT)

  Copyright (c) 2021 Erik Huelsmann
  Copyright (c) 2021 Cucumber Ltd

This work is loosely derived from prior work of the same library for Ruby, called cucumber-messages.