File Coverage

blib/lib/Cucumber/Messages.pm
Criterion Covered Total %
statement 357 412 86.6
branch n/a
condition n/a
subroutine 119 174 68.3
pod n/a
total 476 586 81.2


line stmt bran cond sub pod time code
1             package Cucumber::Messages;
2             $Cucumber::Messages::VERSION = '21.0.0';
3             # DO NOT CHANGE THIS FILE!!
4              
5             # The code was auto-generated by this script:
6             # https://github.com/cucumber/messages/blob/main/jsonschema/scripts/codegen.rb
7              
8             =head1 NAME
9              
10             Cucumber::Messages - Library of classes to encapsulate Cucumber messages
11              
12             =head1 SYNOPSIS
13              
14             use Cucumber::Messages;
15              
16             my $loc = Cucumber::Messages::Location->new(
17             line => 12, column => 26
18             );
19             my $loc_json = $loc->to_json;
20              
21             my $envelope = Cucumber::Messages::Envelope->from_json($serialized_envelope);
22              
23             =head1 DESCRIPTION
24              
25             L
26             define the central protocol in the Cucumber ecosystem by which the various
27             components communicate. Messages are serialized to NDJSON.
28              
29             This library provides both serialization/deserialization to/from NDJSON as
30             well as the in-memory representation of the messages for Perl applications.
31              
32             Each serialized message should be wrapped in a C
33             and can thereby be deserialized by calling the C class message
34             with the serialized representation as its argument, like shown in the SYNOPSIS.
35              
36             =cut
37              
38 3     3   481031 use strict;
  3         17  
  3         90  
39 3     3   15 use warnings;
  3         7  
  3         74  
40              
41 3     3   848 use Cucumber::Messages::Message;
  3         19  
  3         163  
42              
43             =head1 MESSAGE CLASSES
44              
45             =cut
46              
47              
48              
49             package Cucumber::Messages::Attachment {
50             $Cucumber::Messages::Attachment::VERSION = '21.0.0';
51             =head2 Cucumber::Messages::Attachment
52              
53             =head3 DESCRIPTION
54              
55             Represents the Attachment message in Cucumber's
56             L.
57              
58             //// Attachments (parse errors, execution errors, screenshots, links...)
59              
60             *
61             An attachment represents any kind of data associated with a line in a
62             [Source](#io.cucumber.messages.Source) file. It can be used for:
63              
64             * Syntax errors during parse time
65             * Screenshots captured and attached during execution
66             * Logs captured and attached during execution
67              
68             It is not to be used for runtime errors raised/thrown during execution. This
69             is captured in `TestResult`.
70              
71             =head3 ATTRIBUTES
72              
73             =cut
74              
75 3     3   43 use Moo;
  3         6  
  3         16  
76             extends 'Cucumber::Messages::Message';
77              
78 3     3   964 use Scalar::Util qw( blessed );
  3         21  
  3         467  
79              
80             my %types = (
81             body => 'string',
82             content_encoding => '',
83             file_name => 'string',
84             media_type => 'string',
85             source => 'Cucumber::Messages::Source',
86             test_case_started_id => 'string',
87             test_step_id => 'string',
88             url => 'string',
89             );
90              
91             # This is a work-around for the fact that Moo doesn't have introspection
92             # and Perl doesn't have boolean values...
93             sub _types {
94 0     0     return \%types;
95             }
96              
97              
98              
99             =head4 body
100              
101             *
102             The body of the attachment. If `contentEncoding` is `IDENTITY`, the attachment
103             is simply the string. If it's `BASE64`, the string should be Base64 decoded to
104             obtain the attachment.
105              
106             =cut
107              
108             has body =>
109             (is => 'ro',
110             required => 1,
111             default => sub { '' },
112             );
113              
114              
115             =head4 content_encoding
116              
117             *
118             Whether to interpret `body` "as-is" (IDENTITY) or if it needs to be Base64-decoded (BASE64).
119              
120             Content encoding is *not* determined by the media type, but rather by the type
121             of the object being attached:
122              
123             - string => IDENTITY
124             - byte array => BASE64
125             - stream => BASE64
126              
127              
128             Available constants for valid values of this field:
129              
130             =over
131              
132             =item * CONTENTENCODING_IDENTITY
133              
134             =item * CONTENTENCODING_BASE64
135              
136             =back
137              
138             =cut
139              
140              
141             use constant {
142 3         672 CONTENTENCODING_IDENTITY => 'IDENTITY',
143             CONTENTENCODING_BASE64 => 'BASE64',
144 3     3   22 };
  3         15  
145              
146             has content_encoding =>
147             (is => 'ro',
148             required => 1,
149             default => sub { CONTENTENCODING_IDENTITY },
150             );
151              
152              
153             =head4 file_name
154              
155             *
156             Suggested file name of the attachment. (Provided by the user as an argument to `attach`)
157              
158             =cut
159              
160             has file_name =>
161             (is => 'ro',
162             );
163              
164              
165             =head4 media_type
166              
167             *
168             The media type of the data. This can be any valid
169             [IANA Media Type](https://www.iana.org/assignments/media-types/media-types.xhtml)
170             as well as Cucumber-specific media types such as `text/x.cucumber.gherkin+plain`
171             and `text/x.cucumber.stacktrace+plain`
172              
173             =cut
174              
175             has media_type =>
176             (is => 'ro',
177             required => 1,
178             default => sub { '' },
179             );
180              
181              
182             =head4 source
183              
184              
185             =cut
186              
187             has source =>
188             (is => 'ro',
189             );
190              
191              
192             =head4 test_case_started_id
193              
194              
195             =cut
196              
197             has test_case_started_id =>
198             (is => 'ro',
199             );
200              
201              
202             =head4 test_step_id
203              
204              
205             =cut
206              
207             has test_step_id =>
208             (is => 'ro',
209             );
210              
211              
212             =head4 url
213              
214             *
215             A URL where the attachment can be retrieved. This field should not be set by Cucumber.
216             It should be set by a program that reads a message stream and does the following for
217             each Attachment message:
218              
219             - Writes the body (after base64 decoding if necessary) to a new file.
220             - Sets `body` and `contentEncoding` to `null`
221             - Writes out the new attachment message
222              
223             This will result in a smaller message stream, which can improve performance and
224             reduce bandwidth of message consumers. It also makes it easier to process and download attachments
225             separately from reports.
226              
227             =cut
228              
229             has url =>
230             (is => 'ro',
231             );
232              
233              
234             }
235              
236             package Cucumber::Messages::Duration {
237             $Cucumber::Messages::Duration::VERSION = '21.0.0';
238             =head2 Cucumber::Messages::Duration
239              
240             =head3 DESCRIPTION
241              
242             Represents the Duration message in Cucumber's
243             L.
244              
245             The structure is pretty close of the Timestamp one. For clarity, a second type
246             of message is used.
247              
248             =head3 ATTRIBUTES
249              
250             =cut
251              
252 3     3   31 use Moo;
  3         6  
  3         13  
253             extends 'Cucumber::Messages::Message';
254              
255 3     3   1041 use Scalar::Util qw( blessed );
  3         14  
  3         472  
256              
257             my %types = (
258             seconds => 'number',
259             nanos => 'number',
260             );
261              
262             # This is a work-around for the fact that Moo doesn't have introspection
263             # and Perl doesn't have boolean values...
264             sub _types {
265 0     0     return \%types;
266             }
267              
268              
269              
270             =head4 seconds
271              
272              
273             =cut
274              
275             has seconds =>
276             (is => 'ro',
277             required => 1,
278             default => sub { 0 },
279             );
280              
281              
282             =head4 nanos
283              
284             Non-negative fractions of a second at nanosecond resolution. Negative
285             second values with fractions must still have non-negative nanos values
286             that count forward in time. Must be from 0 to 999,999,999
287             inclusive.
288              
289             =cut
290              
291             has nanos =>
292             (is => 'ro',
293             required => 1,
294             default => sub { 0 },
295             );
296              
297              
298             }
299              
300             package Cucumber::Messages::Envelope {
301             $Cucumber::Messages::Envelope::VERSION = '21.0.0';
302             =head2 Cucumber::Messages::Envelope
303              
304             =head3 DESCRIPTION
305              
306             Represents the Envelope message in Cucumber's
307             L.
308              
309             When removing a field, replace it with reserved, rather than deleting the line.
310             When adding a field, add it to the end and increment the number by one.
311             See https://developers.google.com/protocol-buffers/docs/proto#updating for details
312              
313             *
314             All the messages that are passed between different components/processes are Envelope
315             messages.
316              
317             =head3 ATTRIBUTES
318              
319             =cut
320              
321 3     3   23 use Moo;
  3         6  
  3         13  
322             extends 'Cucumber::Messages::Message';
323              
324 3     3   1074 use Scalar::Util qw( blessed );
  3         8  
  3         950  
325              
326             my %types = (
327             attachment => 'Cucumber::Messages::Attachment',
328             gherkin_document => 'Cucumber::Messages::GherkinDocument',
329             hook => 'Cucumber::Messages::Hook',
330             meta => 'Cucumber::Messages::Meta',
331             parameter_type => 'Cucumber::Messages::ParameterType',
332             parse_error => 'Cucumber::Messages::ParseError',
333             pickle => 'Cucumber::Messages::Pickle',
334             source => 'Cucumber::Messages::Source',
335             step_definition => 'Cucumber::Messages::StepDefinition',
336             test_case => 'Cucumber::Messages::TestCase',
337             test_case_finished => 'Cucumber::Messages::TestCaseFinished',
338             test_case_started => 'Cucumber::Messages::TestCaseStarted',
339             test_run_finished => 'Cucumber::Messages::TestRunFinished',
340             test_run_started => 'Cucumber::Messages::TestRunStarted',
341             test_step_finished => 'Cucumber::Messages::TestStepFinished',
342             test_step_started => 'Cucumber::Messages::TestStepStarted',
343             undefined_parameter_type => 'Cucumber::Messages::UndefinedParameterType',
344             );
345              
346             # This is a work-around for the fact that Moo doesn't have introspection
347             # and Perl doesn't have boolean values...
348             sub _types {
349 0     0     return \%types;
350             }
351              
352              
353              
354             =head4 attachment
355              
356              
357             =cut
358              
359             has attachment =>
360             (is => 'ro',
361             );
362              
363              
364             =head4 gherkin_document
365              
366              
367             =cut
368              
369             has gherkin_document =>
370             (is => 'ro',
371             );
372              
373              
374             =head4 hook
375              
376              
377             =cut
378              
379             has hook =>
380             (is => 'ro',
381             );
382              
383              
384             =head4 meta
385              
386              
387             =cut
388              
389             has meta =>
390             (is => 'ro',
391             );
392              
393              
394             =head4 parameter_type
395              
396              
397             =cut
398              
399             has parameter_type =>
400             (is => 'ro',
401             );
402              
403              
404             =head4 parse_error
405              
406              
407             =cut
408              
409             has parse_error =>
410             (is => 'ro',
411             );
412              
413              
414             =head4 pickle
415              
416              
417             =cut
418              
419             has pickle =>
420             (is => 'ro',
421             );
422              
423              
424             =head4 source
425              
426              
427             =cut
428              
429             has source =>
430             (is => 'ro',
431             );
432              
433              
434             =head4 step_definition
435              
436              
437             =cut
438              
439             has step_definition =>
440             (is => 'ro',
441             );
442              
443              
444             =head4 test_case
445              
446              
447             =cut
448              
449             has test_case =>
450             (is => 'ro',
451             );
452              
453              
454             =head4 test_case_finished
455              
456              
457             =cut
458              
459             has test_case_finished =>
460             (is => 'ro',
461             );
462              
463              
464             =head4 test_case_started
465              
466              
467             =cut
468              
469             has test_case_started =>
470             (is => 'ro',
471             );
472              
473              
474             =head4 test_run_finished
475              
476              
477             =cut
478              
479             has test_run_finished =>
480             (is => 'ro',
481             );
482              
483              
484             =head4 test_run_started
485              
486              
487             =cut
488              
489             has test_run_started =>
490             (is => 'ro',
491             );
492              
493              
494             =head4 test_step_finished
495              
496              
497             =cut
498              
499             has test_step_finished =>
500             (is => 'ro',
501             );
502              
503              
504             =head4 test_step_started
505              
506              
507             =cut
508              
509             has test_step_started =>
510             (is => 'ro',
511             );
512              
513              
514             =head4 undefined_parameter_type
515              
516              
517             =cut
518              
519             has undefined_parameter_type =>
520             (is => 'ro',
521             );
522              
523              
524             }
525              
526             package Cucumber::Messages::Exception {
527             $Cucumber::Messages::Exception::VERSION = '21.0.0';
528             =head2 Cucumber::Messages::Exception
529              
530             =head3 DESCRIPTION
531              
532             Represents the Exception message in Cucumber's
533             L.
534              
535             A simplified representation of an exception
536              
537             =head3 ATTRIBUTES
538              
539             =cut
540              
541 3     3   29 use Moo;
  3         15  
  3         14  
542             extends 'Cucumber::Messages::Message';
543              
544 3     3   993 use Scalar::Util qw( blessed );
  3         6  
  3         466  
545              
546             my %types = (
547             type => 'string',
548             message => 'string',
549             );
550              
551             # This is a work-around for the fact that Moo doesn't have introspection
552             # and Perl doesn't have boolean values...
553             sub _types {
554 0     0     return \%types;
555             }
556              
557              
558              
559             =head4 type
560              
561             The type of the exception that caused this result. E.g. "Error" or "org.opentest4j.AssertionFailedError"
562              
563             =cut
564              
565             has type =>
566             (is => 'ro',
567             required => 1,
568             default => sub { '' },
569             );
570              
571              
572             =head4 message
573              
574             The message of exception that caused this result. E.g. expected: <"a"> but was: <"b">
575              
576             =cut
577              
578             has message =>
579             (is => 'ro',
580             );
581              
582              
583             }
584              
585             package Cucumber::Messages::GherkinDocument {
586             $Cucumber::Messages::GherkinDocument::VERSION = '21.0.0';
587             =head2 Cucumber::Messages::GherkinDocument
588              
589             =head3 DESCRIPTION
590              
591             Represents the GherkinDocument message in Cucumber's
592             L.
593              
594             *
595             The [AST](https://en.wikipedia.org/wiki/Abstract_syntax_tree) of a Gherkin document.
596             Cucumber implementations should *not* depend on `GherkinDocument` or any of its
597             children for execution - use [Pickle](#io.cucumber.messages.Pickle) instead.
598              
599             The only consumers of `GherkinDocument` should only be formatters that produce
600             "rich" output, resembling the original Gherkin document.
601              
602             =head3 ATTRIBUTES
603              
604             =cut
605              
606 3     3   46 use Moo;
  3         6  
  3         14  
607             extends 'Cucumber::Messages::Message';
608              
609 3     3   948 use Scalar::Util qw( blessed );
  3         6  
  3         485  
610              
611             my %types = (
612             uri => 'string',
613             feature => 'Cucumber::Messages::Feature',
614             comments => '[]Cucumber::Messages::Comment',
615             );
616              
617             # This is a work-around for the fact that Moo doesn't have introspection
618             # and Perl doesn't have boolean values...
619             sub _types {
620 0     0     return \%types;
621             }
622              
623              
624              
625             =head4 uri
626              
627             *
628             The [URI](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier)
629             of the source, typically a file path relative to the root directory
630              
631             =cut
632              
633             has uri =>
634             (is => 'ro',
635             );
636              
637              
638             =head4 feature
639              
640              
641             =cut
642              
643             has feature =>
644             (is => 'ro',
645             );
646              
647              
648             =head4 comments
649              
650             All the comments in the Gherkin document
651              
652             =cut
653              
654             has comments =>
655             (is => 'ro',
656             required => 1,
657             default => sub { [] },
658             );
659              
660              
661             }
662              
663             package Cucumber::Messages::Background {
664             $Cucumber::Messages::Background::VERSION = '21.0.0';
665             =head2 Cucumber::Messages::Background
666              
667             =head3 DESCRIPTION
668              
669             Represents the Background message in Cucumber's
670             L.
671              
672              
673              
674             =head3 ATTRIBUTES
675              
676             =cut
677              
678 3     3   31 use Moo;
  3         8  
  3         15  
679             extends 'Cucumber::Messages::Message';
680              
681 3     3   992 use Scalar::Util qw( blessed );
  3         31  
  3         918  
682              
683             my %types = (
684             location => 'Cucumber::Messages::Location',
685             keyword => 'string',
686             name => 'string',
687             description => 'string',
688             steps => '[]Cucumber::Messages::Step',
689             id => 'string',
690             );
691              
692             # This is a work-around for the fact that Moo doesn't have introspection
693             # and Perl doesn't have boolean values...
694             sub _types {
695 0     0     return \%types;
696             }
697              
698              
699              
700             =head4 location
701              
702             The location of the `Background` keyword
703              
704             =cut
705              
706             has location =>
707             (is => 'ro',
708             required => 1,
709             default => sub { Cucumber::Messages::Location->new() },
710             );
711              
712              
713             =head4 keyword
714              
715              
716             =cut
717              
718             has keyword =>
719             (is => 'ro',
720             required => 1,
721             default => sub { '' },
722             );
723              
724              
725             =head4 name
726              
727              
728             =cut
729              
730             has name =>
731             (is => 'ro',
732             required => 1,
733             default => sub { '' },
734             );
735              
736              
737             =head4 description
738              
739              
740             =cut
741              
742             has description =>
743             (is => 'ro',
744             required => 1,
745             default => sub { '' },
746             );
747              
748              
749             =head4 steps
750              
751              
752             =cut
753              
754             has steps =>
755             (is => 'ro',
756             required => 1,
757             default => sub { [] },
758             );
759              
760              
761             =head4 id
762              
763              
764             =cut
765              
766             has id =>
767             (is => 'ro',
768             required => 1,
769             default => sub { '' },
770             );
771              
772              
773             }
774              
775             package Cucumber::Messages::Comment {
776             $Cucumber::Messages::Comment::VERSION = '21.0.0';
777             =head2 Cucumber::Messages::Comment
778              
779             =head3 DESCRIPTION
780              
781             Represents the Comment message in Cucumber's
782             L.
783              
784             *
785             A comment in a Gherkin document
786              
787             =head3 ATTRIBUTES
788              
789             =cut
790              
791 3     3   21 use Moo;
  3         6  
  3         44  
792             extends 'Cucumber::Messages::Message';
793              
794 3     3   957 use Scalar::Util qw( blessed );
  3         6  
  3         583  
795              
796             my %types = (
797             location => 'Cucumber::Messages::Location',
798             text => 'string',
799             );
800              
801             # This is a work-around for the fact that Moo doesn't have introspection
802             # and Perl doesn't have boolean values...
803             sub _types {
804 0     0     return \%types;
805             }
806              
807              
808              
809             =head4 location
810              
811             The location of the comment
812              
813             =cut
814              
815             has location =>
816             (is => 'ro',
817             required => 1,
818             default => sub { Cucumber::Messages::Location->new() },
819             );
820              
821              
822             =head4 text
823              
824             The text of the comment
825              
826             =cut
827              
828             has text =>
829             (is => 'ro',
830             required => 1,
831             default => sub { '' },
832             );
833              
834              
835             }
836              
837             package Cucumber::Messages::DataTable {
838             $Cucumber::Messages::DataTable::VERSION = '21.0.0';
839             =head2 Cucumber::Messages::DataTable
840              
841             =head3 DESCRIPTION
842              
843             Represents the DataTable message in Cucumber's
844             L.
845              
846              
847              
848             =head3 ATTRIBUTES
849              
850             =cut
851              
852 3     3   24 use Moo;
  3         4  
  3         14  
853             extends 'Cucumber::Messages::Message';
854              
855 3     3   933 use Scalar::Util qw( blessed );
  3         6  
  3         512  
856              
857             my %types = (
858             location => 'Cucumber::Messages::Location',
859             rows => '[]Cucumber::Messages::TableRow',
860             );
861              
862             # This is a work-around for the fact that Moo doesn't have introspection
863             # and Perl doesn't have boolean values...
864             sub _types {
865 0     0     return \%types;
866             }
867              
868              
869              
870             =head4 location
871              
872              
873             =cut
874              
875             has location =>
876             (is => 'ro',
877             required => 1,
878             default => sub { Cucumber::Messages::Location->new() },
879             );
880              
881              
882             =head4 rows
883              
884              
885             =cut
886              
887             has rows =>
888             (is => 'ro',
889             required => 1,
890             default => sub { [] },
891             );
892              
893              
894             }
895              
896             package Cucumber::Messages::DocString {
897             $Cucumber::Messages::DocString::VERSION = '21.0.0';
898             =head2 Cucumber::Messages::DocString
899              
900             =head3 DESCRIPTION
901              
902             Represents the DocString message in Cucumber's
903             L.
904              
905              
906              
907             =head3 ATTRIBUTES
908              
909             =cut
910              
911 3     3   21 use Moo;
  3         6  
  3         13  
912             extends 'Cucumber::Messages::Message';
913              
914 3     3   997 use Scalar::Util qw( blessed );
  3         6  
  3         743  
915              
916             my %types = (
917             location => 'Cucumber::Messages::Location',
918             media_type => 'string',
919             content => 'string',
920             delimiter => 'string',
921             );
922              
923             # This is a work-around for the fact that Moo doesn't have introspection
924             # and Perl doesn't have boolean values...
925             sub _types {
926 0     0     return \%types;
927             }
928              
929              
930              
931             =head4 location
932              
933              
934             =cut
935              
936             has location =>
937             (is => 'ro',
938             required => 1,
939             default => sub { Cucumber::Messages::Location->new() },
940             );
941              
942              
943             =head4 media_type
944              
945              
946             =cut
947              
948             has media_type =>
949             (is => 'ro',
950             );
951              
952              
953             =head4 content
954              
955              
956             =cut
957              
958             has content =>
959             (is => 'ro',
960             required => 1,
961             default => sub { '' },
962             );
963              
964              
965             =head4 delimiter
966              
967              
968             =cut
969              
970             has delimiter =>
971             (is => 'ro',
972             required => 1,
973             default => sub { '' },
974             );
975              
976              
977             }
978              
979             package Cucumber::Messages::Examples {
980             $Cucumber::Messages::Examples::VERSION = '21.0.0';
981             =head2 Cucumber::Messages::Examples
982              
983             =head3 DESCRIPTION
984              
985             Represents the Examples message in Cucumber's
986             L.
987              
988              
989              
990             =head3 ATTRIBUTES
991              
992             =cut
993              
994 3     3   23 use Moo;
  3         5  
  3         12  
995             extends 'Cucumber::Messages::Message';
996              
997 3     3   959 use Scalar::Util qw( blessed );
  3         9  
  3         996  
998              
999             my %types = (
1000             location => 'Cucumber::Messages::Location',
1001             tags => '[]Cucumber::Messages::Tag',
1002             keyword => 'string',
1003             name => 'string',
1004             description => 'string',
1005             table_header => 'Cucumber::Messages::TableRow',
1006             table_body => '[]Cucumber::Messages::TableRow',
1007             id => 'string',
1008             );
1009              
1010             # This is a work-around for the fact that Moo doesn't have introspection
1011             # and Perl doesn't have boolean values...
1012             sub _types {
1013 0     0     return \%types;
1014             }
1015              
1016              
1017              
1018             =head4 location
1019              
1020             The location of the `Examples` keyword
1021              
1022             =cut
1023              
1024             has location =>
1025             (is => 'ro',
1026             required => 1,
1027             default => sub { Cucumber::Messages::Location->new() },
1028             );
1029              
1030              
1031             =head4 tags
1032              
1033              
1034             =cut
1035              
1036             has tags =>
1037             (is => 'ro',
1038             required => 1,
1039             default => sub { [] },
1040             );
1041              
1042              
1043             =head4 keyword
1044              
1045              
1046             =cut
1047              
1048             has keyword =>
1049             (is => 'ro',
1050             required => 1,
1051             default => sub { '' },
1052             );
1053              
1054              
1055             =head4 name
1056              
1057              
1058             =cut
1059              
1060             has name =>
1061             (is => 'ro',
1062             required => 1,
1063             default => sub { '' },
1064             );
1065              
1066              
1067             =head4 description
1068              
1069              
1070             =cut
1071              
1072             has description =>
1073             (is => 'ro',
1074             required => 1,
1075             default => sub { '' },
1076             );
1077              
1078              
1079             =head4 table_header
1080              
1081              
1082             =cut
1083              
1084             has table_header =>
1085             (is => 'ro',
1086             );
1087              
1088              
1089             =head4 table_body
1090              
1091              
1092             =cut
1093              
1094             has table_body =>
1095             (is => 'ro',
1096             required => 1,
1097             default => sub { [] },
1098             );
1099              
1100              
1101             =head4 id
1102              
1103              
1104             =cut
1105              
1106             has id =>
1107             (is => 'ro',
1108             required => 1,
1109             default => sub { '' },
1110             );
1111              
1112              
1113             }
1114              
1115             package Cucumber::Messages::Feature {
1116             $Cucumber::Messages::Feature::VERSION = '21.0.0';
1117             =head2 Cucumber::Messages::Feature
1118              
1119             =head3 DESCRIPTION
1120              
1121             Represents the Feature message in Cucumber's
1122             L.
1123              
1124              
1125              
1126             =head3 ATTRIBUTES
1127              
1128             =cut
1129              
1130 3     3   24 use Moo;
  3         12  
  3         13  
1131             extends 'Cucumber::Messages::Message';
1132              
1133 3     3   959 use Scalar::Util qw( blessed );
  3         26  
  3         980  
1134              
1135             my %types = (
1136             location => 'Cucumber::Messages::Location',
1137             tags => '[]Cucumber::Messages::Tag',
1138             language => 'string',
1139             keyword => 'string',
1140             name => 'string',
1141             description => 'string',
1142             children => '[]Cucumber::Messages::FeatureChild',
1143             );
1144              
1145             # This is a work-around for the fact that Moo doesn't have introspection
1146             # and Perl doesn't have boolean values...
1147             sub _types {
1148 0     0     return \%types;
1149             }
1150              
1151              
1152              
1153             =head4 location
1154              
1155             The location of the `Feature` keyword
1156              
1157             =cut
1158              
1159             has location =>
1160             (is => 'ro',
1161             required => 1,
1162             default => sub { Cucumber::Messages::Location->new() },
1163             );
1164              
1165              
1166             =head4 tags
1167              
1168             All the tags placed above the `Feature` keyword
1169              
1170             =cut
1171              
1172             has tags =>
1173             (is => 'ro',
1174             required => 1,
1175             default => sub { [] },
1176             );
1177              
1178              
1179             =head4 language
1180              
1181             The [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) language code of the Gherkin document
1182              
1183             =cut
1184              
1185             has language =>
1186             (is => 'ro',
1187             required => 1,
1188             default => sub { '' },
1189             );
1190              
1191              
1192             =head4 keyword
1193              
1194             The text of the `Feature` keyword (in the language specified by `language`)
1195              
1196             =cut
1197              
1198             has keyword =>
1199             (is => 'ro',
1200             required => 1,
1201             default => sub { '' },
1202             );
1203              
1204              
1205             =head4 name
1206              
1207             The name of the feature (the text following the `keyword`)
1208              
1209             =cut
1210              
1211             has name =>
1212             (is => 'ro',
1213             required => 1,
1214             default => sub { '' },
1215             );
1216              
1217              
1218             =head4 description
1219              
1220             The line(s) underneath the line with the `keyword` that are used as description
1221              
1222             =cut
1223              
1224             has description =>
1225             (is => 'ro',
1226             required => 1,
1227             default => sub { '' },
1228             );
1229              
1230              
1231             =head4 children
1232              
1233             Zero or more children
1234              
1235             =cut
1236              
1237             has children =>
1238             (is => 'ro',
1239             required => 1,
1240             default => sub { [] },
1241             );
1242              
1243              
1244             }
1245              
1246             package Cucumber::Messages::FeatureChild {
1247             $Cucumber::Messages::FeatureChild::VERSION = '21.0.0';
1248             =head2 Cucumber::Messages::FeatureChild
1249              
1250             =head3 DESCRIPTION
1251              
1252             Represents the FeatureChild message in Cucumber's
1253             L.
1254              
1255             *
1256             A child node of a `Feature` node
1257              
1258             =head3 ATTRIBUTES
1259              
1260             =cut
1261              
1262 3     3   21 use Moo;
  3         7  
  3         15  
1263             extends 'Cucumber::Messages::Message';
1264              
1265 3     3   1014 use Scalar::Util qw( blessed );
  3         6  
  3         454  
1266              
1267             my %types = (
1268             rule => 'Cucumber::Messages::Rule',
1269             background => 'Cucumber::Messages::Background',
1270             scenario => 'Cucumber::Messages::Scenario',
1271             );
1272              
1273             # This is a work-around for the fact that Moo doesn't have introspection
1274             # and Perl doesn't have boolean values...
1275             sub _types {
1276 0     0     return \%types;
1277             }
1278              
1279              
1280              
1281             =head4 rule
1282              
1283              
1284             =cut
1285              
1286             has rule =>
1287             (is => 'ro',
1288             );
1289              
1290              
1291             =head4 background
1292              
1293              
1294             =cut
1295              
1296             has background =>
1297             (is => 'ro',
1298             );
1299              
1300              
1301             =head4 scenario
1302              
1303              
1304             =cut
1305              
1306             has scenario =>
1307             (is => 'ro',
1308             );
1309              
1310              
1311             }
1312              
1313             package Cucumber::Messages::Rule {
1314             $Cucumber::Messages::Rule::VERSION = '21.0.0';
1315             =head2 Cucumber::Messages::Rule
1316              
1317             =head3 DESCRIPTION
1318              
1319             Represents the Rule message in Cucumber's
1320             L.
1321              
1322              
1323              
1324             =head3 ATTRIBUTES
1325              
1326             =cut
1327              
1328 3     3   43 use Moo;
  3         9  
  3         12  
1329             extends 'Cucumber::Messages::Message';
1330              
1331 3     3   961 use Scalar::Util qw( blessed );
  3         7  
  3         967  
1332              
1333             my %types = (
1334             location => 'Cucumber::Messages::Location',
1335             tags => '[]Cucumber::Messages::Tag',
1336             keyword => 'string',
1337             name => 'string',
1338             description => 'string',
1339             children => '[]Cucumber::Messages::RuleChild',
1340             id => 'string',
1341             );
1342              
1343             # This is a work-around for the fact that Moo doesn't have introspection
1344             # and Perl doesn't have boolean values...
1345             sub _types {
1346 0     0     return \%types;
1347             }
1348              
1349              
1350              
1351             =head4 location
1352              
1353             The location of the `Rule` keyword
1354              
1355             =cut
1356              
1357             has location =>
1358             (is => 'ro',
1359             required => 1,
1360             default => sub { Cucumber::Messages::Location->new() },
1361             );
1362              
1363              
1364             =head4 tags
1365              
1366             All the tags placed above the `Rule` keyword
1367              
1368             =cut
1369              
1370             has tags =>
1371             (is => 'ro',
1372             required => 1,
1373             default => sub { [] },
1374             );
1375              
1376              
1377             =head4 keyword
1378              
1379              
1380             =cut
1381              
1382             has keyword =>
1383             (is => 'ro',
1384             required => 1,
1385             default => sub { '' },
1386             );
1387              
1388              
1389             =head4 name
1390              
1391              
1392             =cut
1393              
1394             has name =>
1395             (is => 'ro',
1396             required => 1,
1397             default => sub { '' },
1398             );
1399              
1400              
1401             =head4 description
1402              
1403              
1404             =cut
1405              
1406             has description =>
1407             (is => 'ro',
1408             required => 1,
1409             default => sub { '' },
1410             );
1411              
1412              
1413             =head4 children
1414              
1415              
1416             =cut
1417              
1418             has children =>
1419             (is => 'ro',
1420             required => 1,
1421             default => sub { [] },
1422             );
1423              
1424              
1425             =head4 id
1426              
1427              
1428             =cut
1429              
1430             has id =>
1431             (is => 'ro',
1432             required => 1,
1433             default => sub { '' },
1434             );
1435              
1436              
1437             }
1438              
1439             package Cucumber::Messages::RuleChild {
1440             $Cucumber::Messages::RuleChild::VERSION = '21.0.0';
1441             =head2 Cucumber::Messages::RuleChild
1442              
1443             =head3 DESCRIPTION
1444              
1445             Represents the RuleChild message in Cucumber's
1446             L.
1447              
1448             *
1449             A child node of a `Rule` node
1450              
1451             =head3 ATTRIBUTES
1452              
1453             =cut
1454              
1455 3     3   24 use Moo;
  3         5  
  3         16  
1456             extends 'Cucumber::Messages::Message';
1457              
1458 3     3   971 use Scalar::Util qw( blessed );
  3         8  
  3         395  
1459              
1460             my %types = (
1461             background => 'Cucumber::Messages::Background',
1462             scenario => 'Cucumber::Messages::Scenario',
1463             );
1464              
1465             # This is a work-around for the fact that Moo doesn't have introspection
1466             # and Perl doesn't have boolean values...
1467             sub _types {
1468 0     0     return \%types;
1469             }
1470              
1471              
1472              
1473             =head4 background
1474              
1475              
1476             =cut
1477              
1478             has background =>
1479             (is => 'ro',
1480             );
1481              
1482              
1483             =head4 scenario
1484              
1485              
1486             =cut
1487              
1488             has scenario =>
1489             (is => 'ro',
1490             );
1491              
1492              
1493             }
1494              
1495             package Cucumber::Messages::Scenario {
1496             $Cucumber::Messages::Scenario::VERSION = '21.0.0';
1497             =head2 Cucumber::Messages::Scenario
1498              
1499             =head3 DESCRIPTION
1500              
1501             Represents the Scenario message in Cucumber's
1502             L.
1503              
1504              
1505              
1506             =head3 ATTRIBUTES
1507              
1508             =cut
1509              
1510 3     3   20 use Moo;
  3         6  
  3         26  
1511             extends 'Cucumber::Messages::Message';
1512              
1513 3     3   954 use Scalar::Util qw( blessed );
  3         9  
  3         1141  
1514              
1515             my %types = (
1516             location => 'Cucumber::Messages::Location',
1517             tags => '[]Cucumber::Messages::Tag',
1518             keyword => 'string',
1519             name => 'string',
1520             description => 'string',
1521             steps => '[]Cucumber::Messages::Step',
1522             examples => '[]Cucumber::Messages::Examples',
1523             id => 'string',
1524             );
1525              
1526             # This is a work-around for the fact that Moo doesn't have introspection
1527             # and Perl doesn't have boolean values...
1528             sub _types {
1529 0     0     return \%types;
1530             }
1531              
1532              
1533              
1534             =head4 location
1535              
1536             The location of the `Scenario` keyword
1537              
1538             =cut
1539              
1540             has location =>
1541             (is => 'ro',
1542             required => 1,
1543             default => sub { Cucumber::Messages::Location->new() },
1544             );
1545              
1546              
1547             =head4 tags
1548              
1549              
1550             =cut
1551              
1552             has tags =>
1553             (is => 'ro',
1554             required => 1,
1555             default => sub { [] },
1556             );
1557              
1558              
1559             =head4 keyword
1560              
1561              
1562             =cut
1563              
1564             has keyword =>
1565             (is => 'ro',
1566             required => 1,
1567             default => sub { '' },
1568             );
1569              
1570              
1571             =head4 name
1572              
1573              
1574             =cut
1575              
1576             has name =>
1577             (is => 'ro',
1578             required => 1,
1579             default => sub { '' },
1580             );
1581              
1582              
1583             =head4 description
1584              
1585              
1586             =cut
1587              
1588             has description =>
1589             (is => 'ro',
1590             required => 1,
1591             default => sub { '' },
1592             );
1593              
1594              
1595             =head4 steps
1596              
1597              
1598             =cut
1599              
1600             has steps =>
1601             (is => 'ro',
1602             required => 1,
1603             default => sub { [] },
1604             );
1605              
1606              
1607             =head4 examples
1608              
1609              
1610             =cut
1611              
1612             has examples =>
1613             (is => 'ro',
1614             required => 1,
1615             default => sub { [] },
1616             );
1617              
1618              
1619             =head4 id
1620              
1621              
1622             =cut
1623              
1624             has id =>
1625             (is => 'ro',
1626             required => 1,
1627             default => sub { '' },
1628             );
1629              
1630              
1631             }
1632              
1633             package Cucumber::Messages::Step {
1634             $Cucumber::Messages::Step::VERSION = '21.0.0';
1635             =head2 Cucumber::Messages::Step
1636              
1637             =head3 DESCRIPTION
1638              
1639             Represents the Step message in Cucumber's
1640             L.
1641              
1642             A step
1643              
1644             =head3 ATTRIBUTES
1645              
1646             =cut
1647              
1648 3     3   22 use Moo;
  3         5  
  3         13  
1649             extends 'Cucumber::Messages::Message';
1650              
1651 3     3   994 use Scalar::Util qw( blessed );
  3         6  
  3         545  
1652              
1653             my %types = (
1654             location => 'Cucumber::Messages::Location',
1655             keyword => 'string',
1656             keyword_type => '',
1657             text => 'string',
1658             doc_string => 'Cucumber::Messages::DocString',
1659             data_table => 'Cucumber::Messages::DataTable',
1660             id => 'string',
1661             );
1662              
1663             # This is a work-around for the fact that Moo doesn't have introspection
1664             # and Perl doesn't have boolean values...
1665             sub _types {
1666 0     0     return \%types;
1667             }
1668              
1669              
1670              
1671             =head4 location
1672              
1673             The location of the steps' `keyword`
1674              
1675             =cut
1676              
1677             has location =>
1678             (is => 'ro',
1679             required => 1,
1680             default => sub { Cucumber::Messages::Location->new() },
1681             );
1682              
1683              
1684             =head4 keyword
1685              
1686             The actual keyword as it appeared in the source.
1687              
1688             =cut
1689              
1690             has keyword =>
1691             (is => 'ro',
1692             required => 1,
1693             default => sub { '' },
1694             );
1695              
1696              
1697             =head4 keyword_type
1698              
1699             The test phase signalled by the keyword: Context definition (Given), Action performance (When), Outcome assertion (Then). Other keywords signal Continuation (And and But) from a prior keyword. Please note that all translations which a dialect maps to multiple keywords (`*` is in this category for all dialects), map to 'Unknown'.
1700              
1701              
1702             Available constants for valid values of this field:
1703              
1704             =over
1705              
1706             =item * KEYWORDTYPE_UNKNOWN
1707              
1708             =item * KEYWORDTYPE_CONTEXT
1709              
1710             =item * KEYWORDTYPE_ACTION
1711              
1712             =item * KEYWORDTYPE_OUTCOME
1713              
1714             =item * KEYWORDTYPE_CONJUNCTION
1715              
1716             =back
1717              
1718             =cut
1719              
1720              
1721             use constant {
1722 3         624 KEYWORDTYPE_UNKNOWN => 'Unknown',
1723             KEYWORDTYPE_CONTEXT => 'Context',
1724             KEYWORDTYPE_ACTION => 'Action',
1725             KEYWORDTYPE_OUTCOME => 'Outcome',
1726             KEYWORDTYPE_CONJUNCTION => 'Conjunction',
1727 3     3   23 };
  3         5  
1728              
1729             has keyword_type =>
1730             (is => 'ro',
1731             );
1732              
1733              
1734             =head4 text
1735              
1736              
1737             =cut
1738              
1739             has text =>
1740             (is => 'ro',
1741             required => 1,
1742             default => sub { '' },
1743             );
1744              
1745              
1746             =head4 doc_string
1747              
1748              
1749             =cut
1750              
1751             has doc_string =>
1752             (is => 'ro',
1753             );
1754              
1755              
1756             =head4 data_table
1757              
1758              
1759             =cut
1760              
1761             has data_table =>
1762             (is => 'ro',
1763             );
1764              
1765              
1766             =head4 id
1767              
1768             Unique ID to be able to reference the Step from PickleStep
1769              
1770             =cut
1771              
1772             has id =>
1773             (is => 'ro',
1774             required => 1,
1775             default => sub { '' },
1776             );
1777              
1778              
1779             }
1780              
1781             package Cucumber::Messages::TableCell {
1782             $Cucumber::Messages::TableCell::VERSION = '21.0.0';
1783             =head2 Cucumber::Messages::TableCell
1784              
1785             =head3 DESCRIPTION
1786              
1787             Represents the TableCell message in Cucumber's
1788             L.
1789              
1790             A cell in a `TableRow`
1791              
1792             =head3 ATTRIBUTES
1793              
1794             =cut
1795              
1796 3     3   24 use Moo;
  3         16  
  3         15  
1797             extends 'Cucumber::Messages::Message';
1798              
1799 3     3   964 use Scalar::Util qw( blessed );
  3         6  
  3         624  
1800              
1801             my %types = (
1802             location => 'Cucumber::Messages::Location',
1803             value => 'string',
1804             );
1805              
1806             # This is a work-around for the fact that Moo doesn't have introspection
1807             # and Perl doesn't have boolean values...
1808             sub _types {
1809 0     0     return \%types;
1810             }
1811              
1812              
1813              
1814             =head4 location
1815              
1816             The location of the cell
1817              
1818             =cut
1819              
1820             has location =>
1821             (is => 'ro',
1822             required => 1,
1823             default => sub { Cucumber::Messages::Location->new() },
1824             );
1825              
1826              
1827             =head4 value
1828              
1829             The value of the cell
1830              
1831             =cut
1832              
1833             has value =>
1834             (is => 'ro',
1835             required => 1,
1836             default => sub { '' },
1837             );
1838              
1839              
1840             }
1841              
1842             package Cucumber::Messages::TableRow {
1843             $Cucumber::Messages::TableRow::VERSION = '21.0.0';
1844             =head2 Cucumber::Messages::TableRow
1845              
1846             =head3 DESCRIPTION
1847              
1848             Represents the TableRow message in Cucumber's
1849             L.
1850              
1851             A row in a table
1852              
1853             =head3 ATTRIBUTES
1854              
1855             =cut
1856              
1857 3     3   22 use Moo;
  3         6  
  3         23  
1858             extends 'Cucumber::Messages::Message';
1859              
1860 3     3   963 use Scalar::Util qw( blessed );
  3         7  
  3         617  
1861              
1862             my %types = (
1863             location => 'Cucumber::Messages::Location',
1864             cells => '[]Cucumber::Messages::TableCell',
1865             id => 'string',
1866             );
1867              
1868             # This is a work-around for the fact that Moo doesn't have introspection
1869             # and Perl doesn't have boolean values...
1870             sub _types {
1871 0     0     return \%types;
1872             }
1873              
1874              
1875              
1876             =head4 location
1877              
1878             The location of the first cell in the row
1879              
1880             =cut
1881              
1882             has location =>
1883             (is => 'ro',
1884             required => 1,
1885             default => sub { Cucumber::Messages::Location->new() },
1886             );
1887              
1888              
1889             =head4 cells
1890              
1891             Cells in the row
1892              
1893             =cut
1894              
1895             has cells =>
1896             (is => 'ro',
1897             required => 1,
1898             default => sub { [] },
1899             );
1900              
1901              
1902             =head4 id
1903              
1904              
1905             =cut
1906              
1907             has id =>
1908             (is => 'ro',
1909             required => 1,
1910             default => sub { '' },
1911             );
1912              
1913              
1914             }
1915              
1916             package Cucumber::Messages::Tag {
1917             $Cucumber::Messages::Tag::VERSION = '21.0.0';
1918             =head2 Cucumber::Messages::Tag
1919              
1920             =head3 DESCRIPTION
1921              
1922             Represents the Tag message in Cucumber's
1923             L.
1924              
1925             *
1926             A tag
1927              
1928             =head3 ATTRIBUTES
1929              
1930             =cut
1931              
1932 3     3   22 use Moo;
  3         7  
  3         33  
1933             extends 'Cucumber::Messages::Message';
1934              
1935 3     3   958 use Scalar::Util qw( blessed );
  3         7  
  3         669  
1936              
1937             my %types = (
1938             location => 'Cucumber::Messages::Location',
1939             name => 'string',
1940             id => 'string',
1941             );
1942              
1943             # This is a work-around for the fact that Moo doesn't have introspection
1944             # and Perl doesn't have boolean values...
1945             sub _types {
1946 0     0     return \%types;
1947             }
1948              
1949              
1950              
1951             =head4 location
1952              
1953             Location of the tag
1954              
1955             =cut
1956              
1957             has location =>
1958             (is => 'ro',
1959             required => 1,
1960             default => sub { Cucumber::Messages::Location->new() },
1961             );
1962              
1963              
1964             =head4 name
1965              
1966             The name of the tag (including the leading `@`)
1967              
1968             =cut
1969              
1970             has name =>
1971             (is => 'ro',
1972             required => 1,
1973             default => sub { '' },
1974             );
1975              
1976              
1977             =head4 id
1978              
1979             Unique ID to be able to reference the Tag from PickleTag
1980              
1981             =cut
1982              
1983             has id =>
1984             (is => 'ro',
1985             required => 1,
1986             default => sub { '' },
1987             );
1988              
1989              
1990             }
1991              
1992             package Cucumber::Messages::Hook {
1993             $Cucumber::Messages::Hook::VERSION = '21.0.0';
1994             =head2 Cucumber::Messages::Hook
1995              
1996             =head3 DESCRIPTION
1997              
1998             Represents the Hook message in Cucumber's
1999             L.
2000              
2001              
2002              
2003             =head3 ATTRIBUTES
2004              
2005             =cut
2006              
2007 3     3   23 use Moo;
  3         4  
  3         14  
2008             extends 'Cucumber::Messages::Message';
2009              
2010 3     3   977 use Scalar::Util qw( blessed );
  3         5  
  3         665  
2011              
2012             my %types = (
2013             id => 'string',
2014             name => 'string',
2015             source_reference => 'Cucumber::Messages::SourceReference',
2016             tag_expression => 'string',
2017             );
2018              
2019             # This is a work-around for the fact that Moo doesn't have introspection
2020             # and Perl doesn't have boolean values...
2021             sub _types {
2022 0     0     return \%types;
2023             }
2024              
2025              
2026              
2027             =head4 id
2028              
2029              
2030             =cut
2031              
2032             has id =>
2033             (is => 'ro',
2034             required => 1,
2035             default => sub { '' },
2036             );
2037              
2038              
2039             =head4 name
2040              
2041              
2042             =cut
2043              
2044             has name =>
2045             (is => 'ro',
2046             );
2047              
2048              
2049             =head4 source_reference
2050              
2051              
2052             =cut
2053              
2054             has source_reference =>
2055             (is => 'ro',
2056             required => 1,
2057             default => sub { Cucumber::Messages::SourceReference->new() },
2058             );
2059              
2060              
2061             =head4 tag_expression
2062              
2063              
2064             =cut
2065              
2066             has tag_expression =>
2067             (is => 'ro',
2068             );
2069              
2070              
2071             }
2072              
2073             package Cucumber::Messages::Location {
2074             $Cucumber::Messages::Location::VERSION = '21.0.0';
2075             =head2 Cucumber::Messages::Location
2076              
2077             =head3 DESCRIPTION
2078              
2079             Represents the Location message in Cucumber's
2080             L.
2081              
2082             *
2083             Points to a line and a column in a text file
2084              
2085             =head3 ATTRIBUTES
2086              
2087             =cut
2088              
2089 3     3   30 use Moo;
  3         14  
  3         12  
2090             extends 'Cucumber::Messages::Message';
2091              
2092 3     3   1042 use Scalar::Util qw( blessed );
  3         6  
  3         431  
2093              
2094             my %types = (
2095             line => 'number',
2096             column => 'number',
2097             );
2098              
2099             # This is a work-around for the fact that Moo doesn't have introspection
2100             # and Perl doesn't have boolean values...
2101             sub _types {
2102 0     0     return \%types;
2103             }
2104              
2105              
2106              
2107             =head4 line
2108              
2109              
2110             =cut
2111              
2112             has line =>
2113             (is => 'ro',
2114             required => 1,
2115             default => sub { 0 },
2116             );
2117              
2118              
2119             =head4 column
2120              
2121              
2122             =cut
2123              
2124             has column =>
2125             (is => 'ro',
2126             );
2127              
2128              
2129             }
2130              
2131             package Cucumber::Messages::Meta {
2132             $Cucumber::Messages::Meta::VERSION = '21.0.0';
2133             =head2 Cucumber::Messages::Meta
2134              
2135             =head3 DESCRIPTION
2136              
2137             Represents the Meta message in Cucumber's
2138             L.
2139              
2140             *
2141             This message contains meta information about the environment. Consumers can use
2142             this for various purposes.
2143              
2144             =head3 ATTRIBUTES
2145              
2146             =cut
2147              
2148 3     3   21 use Moo;
  3         6  
  3         15  
2149             extends 'Cucumber::Messages::Message';
2150              
2151 3     3   978 use Scalar::Util qw( blessed );
  3         6  
  3         895  
2152              
2153             my %types = (
2154             protocol_version => 'string',
2155             implementation => 'Cucumber::Messages::Product',
2156             runtime => 'Cucumber::Messages::Product',
2157             os => 'Cucumber::Messages::Product',
2158             cpu => 'Cucumber::Messages::Product',
2159             ci => 'Cucumber::Messages::Ci',
2160             );
2161              
2162             # This is a work-around for the fact that Moo doesn't have introspection
2163             # and Perl doesn't have boolean values...
2164             sub _types {
2165 0     0     return \%types;
2166             }
2167              
2168              
2169              
2170             =head4 protocol_version
2171              
2172             *
2173             The [SEMVER](https://semver.org/) version number of the protocol
2174              
2175             =cut
2176              
2177             has protocol_version =>
2178             (is => 'ro',
2179             required => 1,
2180             default => sub { '' },
2181             );
2182              
2183              
2184             =head4 implementation
2185              
2186             SpecFlow, Cucumber-JVM, Cucumber.js, Cucumber-Ruby, Behat etc.
2187              
2188             =cut
2189              
2190             has implementation =>
2191             (is => 'ro',
2192             required => 1,
2193             default => sub { Cucumber::Messages::Product->new() },
2194             );
2195              
2196              
2197             =head4 runtime
2198              
2199             Java, Ruby, Node.js etc
2200              
2201             =cut
2202              
2203             has runtime =>
2204             (is => 'ro',
2205             required => 1,
2206             default => sub { Cucumber::Messages::Product->new() },
2207             );
2208              
2209              
2210             =head4 os
2211              
2212             Windows, Linux, MacOS etc
2213              
2214             =cut
2215              
2216             has os =>
2217             (is => 'ro',
2218             required => 1,
2219             default => sub { Cucumber::Messages::Product->new() },
2220             );
2221              
2222              
2223             =head4 cpu
2224              
2225             386, arm, amd64 etc
2226              
2227             =cut
2228              
2229             has cpu =>
2230             (is => 'ro',
2231             required => 1,
2232             default => sub { Cucumber::Messages::Product->new() },
2233             );
2234              
2235              
2236             =head4 ci
2237              
2238              
2239             =cut
2240              
2241             has ci =>
2242             (is => 'ro',
2243             );
2244              
2245              
2246             }
2247              
2248             package Cucumber::Messages::Ci {
2249             $Cucumber::Messages::Ci::VERSION = '21.0.0';
2250             =head2 Cucumber::Messages::Ci
2251              
2252             =head3 DESCRIPTION
2253              
2254             Represents the Ci message in Cucumber's
2255             L.
2256              
2257             CI environment
2258              
2259             =head3 ATTRIBUTES
2260              
2261             =cut
2262              
2263 3     3   40 use Moo;
  3         6  
  3         17  
2264             extends 'Cucumber::Messages::Message';
2265              
2266 3     3   1062 use Scalar::Util qw( blessed );
  3         14  
  3         506  
2267              
2268             my %types = (
2269             name => 'string',
2270             url => 'string',
2271             build_number => 'string',
2272             git => 'Cucumber::Messages::Git',
2273             );
2274              
2275             # This is a work-around for the fact that Moo doesn't have introspection
2276             # and Perl doesn't have boolean values...
2277             sub _types {
2278 0     0     return \%types;
2279             }
2280              
2281              
2282              
2283             =head4 name
2284              
2285             Name of the CI product, e.g. "Jenkins", "CircleCI" etc.
2286              
2287             =cut
2288              
2289             has name =>
2290             (is => 'ro',
2291             required => 1,
2292             default => sub { '' },
2293             );
2294              
2295              
2296             =head4 url
2297              
2298             Link to the build
2299              
2300             =cut
2301              
2302             has url =>
2303             (is => 'ro',
2304             );
2305              
2306              
2307             =head4 build_number
2308              
2309             The build number. Some CI servers use non-numeric build numbers, which is why this is a string
2310              
2311             =cut
2312              
2313             has build_number =>
2314             (is => 'ro',
2315             );
2316              
2317              
2318             =head4 git
2319              
2320              
2321             =cut
2322              
2323             has git =>
2324             (is => 'ro',
2325             );
2326              
2327              
2328             }
2329              
2330             package Cucumber::Messages::Git {
2331             $Cucumber::Messages::Git::VERSION = '21.0.0';
2332             =head2 Cucumber::Messages::Git
2333              
2334             =head3 DESCRIPTION
2335              
2336             Represents the Git message in Cucumber's
2337             L.
2338              
2339             Information about Git, provided by the Build/CI server as environment
2340             variables.
2341              
2342             =head3 ATTRIBUTES
2343              
2344             =cut
2345              
2346 3     3   25 use Moo;
  3         5  
  3         13  
2347             extends 'Cucumber::Messages::Message';
2348              
2349 3     3   993 use Scalar::Util qw( blessed );
  3         8  
  3         544  
2350              
2351             my %types = (
2352             remote => 'string',
2353             revision => 'string',
2354             branch => 'string',
2355             tag => 'string',
2356             );
2357              
2358             # This is a work-around for the fact that Moo doesn't have introspection
2359             # and Perl doesn't have boolean values...
2360             sub _types {
2361 0     0     return \%types;
2362             }
2363              
2364              
2365              
2366             =head4 remote
2367              
2368              
2369             =cut
2370              
2371             has remote =>
2372             (is => 'ro',
2373             required => 1,
2374             default => sub { '' },
2375             );
2376              
2377              
2378             =head4 revision
2379              
2380              
2381             =cut
2382              
2383             has revision =>
2384             (is => 'ro',
2385             required => 1,
2386             default => sub { '' },
2387             );
2388              
2389              
2390             =head4 branch
2391              
2392              
2393             =cut
2394              
2395             has branch =>
2396             (is => 'ro',
2397             );
2398              
2399              
2400             =head4 tag
2401              
2402              
2403             =cut
2404              
2405             has tag =>
2406             (is => 'ro',
2407             );
2408              
2409              
2410             }
2411              
2412             package Cucumber::Messages::Product {
2413             $Cucumber::Messages::Product::VERSION = '21.0.0';
2414             =head2 Cucumber::Messages::Product
2415              
2416             =head3 DESCRIPTION
2417              
2418             Represents the Product message in Cucumber's
2419             L.
2420              
2421             Used to describe various properties of Meta
2422              
2423             =head3 ATTRIBUTES
2424              
2425             =cut
2426              
2427 3     3   22 use Moo;
  3         4  
  3         18  
2428             extends 'Cucumber::Messages::Message';
2429              
2430 3     3   942 use Scalar::Util qw( blessed );
  3         7  
  3         545  
2431              
2432             my %types = (
2433             name => 'string',
2434             version => 'string',
2435             );
2436              
2437             # This is a work-around for the fact that Moo doesn't have introspection
2438             # and Perl doesn't have boolean values...
2439             sub _types {
2440 0     0     return \%types;
2441             }
2442              
2443              
2444              
2445             =head4 name
2446              
2447             The product name
2448              
2449             =cut
2450              
2451             has name =>
2452             (is => 'ro',
2453             required => 1,
2454             default => sub { '' },
2455             );
2456              
2457              
2458             =head4 version
2459              
2460             The product version
2461              
2462             =cut
2463              
2464             has version =>
2465             (is => 'ro',
2466             );
2467              
2468              
2469             }
2470              
2471             package Cucumber::Messages::ParameterType {
2472             $Cucumber::Messages::ParameterType::VERSION = '21.0.0';
2473             =head2 Cucumber::Messages::ParameterType
2474              
2475             =head3 DESCRIPTION
2476              
2477             Represents the ParameterType message in Cucumber's
2478             L.
2479              
2480              
2481              
2482             =head3 ATTRIBUTES
2483              
2484             =cut
2485              
2486 3     3   29 use Moo;
  3         6  
  3         11  
2487             extends 'Cucumber::Messages::Message';
2488              
2489 3     3   981 use Scalar::Util qw( blessed );
  3         6  
  3         884  
2490              
2491             my %types = (
2492             name => 'string',
2493             regular_expressions => '[]string',
2494             prefer_for_regular_expression_match => 'boolean',
2495             use_for_snippets => 'boolean',
2496             id => 'string',
2497             );
2498              
2499             # This is a work-around for the fact that Moo doesn't have introspection
2500             # and Perl doesn't have boolean values...
2501             sub _types {
2502 0     0     return \%types;
2503             }
2504              
2505              
2506              
2507             =head4 name
2508              
2509             The name is unique, so we don't need an id.
2510              
2511             =cut
2512              
2513             has name =>
2514             (is => 'ro',
2515             required => 1,
2516             default => sub { '' },
2517             );
2518              
2519              
2520             =head4 regular_expressions
2521              
2522              
2523             =cut
2524              
2525             has regular_expressions =>
2526             (is => 'ro',
2527             required => 1,
2528             default => sub { [] },
2529             );
2530              
2531              
2532             =head4 prefer_for_regular_expression_match
2533              
2534              
2535             =cut
2536              
2537             has prefer_for_regular_expression_match =>
2538             (is => 'ro',
2539             required => 1,
2540             default => sub { '' },
2541             );
2542              
2543              
2544             =head4 use_for_snippets
2545              
2546              
2547             =cut
2548              
2549             has use_for_snippets =>
2550             (is => 'ro',
2551             required => 1,
2552             default => sub { '' },
2553             );
2554              
2555              
2556             =head4 id
2557              
2558              
2559             =cut
2560              
2561             has id =>
2562             (is => 'ro',
2563             required => 1,
2564             default => sub { '' },
2565             );
2566              
2567              
2568             }
2569              
2570             package Cucumber::Messages::ParseError {
2571             $Cucumber::Messages::ParseError::VERSION = '21.0.0';
2572             =head2 Cucumber::Messages::ParseError
2573              
2574             =head3 DESCRIPTION
2575              
2576             Represents the ParseError message in Cucumber's
2577             L.
2578              
2579              
2580              
2581             =head3 ATTRIBUTES
2582              
2583             =cut
2584              
2585 3     3   30 use Moo;
  3         6  
  3         14  
2586             extends 'Cucumber::Messages::Message';
2587              
2588 3     3   983 use Scalar::Util qw( blessed );
  3         46  
  3         531  
2589              
2590             my %types = (
2591             source => 'Cucumber::Messages::SourceReference',
2592             message => 'string',
2593             );
2594              
2595             # This is a work-around for the fact that Moo doesn't have introspection
2596             # and Perl doesn't have boolean values...
2597             sub _types {
2598 0     0     return \%types;
2599             }
2600              
2601              
2602              
2603             =head4 source
2604              
2605              
2606             =cut
2607              
2608             has source =>
2609             (is => 'ro',
2610             required => 1,
2611             default => sub { Cucumber::Messages::SourceReference->new() },
2612             );
2613              
2614              
2615             =head4 message
2616              
2617              
2618             =cut
2619              
2620             has message =>
2621             (is => 'ro',
2622             required => 1,
2623             default => sub { '' },
2624             );
2625              
2626              
2627             }
2628              
2629             package Cucumber::Messages::Pickle {
2630             $Cucumber::Messages::Pickle::VERSION = '21.0.0';
2631             =head2 Cucumber::Messages::Pickle
2632              
2633             =head3 DESCRIPTION
2634              
2635             Represents the Pickle message in Cucumber's
2636             L.
2637              
2638             //// Pickles
2639              
2640             *
2641             A `Pickle` represents a template for a `TestCase`. It is typically derived
2642             from another format, such as [GherkinDocument](#io.cucumber.messages.GherkinDocument).
2643             In the future a `Pickle` may be derived from other formats such as Markdown or
2644             Excel files.
2645              
2646             By making `Pickle` the main data structure Cucumber uses for execution, the
2647             implementation of Cucumber itself becomes simpler, as it doesn't have to deal
2648             with the complex structure of a [GherkinDocument](#io.cucumber.messages.GherkinDocument).
2649              
2650             Each `PickleStep` of a `Pickle` is matched with a `StepDefinition` to create a `TestCase`
2651              
2652             =head3 ATTRIBUTES
2653              
2654             =cut
2655              
2656 3     3   23 use Moo;
  3         40  
  3         16  
2657             extends 'Cucumber::Messages::Message';
2658              
2659 3     3   994 use Scalar::Util qw( blessed );
  3         7  
  3         1015  
2660              
2661             my %types = (
2662             id => 'string',
2663             uri => 'string',
2664             name => 'string',
2665             language => 'string',
2666             steps => '[]Cucumber::Messages::PickleStep',
2667             tags => '[]Cucumber::Messages::PickleTag',
2668             ast_node_ids => '[]string',
2669             );
2670              
2671             # This is a work-around for the fact that Moo doesn't have introspection
2672             # and Perl doesn't have boolean values...
2673             sub _types {
2674 0     0     return \%types;
2675             }
2676              
2677              
2678              
2679             =head4 id
2680              
2681             *
2682             A unique id for the pickle
2683              
2684             =cut
2685              
2686             has id =>
2687             (is => 'ro',
2688             required => 1,
2689             default => sub { '' },
2690             );
2691              
2692              
2693             =head4 uri
2694              
2695             The uri of the source file
2696              
2697             =cut
2698              
2699             has uri =>
2700             (is => 'ro',
2701             required => 1,
2702             default => sub { '' },
2703             );
2704              
2705              
2706             =head4 name
2707              
2708             The name of the pickle
2709              
2710             =cut
2711              
2712             has name =>
2713             (is => 'ro',
2714             required => 1,
2715             default => sub { '' },
2716             );
2717              
2718              
2719             =head4 language
2720              
2721             The language of the pickle
2722              
2723             =cut
2724              
2725             has language =>
2726             (is => 'ro',
2727             required => 1,
2728             default => sub { '' },
2729             );
2730              
2731              
2732             =head4 steps
2733              
2734             One or more steps
2735              
2736             =cut
2737              
2738             has steps =>
2739             (is => 'ro',
2740             required => 1,
2741             default => sub { [] },
2742             );
2743              
2744              
2745             =head4 tags
2746              
2747             *
2748             One or more tags. If this pickle is constructed from a Gherkin document,
2749             It includes inherited tags from the `Feature` as well.
2750              
2751             =cut
2752              
2753             has tags =>
2754             (is => 'ro',
2755             required => 1,
2756             default => sub { [] },
2757             );
2758              
2759              
2760             =head4 ast_node_ids
2761              
2762             *
2763             Points to the AST node locations of the pickle. The last one represents the unique
2764             id of the pickle. A pickle constructed from `Examples` will have the first
2765             id originating from the `Scenario` AST node, and the second from the `TableRow` AST node.
2766              
2767             =cut
2768              
2769             has ast_node_ids =>
2770             (is => 'ro',
2771             required => 1,
2772             default => sub { [] },
2773             );
2774              
2775              
2776             }
2777              
2778             package Cucumber::Messages::PickleDocString {
2779             $Cucumber::Messages::PickleDocString::VERSION = '21.0.0';
2780             =head2 Cucumber::Messages::PickleDocString
2781              
2782             =head3 DESCRIPTION
2783              
2784             Represents the PickleDocString message in Cucumber's
2785             L.
2786              
2787              
2788              
2789             =head3 ATTRIBUTES
2790              
2791             =cut
2792              
2793 3     3   22 use Moo;
  3         5  
  3         12  
2794             extends 'Cucumber::Messages::Message';
2795              
2796 3     3   999 use Scalar::Util qw( blessed );
  3         8  
  3         508  
2797              
2798             my %types = (
2799             media_type => 'string',
2800             content => 'string',
2801             );
2802              
2803             # This is a work-around for the fact that Moo doesn't have introspection
2804             # and Perl doesn't have boolean values...
2805             sub _types {
2806 0     0     return \%types;
2807             }
2808              
2809              
2810              
2811             =head4 media_type
2812              
2813              
2814             =cut
2815              
2816             has media_type =>
2817             (is => 'ro',
2818             );
2819              
2820              
2821             =head4 content
2822              
2823              
2824             =cut
2825              
2826             has content =>
2827             (is => 'ro',
2828             required => 1,
2829             default => sub { '' },
2830             );
2831              
2832              
2833             }
2834              
2835             package Cucumber::Messages::PickleStep {
2836             $Cucumber::Messages::PickleStep::VERSION = '21.0.0';
2837             =head2 Cucumber::Messages::PickleStep
2838              
2839             =head3 DESCRIPTION
2840              
2841             Represents the PickleStep message in Cucumber's
2842             L.
2843              
2844             *
2845             An executable step
2846              
2847             =head3 ATTRIBUTES
2848              
2849             =cut
2850              
2851 3     3   22 use Moo;
  3         7  
  3         14  
2852             extends 'Cucumber::Messages::Message';
2853              
2854 3     3   973 use Scalar::Util qw( blessed );
  3         13  
  3         543  
2855              
2856             my %types = (
2857             argument => 'Cucumber::Messages::PickleStepArgument',
2858             ast_node_ids => '[]string',
2859             id => 'string',
2860             type => '',
2861             text => 'string',
2862             );
2863              
2864             # This is a work-around for the fact that Moo doesn't have introspection
2865             # and Perl doesn't have boolean values...
2866             sub _types {
2867 0     0     return \%types;
2868             }
2869              
2870              
2871              
2872             =head4 argument
2873              
2874              
2875             =cut
2876              
2877             has argument =>
2878             (is => 'ro',
2879             );
2880              
2881              
2882             =head4 ast_node_ids
2883              
2884             References the IDs of the source of the step. For Gherkin, this can be
2885             the ID of a Step, and possibly also the ID of a TableRow
2886              
2887             =cut
2888              
2889             has ast_node_ids =>
2890             (is => 'ro',
2891             required => 1,
2892             default => sub { [] },
2893             );
2894              
2895              
2896             =head4 id
2897              
2898             A unique ID for the PickleStep
2899              
2900             =cut
2901              
2902             has id =>
2903             (is => 'ro',
2904             required => 1,
2905             default => sub { '' },
2906             );
2907              
2908              
2909             =head4 type
2910              
2911             The context in which the step was specified: context (Given), action (When) or outcome (Then).
2912              
2913             Note that the keywords `But` and `And` inherit their meaning from prior steps and the `*` 'keyword' doesn't have specific meaning (hence Unknown)
2914              
2915              
2916             Available constants for valid values of this field:
2917              
2918             =over
2919              
2920             =item * TYPE_UNKNOWN
2921              
2922             =item * TYPE_CONTEXT
2923              
2924             =item * TYPE_ACTION
2925              
2926             =item * TYPE_OUTCOME
2927              
2928             =back
2929              
2930             =cut
2931              
2932              
2933             use constant {
2934 3         536 TYPE_UNKNOWN => 'Unknown',
2935             TYPE_CONTEXT => 'Context',
2936             TYPE_ACTION => 'Action',
2937             TYPE_OUTCOME => 'Outcome',
2938 3     3   23 };
  3         6  
2939              
2940             has type =>
2941             (is => 'ro',
2942             );
2943              
2944              
2945             =head4 text
2946              
2947              
2948             =cut
2949              
2950             has text =>
2951             (is => 'ro',
2952             required => 1,
2953             default => sub { '' },
2954             );
2955              
2956              
2957             }
2958              
2959             package Cucumber::Messages::PickleStepArgument {
2960             $Cucumber::Messages::PickleStepArgument::VERSION = '21.0.0';
2961             =head2 Cucumber::Messages::PickleStepArgument
2962              
2963             =head3 DESCRIPTION
2964              
2965             Represents the PickleStepArgument message in Cucumber's
2966             L.
2967              
2968             An optional argument
2969              
2970             =head3 ATTRIBUTES
2971              
2972             =cut
2973              
2974 3     3   21 use Moo;
  3         6  
  3         23  
2975             extends 'Cucumber::Messages::Message';
2976              
2977 3     3   1045 use Scalar::Util qw( blessed );
  3         7  
  3         380  
2978              
2979             my %types = (
2980             doc_string => 'Cucumber::Messages::PickleDocString',
2981             data_table => 'Cucumber::Messages::PickleTable',
2982             );
2983              
2984             # This is a work-around for the fact that Moo doesn't have introspection
2985             # and Perl doesn't have boolean values...
2986             sub _types {
2987 0     0     return \%types;
2988             }
2989              
2990              
2991              
2992             =head4 doc_string
2993              
2994              
2995             =cut
2996              
2997             has doc_string =>
2998             (is => 'ro',
2999             );
3000              
3001              
3002             =head4 data_table
3003              
3004              
3005             =cut
3006              
3007             has data_table =>
3008             (is => 'ro',
3009             );
3010              
3011              
3012             }
3013              
3014             package Cucumber::Messages::PickleTable {
3015             $Cucumber::Messages::PickleTable::VERSION = '21.0.0';
3016             =head2 Cucumber::Messages::PickleTable
3017              
3018             =head3 DESCRIPTION
3019              
3020             Represents the PickleTable message in Cucumber's
3021             L.
3022              
3023              
3024              
3025             =head3 ATTRIBUTES
3026              
3027             =cut
3028              
3029 3     3   45 use Moo;
  3         8  
  3         23  
3030             extends 'Cucumber::Messages::Message';
3031              
3032 3     3   1011 use Scalar::Util qw( blessed );
  3         6  
  3         416  
3033              
3034             my %types = (
3035             rows => '[]Cucumber::Messages::PickleTableRow',
3036             );
3037              
3038             # This is a work-around for the fact that Moo doesn't have introspection
3039             # and Perl doesn't have boolean values...
3040             sub _types {
3041 0     0     return \%types;
3042             }
3043              
3044              
3045              
3046             =head4 rows
3047              
3048              
3049             =cut
3050              
3051             has rows =>
3052             (is => 'ro',
3053             required => 1,
3054             default => sub { [] },
3055             );
3056              
3057              
3058             }
3059              
3060             package Cucumber::Messages::PickleTableCell {
3061             $Cucumber::Messages::PickleTableCell::VERSION = '21.0.0';
3062             =head2 Cucumber::Messages::PickleTableCell
3063              
3064             =head3 DESCRIPTION
3065              
3066             Represents the PickleTableCell message in Cucumber's
3067             L.
3068              
3069              
3070              
3071             =head3 ATTRIBUTES
3072              
3073             =cut
3074              
3075 3     3   21 use Moo;
  3         6  
  3         15  
3076             extends 'Cucumber::Messages::Message';
3077              
3078 3     3   1050 use Scalar::Util qw( blessed );
  3         7  
  3         448  
3079              
3080             my %types = (
3081             value => 'string',
3082             );
3083              
3084             # This is a work-around for the fact that Moo doesn't have introspection
3085             # and Perl doesn't have boolean values...
3086             sub _types {
3087 0     0     return \%types;
3088             }
3089              
3090              
3091              
3092             =head4 value
3093              
3094              
3095             =cut
3096              
3097             has value =>
3098             (is => 'ro',
3099             required => 1,
3100             default => sub { '' },
3101             );
3102              
3103              
3104             }
3105              
3106             package Cucumber::Messages::PickleTableRow {
3107             $Cucumber::Messages::PickleTableRow::VERSION = '21.0.0';
3108             =head2 Cucumber::Messages::PickleTableRow
3109              
3110             =head3 DESCRIPTION
3111              
3112             Represents the PickleTableRow message in Cucumber's
3113             L.
3114              
3115              
3116              
3117             =head3 ATTRIBUTES
3118              
3119             =cut
3120              
3121 3     3   22 use Moo;
  3         6  
  3         22  
3122             extends 'Cucumber::Messages::Message';
3123              
3124 3     3   986 use Scalar::Util qw( blessed );
  3         9  
  3         452  
3125              
3126             my %types = (
3127             cells => '[]Cucumber::Messages::PickleTableCell',
3128             );
3129              
3130             # This is a work-around for the fact that Moo doesn't have introspection
3131             # and Perl doesn't have boolean values...
3132             sub _types {
3133 0     0     return \%types;
3134             }
3135              
3136              
3137              
3138             =head4 cells
3139              
3140              
3141             =cut
3142              
3143             has cells =>
3144             (is => 'ro',
3145             required => 1,
3146             default => sub { [] },
3147             );
3148              
3149              
3150             }
3151              
3152             package Cucumber::Messages::PickleTag {
3153             $Cucumber::Messages::PickleTag::VERSION = '21.0.0';
3154             =head2 Cucumber::Messages::PickleTag
3155              
3156             =head3 DESCRIPTION
3157              
3158             Represents the PickleTag message in Cucumber's
3159             L.
3160              
3161             *
3162             A tag
3163              
3164             =head3 ATTRIBUTES
3165              
3166             =cut
3167              
3168 3     3   21 use Moo;
  3         6  
  3         22  
3169             extends 'Cucumber::Messages::Message';
3170              
3171 3     3   917 use Scalar::Util qw( blessed );
  3         6  
  3         638  
3172              
3173             my %types = (
3174             name => 'string',
3175             ast_node_id => 'string',
3176             );
3177              
3178             # This is a work-around for the fact that Moo doesn't have introspection
3179             # and Perl doesn't have boolean values...
3180             sub _types {
3181 0     0     return \%types;
3182             }
3183              
3184              
3185              
3186             =head4 name
3187              
3188              
3189             =cut
3190              
3191             has name =>
3192             (is => 'ro',
3193             required => 1,
3194             default => sub { '' },
3195             );
3196              
3197              
3198             =head4 ast_node_id
3199              
3200             Points to the AST node this was created from
3201              
3202             =cut
3203              
3204             has ast_node_id =>
3205             (is => 'ro',
3206             required => 1,
3207             default => sub { '' },
3208             );
3209              
3210              
3211             }
3212              
3213             package Cucumber::Messages::Source {
3214             $Cucumber::Messages::Source::VERSION = '21.0.0';
3215             =head2 Cucumber::Messages::Source
3216              
3217             =head3 DESCRIPTION
3218              
3219             Represents the Source message in Cucumber's
3220             L.
3221              
3222             //// Source
3223              
3224             *
3225             A source file, typically a Gherkin document or Java/Ruby/JavaScript source code
3226              
3227             =head3 ATTRIBUTES
3228              
3229             =cut
3230              
3231 3     3   21 use Moo;
  3         6  
  3         12  
3232             extends 'Cucumber::Messages::Message';
3233              
3234 3     3   914 use Scalar::Util qw( blessed );
  3         7  
  3         577  
3235              
3236             my %types = (
3237             uri => 'string',
3238             data => 'string',
3239             media_type => '',
3240             );
3241              
3242             # This is a work-around for the fact that Moo doesn't have introspection
3243             # and Perl doesn't have boolean values...
3244             sub _types {
3245 0     0     return \%types;
3246             }
3247              
3248              
3249              
3250             =head4 uri
3251              
3252             *
3253             The [URI](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier)
3254             of the source, typically a file path relative to the root directory
3255              
3256             =cut
3257              
3258             has uri =>
3259             (is => 'ro',
3260             required => 1,
3261             default => sub { '' },
3262             );
3263              
3264              
3265             =head4 data
3266              
3267             The contents of the file
3268              
3269             =cut
3270              
3271             has data =>
3272             (is => 'ro',
3273             required => 1,
3274             default => sub { '' },
3275             );
3276              
3277              
3278             =head4 media_type
3279              
3280             The media type of the file. Can be used to specify custom types, such as
3281             text/x.cucumber.gherkin+plain
3282              
3283              
3284             Available constants for valid values of this field:
3285              
3286             =over
3287              
3288             =item * MEDIATYPE_TEXT_X_CUCUMBER_GHERKIN_PLAIN
3289              
3290             =item * MEDIATYPE_TEXT_X_CUCUMBER_GHERKIN_MARKDOWN
3291              
3292             =back
3293              
3294             =cut
3295              
3296              
3297             use constant {
3298 3         381 MEDIATYPE_TEXT_X_CUCUMBER_GHERKIN_PLAIN => 'text/x.cucumber.gherkin+plain',
3299             MEDIATYPE_TEXT_X_CUCUMBER_GHERKIN_MARKDOWN => 'text/x.cucumber.gherkin+markdown',
3300 3     3   21 };
  3         7  
3301              
3302             has media_type =>
3303             (is => 'ro',
3304             required => 1,
3305             default => sub { MEDIATYPE_TEXT_X_CUCUMBER_GHERKIN_PLAIN },
3306             );
3307              
3308              
3309             }
3310              
3311             package Cucumber::Messages::SourceReference {
3312             $Cucumber::Messages::SourceReference::VERSION = '21.0.0';
3313             =head2 Cucumber::Messages::SourceReference
3314              
3315             =head3 DESCRIPTION
3316              
3317             Represents the SourceReference message in Cucumber's
3318             L.
3319              
3320             *
3321             Points to a [Source](#io.cucumber.messages.Source) identified by `uri` and a
3322             [Location](#io.cucumber.messages.Location) within that file.
3323              
3324             =head3 ATTRIBUTES
3325              
3326             =cut
3327              
3328 3     3   23 use Moo;
  3         6  
  3         12  
3329             extends 'Cucumber::Messages::Message';
3330              
3331 3     3   1004 use Scalar::Util qw( blessed );
  3         6  
  3         468  
3332              
3333             my %types = (
3334             uri => 'string',
3335             java_method => 'Cucumber::Messages::JavaMethod',
3336             java_stack_trace_element => 'Cucumber::Messages::JavaStackTraceElement',
3337             location => 'Cucumber::Messages::Location',
3338             );
3339              
3340             # This is a work-around for the fact that Moo doesn't have introspection
3341             # and Perl doesn't have boolean values...
3342             sub _types {
3343 0     0     return \%types;
3344             }
3345              
3346              
3347              
3348             =head4 uri
3349              
3350              
3351             =cut
3352              
3353             has uri =>
3354             (is => 'ro',
3355             );
3356              
3357              
3358             =head4 java_method
3359              
3360              
3361             =cut
3362              
3363             has java_method =>
3364             (is => 'ro',
3365             );
3366              
3367              
3368             =head4 java_stack_trace_element
3369              
3370              
3371             =cut
3372              
3373             has java_stack_trace_element =>
3374             (is => 'ro',
3375             );
3376              
3377              
3378             =head4 location
3379              
3380              
3381             =cut
3382              
3383             has location =>
3384             (is => 'ro',
3385             );
3386              
3387              
3388             }
3389              
3390             package Cucumber::Messages::JavaMethod {
3391             $Cucumber::Messages::JavaMethod::VERSION = '21.0.0';
3392             =head2 Cucumber::Messages::JavaMethod
3393              
3394             =head3 DESCRIPTION
3395              
3396             Represents the JavaMethod message in Cucumber's
3397             L.
3398              
3399              
3400              
3401             =head3 ATTRIBUTES
3402              
3403             =cut
3404              
3405 3     3   21 use Moo;
  3         6  
  3         23  
3406             extends 'Cucumber::Messages::Message';
3407              
3408 3     3   973 use Scalar::Util qw( blessed );
  3         14  
  3         705  
3409              
3410             my %types = (
3411             class_name => 'string',
3412             method_name => 'string',
3413             method_parameter_types => '[]string',
3414             );
3415              
3416             # This is a work-around for the fact that Moo doesn't have introspection
3417             # and Perl doesn't have boolean values...
3418             sub _types {
3419 0     0     return \%types;
3420             }
3421              
3422              
3423              
3424             =head4 class_name
3425              
3426              
3427             =cut
3428              
3429             has class_name =>
3430             (is => 'ro',
3431             required => 1,
3432             default => sub { '' },
3433             );
3434              
3435              
3436             =head4 method_name
3437              
3438              
3439             =cut
3440              
3441             has method_name =>
3442             (is => 'ro',
3443             required => 1,
3444             default => sub { '' },
3445             );
3446              
3447              
3448             =head4 method_parameter_types
3449              
3450              
3451             =cut
3452              
3453             has method_parameter_types =>
3454             (is => 'ro',
3455             required => 1,
3456             default => sub { [] },
3457             );
3458              
3459              
3460             }
3461              
3462             package Cucumber::Messages::JavaStackTraceElement {
3463             $Cucumber::Messages::JavaStackTraceElement::VERSION = '21.0.0';
3464             =head2 Cucumber::Messages::JavaStackTraceElement
3465              
3466             =head3 DESCRIPTION
3467              
3468             Represents the JavaStackTraceElement message in Cucumber's
3469             L.
3470              
3471              
3472              
3473             =head3 ATTRIBUTES
3474              
3475             =cut
3476              
3477 3     3   26 use Moo;
  3         5  
  3         14  
3478             extends 'Cucumber::Messages::Message';
3479              
3480 3     3   963 use Scalar::Util qw( blessed );
  3         6  
  3         602  
3481              
3482             my %types = (
3483             class_name => 'string',
3484             file_name => 'string',
3485             method_name => 'string',
3486             );
3487              
3488             # This is a work-around for the fact that Moo doesn't have introspection
3489             # and Perl doesn't have boolean values...
3490             sub _types {
3491 0     0     return \%types;
3492             }
3493              
3494              
3495              
3496             =head4 class_name
3497              
3498              
3499             =cut
3500              
3501             has class_name =>
3502             (is => 'ro',
3503             required => 1,
3504             default => sub { '' },
3505             );
3506              
3507              
3508             =head4 file_name
3509              
3510              
3511             =cut
3512              
3513             has file_name =>
3514             (is => 'ro',
3515             required => 1,
3516             default => sub { '' },
3517             );
3518              
3519              
3520             =head4 method_name
3521              
3522              
3523             =cut
3524              
3525             has method_name =>
3526             (is => 'ro',
3527             required => 1,
3528             default => sub { '' },
3529             );
3530              
3531              
3532             }
3533              
3534             package Cucumber::Messages::StepDefinition {
3535             $Cucumber::Messages::StepDefinition::VERSION = '21.0.0';
3536             =head2 Cucumber::Messages::StepDefinition
3537              
3538             =head3 DESCRIPTION
3539              
3540             Represents the StepDefinition message in Cucumber's
3541             L.
3542              
3543              
3544              
3545             =head3 ATTRIBUTES
3546              
3547             =cut
3548              
3549 3     3   25 use Moo;
  3         6  
  3         12  
3550             extends 'Cucumber::Messages::Message';
3551              
3552 3     3   1018 use Scalar::Util qw( blessed );
  3         7  
  3         681  
3553              
3554             my %types = (
3555             id => 'string',
3556             pattern => 'Cucumber::Messages::StepDefinitionPattern',
3557             source_reference => 'Cucumber::Messages::SourceReference',
3558             );
3559              
3560             # This is a work-around for the fact that Moo doesn't have introspection
3561             # and Perl doesn't have boolean values...
3562             sub _types {
3563 0     0     return \%types;
3564             }
3565              
3566              
3567              
3568             =head4 id
3569              
3570              
3571             =cut
3572              
3573             has id =>
3574             (is => 'ro',
3575             required => 1,
3576             default => sub { '' },
3577             );
3578              
3579              
3580             =head4 pattern
3581              
3582              
3583             =cut
3584              
3585             has pattern =>
3586             (is => 'ro',
3587             required => 1,
3588             default => sub { Cucumber::Messages::StepDefinitionPattern->new() },
3589             );
3590              
3591              
3592             =head4 source_reference
3593              
3594              
3595             =cut
3596              
3597             has source_reference =>
3598             (is => 'ro',
3599             required => 1,
3600             default => sub { Cucumber::Messages::SourceReference->new() },
3601             );
3602              
3603              
3604             }
3605              
3606             package Cucumber::Messages::StepDefinitionPattern {
3607             $Cucumber::Messages::StepDefinitionPattern::VERSION = '21.0.0';
3608             =head2 Cucumber::Messages::StepDefinitionPattern
3609              
3610             =head3 DESCRIPTION
3611              
3612             Represents the StepDefinitionPattern message in Cucumber's
3613             L.
3614              
3615              
3616              
3617             =head3 ATTRIBUTES
3618              
3619             =cut
3620              
3621 3     3   30 use Moo;
  3         6  
  3         15  
3622             extends 'Cucumber::Messages::Message';
3623              
3624 3     3   1011 use Scalar::Util qw( blessed );
  3         5  
  3         385  
3625              
3626             my %types = (
3627             source => 'string',
3628             type => '',
3629             );
3630              
3631             # This is a work-around for the fact that Moo doesn't have introspection
3632             # and Perl doesn't have boolean values...
3633             sub _types {
3634 0     0     return \%types;
3635             }
3636              
3637              
3638              
3639             =head4 source
3640              
3641              
3642             =cut
3643              
3644             has source =>
3645             (is => 'ro',
3646             required => 1,
3647             default => sub { '' },
3648             );
3649              
3650              
3651             =head4 type
3652              
3653              
3654              
3655             Available constants for valid values of this field:
3656              
3657             =over
3658              
3659             =item * TYPE_CUCUMBER_EXPRESSION
3660              
3661             =item * TYPE_REGULAR_EXPRESSION
3662              
3663             =back
3664              
3665             =cut
3666              
3667              
3668             use constant {
3669 3         466 TYPE_CUCUMBER_EXPRESSION => 'CUCUMBER_EXPRESSION',
3670             TYPE_REGULAR_EXPRESSION => 'REGULAR_EXPRESSION',
3671 3     3   21 };
  3         6  
3672              
3673             has type =>
3674             (is => 'ro',
3675             required => 1,
3676             default => sub { TYPE_CUCUMBER_EXPRESSION },
3677             );
3678              
3679              
3680             }
3681              
3682             package Cucumber::Messages::TestCase {
3683             $Cucumber::Messages::TestCase::VERSION = '21.0.0';
3684             =head2 Cucumber::Messages::TestCase
3685              
3686             =head3 DESCRIPTION
3687              
3688             Represents the TestCase message in Cucumber's
3689             L.
3690              
3691             //// TestCases
3692              
3693             *
3694             A `TestCase` contains a sequence of `TestStep`s.
3695              
3696             =head3 ATTRIBUTES
3697              
3698             =cut
3699              
3700 3     3   21 use Moo;
  3         6  
  3         17  
3701             extends 'Cucumber::Messages::Message';
3702              
3703 3     3   980 use Scalar::Util qw( blessed );
  3         7  
  3         578  
3704              
3705             my %types = (
3706             id => 'string',
3707             pickle_id => 'string',
3708             test_steps => '[]Cucumber::Messages::TestStep',
3709             );
3710              
3711             # This is a work-around for the fact that Moo doesn't have introspection
3712             # and Perl doesn't have boolean values...
3713             sub _types {
3714 0     0     return \%types;
3715             }
3716              
3717              
3718              
3719             =head4 id
3720              
3721              
3722             =cut
3723              
3724             has id =>
3725             (is => 'ro',
3726             required => 1,
3727             default => sub { '' },
3728             );
3729              
3730              
3731             =head4 pickle_id
3732              
3733             The ID of the `Pickle` this `TestCase` is derived from.
3734              
3735             =cut
3736              
3737             has pickle_id =>
3738             (is => 'ro',
3739             required => 1,
3740             default => sub { '' },
3741             );
3742              
3743              
3744             =head4 test_steps
3745              
3746              
3747             =cut
3748              
3749             has test_steps =>
3750             (is => 'ro',
3751             required => 1,
3752             default => sub { [] },
3753             );
3754              
3755              
3756             }
3757              
3758             package Cucumber::Messages::Group {
3759             $Cucumber::Messages::Group::VERSION = '21.0.0';
3760             =head2 Cucumber::Messages::Group
3761              
3762             =head3 DESCRIPTION
3763              
3764             Represents the Group message in Cucumber's
3765             L.
3766              
3767              
3768              
3769             =head3 ATTRIBUTES
3770              
3771             =cut
3772              
3773 3     3   21 use Moo;
  3         6  
  3         21  
3774             extends 'Cucumber::Messages::Message';
3775              
3776 3     3   998 use Scalar::Util qw( blessed );
  3         6  
  3         601  
3777              
3778             my %types = (
3779             children => '[]Cucumber::Messages::Group',
3780             start => 'number',
3781             value => 'string',
3782             );
3783              
3784             # This is a work-around for the fact that Moo doesn't have introspection
3785             # and Perl doesn't have boolean values...
3786             sub _types {
3787 0     0     return \%types;
3788             }
3789              
3790              
3791              
3792             =head4 children
3793              
3794              
3795             =cut
3796              
3797             has children =>
3798             (is => 'ro',
3799             required => 1,
3800             default => sub { [] },
3801             );
3802              
3803              
3804             =head4 start
3805              
3806              
3807             =cut
3808              
3809             has start =>
3810             (is => 'ro',
3811             );
3812              
3813              
3814             =head4 value
3815              
3816              
3817             =cut
3818              
3819             has value =>
3820             (is => 'ro',
3821             );
3822              
3823              
3824             }
3825              
3826             package Cucumber::Messages::StepMatchArgument {
3827             $Cucumber::Messages::StepMatchArgument::VERSION = '21.0.0';
3828             =head2 Cucumber::Messages::StepMatchArgument
3829              
3830             =head3 DESCRIPTION
3831              
3832             Represents the StepMatchArgument message in Cucumber's
3833             L.
3834              
3835             *
3836             Represents a single argument extracted from a step match and passed to a step definition.
3837             This is used for the following purposes:
3838             - Construct an argument to pass to a step definition (possibly through a parameter type transform)
3839             - Highlight the matched parameter in rich formatters such as the HTML formatter
3840              
3841             This message closely matches the `Argument` class in the `cucumber-expressions` library.
3842              
3843             =head3 ATTRIBUTES
3844              
3845             =cut
3846              
3847 3     3   24 use Moo;
  3         14  
  3         19  
3848             extends 'Cucumber::Messages::Message';
3849              
3850 3     3   936 use Scalar::Util qw( blessed );
  3         20  
  3         501  
3851              
3852             my %types = (
3853             group => 'Cucumber::Messages::Group',
3854             parameter_type_name => 'string',
3855             );
3856              
3857             # This is a work-around for the fact that Moo doesn't have introspection
3858             # and Perl doesn't have boolean values...
3859             sub _types {
3860 0     0     return \%types;
3861             }
3862              
3863              
3864              
3865             =head4 group
3866              
3867             *
3868             Represents the outermost capture group of an argument. This message closely matches the
3869             `Group` class in the `cucumber-expressions` library.
3870              
3871             =cut
3872              
3873             has group =>
3874             (is => 'ro',
3875             required => 1,
3876             default => sub { Cucumber::Messages::Group->new() },
3877             );
3878              
3879              
3880             =head4 parameter_type_name
3881              
3882              
3883             =cut
3884              
3885             has parameter_type_name =>
3886             (is => 'ro',
3887             );
3888              
3889              
3890             }
3891              
3892             package Cucumber::Messages::StepMatchArgumentsList {
3893             $Cucumber::Messages::StepMatchArgumentsList::VERSION = '21.0.0';
3894             =head2 Cucumber::Messages::StepMatchArgumentsList
3895              
3896             =head3 DESCRIPTION
3897              
3898             Represents the StepMatchArgumentsList message in Cucumber's
3899             L.
3900              
3901              
3902              
3903             =head3 ATTRIBUTES
3904              
3905             =cut
3906              
3907 3     3   23 use Moo;
  3         7  
  3         15  
3908             extends 'Cucumber::Messages::Message';
3909              
3910 3     3   997 use Scalar::Util qw( blessed );
  3         5  
  3         547  
3911              
3912             my %types = (
3913             step_match_arguments => '[]Cucumber::Messages::StepMatchArgument',
3914             );
3915              
3916             # This is a work-around for the fact that Moo doesn't have introspection
3917             # and Perl doesn't have boolean values...
3918             sub _types {
3919 0     0     return \%types;
3920             }
3921              
3922              
3923              
3924             =head4 step_match_arguments
3925              
3926              
3927             =cut
3928              
3929             has step_match_arguments =>
3930             (is => 'ro',
3931             required => 1,
3932             default => sub { [] },
3933             );
3934              
3935              
3936             }
3937              
3938             package Cucumber::Messages::TestStep {
3939             $Cucumber::Messages::TestStep::VERSION = '21.0.0';
3940             =head2 Cucumber::Messages::TestStep
3941              
3942             =head3 DESCRIPTION
3943              
3944             Represents the TestStep message in Cucumber's
3945             L.
3946              
3947             *
3948             A `TestStep` is derived from either a `PickleStep`
3949             combined with a `StepDefinition`, or from a `Hook`.
3950              
3951             =head3 ATTRIBUTES
3952              
3953             =cut
3954              
3955 3     3   22 use Moo;
  3         5  
  3         18  
3956             extends 'Cucumber::Messages::Message';
3957              
3958 3     3   999 use Scalar::Util qw( blessed );
  3         6  
  3         569  
3959              
3960             my %types = (
3961             hook_id => 'string',
3962             id => 'string',
3963             pickle_step_id => 'string',
3964             step_definition_ids => '[]string',
3965             step_match_arguments_lists => '[]Cucumber::Messages::StepMatchArgumentsList',
3966             );
3967              
3968             # This is a work-around for the fact that Moo doesn't have introspection
3969             # and Perl doesn't have boolean values...
3970             sub _types {
3971 0     0     return \%types;
3972             }
3973              
3974              
3975              
3976             =head4 hook_id
3977              
3978             Pointer to the `Hook` (if derived from a Hook)
3979              
3980             =cut
3981              
3982             has hook_id =>
3983             (is => 'ro',
3984             );
3985              
3986              
3987             =head4 id
3988              
3989              
3990             =cut
3991              
3992             has id =>
3993             (is => 'ro',
3994             required => 1,
3995             default => sub { '' },
3996             );
3997              
3998              
3999             =head4 pickle_step_id
4000              
4001             Pointer to the `PickleStep` (if derived from a `PickleStep`)
4002              
4003             =cut
4004              
4005             has pickle_step_id =>
4006             (is => 'ro',
4007             );
4008              
4009              
4010             =head4 step_definition_ids
4011              
4012             Pointer to all the matching `StepDefinition`s (if derived from a `PickleStep`)
4013              
4014             =cut
4015              
4016             has step_definition_ids =>
4017             (is => 'ro',
4018             );
4019              
4020              
4021             =head4 step_match_arguments_lists
4022              
4023             A list of list of StepMatchArgument (if derived from a `PickleStep`).
4024             Each element represents a matching step definition. A size of 0 means `UNDEFINED`,
4025             and a size of 2+ means `AMBIGUOUS`
4026              
4027             =cut
4028              
4029             has step_match_arguments_lists =>
4030             (is => 'ro',
4031             );
4032              
4033              
4034             }
4035              
4036             package Cucumber::Messages::TestCaseFinished {
4037             $Cucumber::Messages::TestCaseFinished::VERSION = '21.0.0';
4038             =head2 Cucumber::Messages::TestCaseFinished
4039              
4040             =head3 DESCRIPTION
4041              
4042             Represents the TestCaseFinished message in Cucumber's
4043             L.
4044              
4045              
4046              
4047             =head3 ATTRIBUTES
4048              
4049             =cut
4050              
4051 3     3   22 use Moo;
  3         6  
  3         17  
4052             extends 'Cucumber::Messages::Message';
4053              
4054 3     3   1046 use Scalar::Util qw( blessed );
  3         8  
  3         672  
4055              
4056             my %types = (
4057             test_case_started_id => 'string',
4058             timestamp => 'Cucumber::Messages::Timestamp',
4059             will_be_retried => 'boolean',
4060             );
4061              
4062             # This is a work-around for the fact that Moo doesn't have introspection
4063             # and Perl doesn't have boolean values...
4064             sub _types {
4065 0     0     return \%types;
4066             }
4067              
4068              
4069              
4070             =head4 test_case_started_id
4071              
4072              
4073             =cut
4074              
4075             has test_case_started_id =>
4076             (is => 'ro',
4077             required => 1,
4078             default => sub { '' },
4079             );
4080              
4081              
4082             =head4 timestamp
4083              
4084              
4085             =cut
4086              
4087             has timestamp =>
4088             (is => 'ro',
4089             required => 1,
4090             default => sub { Cucumber::Messages::Timestamp->new() },
4091             );
4092              
4093              
4094             =head4 will_be_retried
4095              
4096              
4097             =cut
4098              
4099             has will_be_retried =>
4100             (is => 'ro',
4101             required => 1,
4102             default => sub { '' },
4103             );
4104              
4105              
4106             }
4107              
4108             package Cucumber::Messages::TestCaseStarted {
4109             $Cucumber::Messages::TestCaseStarted::VERSION = '21.0.0';
4110             =head2 Cucumber::Messages::TestCaseStarted
4111              
4112             =head3 DESCRIPTION
4113              
4114             Represents the TestCaseStarted message in Cucumber's
4115             L.
4116              
4117              
4118              
4119             =head3 ATTRIBUTES
4120              
4121             =cut
4122              
4123 3     3   21 use Moo;
  3         43  
  3         24  
4124             extends 'Cucumber::Messages::Message';
4125              
4126 3     3   993 use Scalar::Util qw( blessed );
  3         19  
  3         911  
4127              
4128             my %types = (
4129             attempt => 'number',
4130             id => 'string',
4131             test_case_id => 'string',
4132             worker_id => 'string',
4133             timestamp => 'Cucumber::Messages::Timestamp',
4134             );
4135              
4136             # This is a work-around for the fact that Moo doesn't have introspection
4137             # and Perl doesn't have boolean values...
4138             sub _types {
4139 0     0     return \%types;
4140             }
4141              
4142              
4143              
4144             =head4 attempt
4145              
4146             *
4147             The first attempt should have value 0, and for each retry the value
4148             should increase by 1.
4149              
4150             =cut
4151              
4152             has attempt =>
4153             (is => 'ro',
4154             required => 1,
4155             default => sub { 0 },
4156             );
4157              
4158              
4159             =head4 id
4160              
4161             *
4162             Because a `TestCase` can be run multiple times (in case of a retry),
4163             we use this field to group messages relating to the same attempt.
4164              
4165             =cut
4166              
4167             has id =>
4168             (is => 'ro',
4169             required => 1,
4170             default => sub { '' },
4171             );
4172              
4173              
4174             =head4 test_case_id
4175              
4176              
4177             =cut
4178              
4179             has test_case_id =>
4180             (is => 'ro',
4181             required => 1,
4182             default => sub { '' },
4183             );
4184              
4185              
4186             =head4 worker_id
4187              
4188             An identifier for the worker process running this test case, if test cases are being run in parallel. The identifier will be unique per worker, but no particular format is defined - it could be an index, uuid, machine name etc - and as such should be assumed that it's not human readable.
4189              
4190             =cut
4191              
4192             has worker_id =>
4193             (is => 'ro',
4194             );
4195              
4196              
4197             =head4 timestamp
4198              
4199              
4200             =cut
4201              
4202             has timestamp =>
4203             (is => 'ro',
4204             required => 1,
4205             default => sub { Cucumber::Messages::Timestamp->new() },
4206             );
4207              
4208              
4209             }
4210              
4211             package Cucumber::Messages::TestRunFinished {
4212             $Cucumber::Messages::TestRunFinished::VERSION = '21.0.0';
4213             =head2 Cucumber::Messages::TestRunFinished
4214              
4215             =head3 DESCRIPTION
4216              
4217             Represents the TestRunFinished message in Cucumber's
4218             L.
4219              
4220              
4221              
4222             =head3 ATTRIBUTES
4223              
4224             =cut
4225              
4226 3     3   21 use Moo;
  3         7  
  3         15  
4227             extends 'Cucumber::Messages::Message';
4228              
4229 3     3   937 use Scalar::Util qw( blessed );
  3         17  
  3         743  
4230              
4231             my %types = (
4232             message => 'string',
4233             success => 'boolean',
4234             timestamp => 'Cucumber::Messages::Timestamp',
4235             exception => 'Cucumber::Messages::Exception',
4236             );
4237              
4238             # This is a work-around for the fact that Moo doesn't have introspection
4239             # and Perl doesn't have boolean values...
4240             sub _types {
4241 0     0     return \%types;
4242             }
4243              
4244              
4245              
4246             =head4 message
4247              
4248             An informative message about the test run. Typically additional information about failure, but not necessarily.
4249              
4250             =cut
4251              
4252             has message =>
4253             (is => 'ro',
4254             );
4255              
4256              
4257             =head4 success
4258              
4259             A test run is successful if all steps are either passed or skipped, all before/after hooks passed and no other exceptions where thrown.
4260              
4261             =cut
4262              
4263             has success =>
4264             (is => 'ro',
4265             required => 1,
4266             default => sub { '' },
4267             );
4268              
4269              
4270             =head4 timestamp
4271              
4272             Timestamp when the TestRun is finished
4273              
4274             =cut
4275              
4276             has timestamp =>
4277             (is => 'ro',
4278             required => 1,
4279             default => sub { Cucumber::Messages::Timestamp->new() },
4280             );
4281              
4282              
4283             =head4 exception
4284              
4285             Any exception thrown during the test run, if any. Does not include exceptions thrown while executing steps.
4286              
4287             =cut
4288              
4289             has exception =>
4290             (is => 'ro',
4291             );
4292              
4293              
4294             }
4295              
4296             package Cucumber::Messages::TestRunStarted {
4297             $Cucumber::Messages::TestRunStarted::VERSION = '21.0.0';
4298             =head2 Cucumber::Messages::TestRunStarted
4299              
4300             =head3 DESCRIPTION
4301              
4302             Represents the TestRunStarted message in Cucumber's
4303             L.
4304              
4305              
4306              
4307             =head3 ATTRIBUTES
4308              
4309             =cut
4310              
4311 3     3   25 use Moo;
  3         7  
  3         12  
4312             extends 'Cucumber::Messages::Message';
4313              
4314 3     3   1013 use Scalar::Util qw( blessed );
  3         7  
  3         511  
4315              
4316             my %types = (
4317             timestamp => 'Cucumber::Messages::Timestamp',
4318             );
4319              
4320             # This is a work-around for the fact that Moo doesn't have introspection
4321             # and Perl doesn't have boolean values...
4322             sub _types {
4323 0     0     return \%types;
4324             }
4325              
4326              
4327              
4328             =head4 timestamp
4329              
4330              
4331             =cut
4332              
4333             has timestamp =>
4334             (is => 'ro',
4335             required => 1,
4336             default => sub { Cucumber::Messages::Timestamp->new() },
4337             );
4338              
4339              
4340             }
4341              
4342             package Cucumber::Messages::TestStepFinished {
4343             $Cucumber::Messages::TestStepFinished::VERSION = '21.0.0';
4344             =head2 Cucumber::Messages::TestStepFinished
4345              
4346             =head3 DESCRIPTION
4347              
4348             Represents the TestStepFinished message in Cucumber's
4349             L.
4350              
4351              
4352              
4353             =head3 ATTRIBUTES
4354              
4355             =cut
4356              
4357 3     3   38 use Moo;
  3         6  
  3         13  
4358             extends 'Cucumber::Messages::Message';
4359              
4360 3     3   994 use Scalar::Util qw( blessed );
  3         13  
  3         851  
4361              
4362             my %types = (
4363             test_case_started_id => 'string',
4364             test_step_id => 'string',
4365             test_step_result => 'Cucumber::Messages::TestStepResult',
4366             timestamp => 'Cucumber::Messages::Timestamp',
4367             );
4368              
4369             # This is a work-around for the fact that Moo doesn't have introspection
4370             # and Perl doesn't have boolean values...
4371             sub _types {
4372 0     0     return \%types;
4373             }
4374              
4375              
4376              
4377             =head4 test_case_started_id
4378              
4379              
4380             =cut
4381              
4382             has test_case_started_id =>
4383             (is => 'ro',
4384             required => 1,
4385             default => sub { '' },
4386             );
4387              
4388              
4389             =head4 test_step_id
4390              
4391              
4392             =cut
4393              
4394             has test_step_id =>
4395             (is => 'ro',
4396             required => 1,
4397             default => sub { '' },
4398             );
4399              
4400              
4401             =head4 test_step_result
4402              
4403              
4404             =cut
4405              
4406             has test_step_result =>
4407             (is => 'ro',
4408             required => 1,
4409             default => sub { Cucumber::Messages::TestStepResult->new() },
4410             );
4411              
4412              
4413             =head4 timestamp
4414              
4415              
4416             =cut
4417              
4418             has timestamp =>
4419             (is => 'ro',
4420             required => 1,
4421             default => sub { Cucumber::Messages::Timestamp->new() },
4422             );
4423              
4424              
4425             }
4426              
4427             package Cucumber::Messages::TestStepResult {
4428             $Cucumber::Messages::TestStepResult::VERSION = '21.0.0';
4429             =head2 Cucumber::Messages::TestStepResult
4430              
4431             =head3 DESCRIPTION
4432              
4433             Represents the TestStepResult message in Cucumber's
4434             L.
4435              
4436              
4437              
4438             =head3 ATTRIBUTES
4439              
4440             =cut
4441              
4442 3     3   22 use Moo;
  3         6  
  3         14  
4443             extends 'Cucumber::Messages::Message';
4444              
4445 3     3   940 use Scalar::Util qw( blessed );
  3         6  
  3         577  
4446              
4447             my %types = (
4448             duration => 'Cucumber::Messages::Duration',
4449             message => 'string',
4450             status => '',
4451             exception => 'Cucumber::Messages::Exception',
4452             );
4453              
4454             # This is a work-around for the fact that Moo doesn't have introspection
4455             # and Perl doesn't have boolean values...
4456             sub _types {
4457 0     0     return \%types;
4458             }
4459              
4460              
4461              
4462             =head4 duration
4463              
4464              
4465             =cut
4466              
4467             has duration =>
4468             (is => 'ro',
4469             required => 1,
4470             default => sub { Cucumber::Messages::Duration->new() },
4471             );
4472              
4473              
4474             =head4 message
4475              
4476             An arbitrary bit of information that explains this result. This can be a stack trace of anything else.
4477              
4478             =cut
4479              
4480             has message =>
4481             (is => 'ro',
4482             );
4483              
4484              
4485             =head4 status
4486              
4487              
4488              
4489             Available constants for valid values of this field:
4490              
4491             =over
4492              
4493             =item * STATUS_UNKNOWN
4494              
4495             =item * STATUS_PASSED
4496              
4497             =item * STATUS_SKIPPED
4498              
4499             =item * STATUS_PENDING
4500              
4501             =item * STATUS_UNDEFINED
4502              
4503             =item * STATUS_AMBIGUOUS
4504              
4505             =item * STATUS_FAILED
4506              
4507             =back
4508              
4509             =cut
4510              
4511              
4512             use constant {
4513 3         586 STATUS_UNKNOWN => 'UNKNOWN',
4514             STATUS_PASSED => 'PASSED',
4515             STATUS_SKIPPED => 'SKIPPED',
4516             STATUS_PENDING => 'PENDING',
4517             STATUS_UNDEFINED => 'UNDEFINED',
4518             STATUS_AMBIGUOUS => 'AMBIGUOUS',
4519             STATUS_FAILED => 'FAILED',
4520 3     3   22 };
  3         6  
4521              
4522             has status =>
4523             (is => 'ro',
4524             required => 1,
4525             default => sub { STATUS_UNKNOWN },
4526             );
4527              
4528              
4529             =head4 exception
4530              
4531             Exception thrown while executing this step, if any.
4532              
4533             =cut
4534              
4535             has exception =>
4536             (is => 'ro',
4537             );
4538              
4539              
4540             }
4541              
4542             package Cucumber::Messages::TestStepStarted {
4543             $Cucumber::Messages::TestStepStarted::VERSION = '21.0.0';
4544             =head2 Cucumber::Messages::TestStepStarted
4545              
4546             =head3 DESCRIPTION
4547              
4548             Represents the TestStepStarted message in Cucumber's
4549             L.
4550              
4551              
4552              
4553             =head3 ATTRIBUTES
4554              
4555             =cut
4556              
4557 3     3   26 use Moo;
  3         6  
  3         15  
4558             extends 'Cucumber::Messages::Message';
4559              
4560 3     3   997 use Scalar::Util qw( blessed );
  3         12  
  3         752  
4561              
4562             my %types = (
4563             test_case_started_id => 'string',
4564             test_step_id => 'string',
4565             timestamp => 'Cucumber::Messages::Timestamp',
4566             );
4567              
4568             # This is a work-around for the fact that Moo doesn't have introspection
4569             # and Perl doesn't have boolean values...
4570             sub _types {
4571 0     0     return \%types;
4572             }
4573              
4574              
4575              
4576             =head4 test_case_started_id
4577              
4578              
4579             =cut
4580              
4581             has test_case_started_id =>
4582             (is => 'ro',
4583             required => 1,
4584             default => sub { '' },
4585             );
4586              
4587              
4588             =head4 test_step_id
4589              
4590              
4591             =cut
4592              
4593             has test_step_id =>
4594             (is => 'ro',
4595             required => 1,
4596             default => sub { '' },
4597             );
4598              
4599              
4600             =head4 timestamp
4601              
4602              
4603             =cut
4604              
4605             has timestamp =>
4606             (is => 'ro',
4607             required => 1,
4608             default => sub { Cucumber::Messages::Timestamp->new() },
4609             );
4610              
4611              
4612             }
4613              
4614             package Cucumber::Messages::Timestamp {
4615             $Cucumber::Messages::Timestamp::VERSION = '21.0.0';
4616             =head2 Cucumber::Messages::Timestamp
4617              
4618             =head3 DESCRIPTION
4619              
4620             Represents the Timestamp message in Cucumber's
4621             L.
4622              
4623              
4624              
4625             =head3 ATTRIBUTES
4626              
4627             =cut
4628              
4629 3     3   25 use Moo;
  3         13  
  3         14  
4630             extends 'Cucumber::Messages::Message';
4631              
4632 3     3   1102 use Scalar::Util qw( blessed );
  3         6  
  3         476  
4633              
4634             my %types = (
4635             seconds => 'number',
4636             nanos => 'number',
4637             );
4638              
4639             # This is a work-around for the fact that Moo doesn't have introspection
4640             # and Perl doesn't have boolean values...
4641             sub _types {
4642 0     0     return \%types;
4643             }
4644              
4645              
4646              
4647             =head4 seconds
4648              
4649             Represents seconds of UTC time since Unix epoch
4650             1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
4651             9999-12-31T23:59:59Z inclusive.
4652              
4653             =cut
4654              
4655             has seconds =>
4656             (is => 'ro',
4657             required => 1,
4658             default => sub { 0 },
4659             );
4660              
4661              
4662             =head4 nanos
4663              
4664             Non-negative fractions of a second at nanosecond resolution. Negative
4665             second values with fractions must still have non-negative nanos values
4666             that count forward in time. Must be from 0 to 999,999,999
4667             inclusive.
4668              
4669             =cut
4670              
4671             has nanos =>
4672             (is => 'ro',
4673             required => 1,
4674             default => sub { 0 },
4675             );
4676              
4677              
4678             }
4679              
4680             package Cucumber::Messages::UndefinedParameterType {
4681             $Cucumber::Messages::UndefinedParameterType::VERSION = '21.0.0';
4682             =head2 Cucumber::Messages::UndefinedParameterType
4683              
4684             =head3 DESCRIPTION
4685              
4686             Represents the UndefinedParameterType message in Cucumber's
4687             L.
4688              
4689              
4690              
4691             =head3 ATTRIBUTES
4692              
4693             =cut
4694              
4695 3     3   26 use Moo;
  3         6  
  3         12  
4696             extends 'Cucumber::Messages::Message';
4697              
4698 3     3   981 use Scalar::Util qw( blessed );
  3         8  
  3         1071  
4699              
4700             my %types = (
4701             expression => 'string',
4702             name => 'string',
4703             );
4704              
4705             # This is a work-around for the fact that Moo doesn't have introspection
4706             # and Perl doesn't have boolean values...
4707             sub _types {
4708 0     0     return \%types;
4709             }
4710              
4711              
4712              
4713             =head4 expression
4714              
4715              
4716             =cut
4717              
4718             has expression =>
4719             (is => 'ro',
4720             required => 1,
4721             default => sub { '' },
4722             );
4723              
4724              
4725             =head4 name
4726              
4727              
4728             =cut
4729              
4730             has name =>
4731             (is => 'ro',
4732             required => 1,
4733             default => sub { '' },
4734             );
4735              
4736              
4737             }
4738              
4739             1;
4740              
4741             __END__