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 = '22.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   498741 use strict;
  3         19  
  3         88  
39 3     3   17 use warnings;
  3         6  
  3         73  
40              
41 3     3   950 use Cucumber::Messages::Message;
  3         7  
  3         153  
42              
43             =head1 MESSAGE CLASSES
44              
45             =cut
46              
47              
48              
49             package Cucumber::Messages::Attachment {
50             $Cucumber::Messages::Attachment::VERSION = '22.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   40 use Moo;
  3         6  
  3         14  
76             extends 'Cucumber::Messages::Message';
77              
78 3     3   957 use Scalar::Util qw( blessed );
  3         7  
  3         444  
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         703 CONTENTENCODING_IDENTITY => 'IDENTITY',
143             CONTENTENCODING_BASE64 => 'BASE64',
144 3     3   22 };
  3         5  
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 = '22.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   23 use Moo;
  3         5  
  3         12  
253             extends 'Cucumber::Messages::Message';
254              
255 3     3   1011 use Scalar::Util qw( blessed );
  3         14  
  3         510  
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 = '22.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   22 use Moo;
  3         6  
  3         31  
322             extends 'Cucumber::Messages::Message';
323              
324 3     3   1003 use Scalar::Util qw( blessed );
  3         13  
  3         935  
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 = '22.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   25 use Moo;
  3         7  
  3         11  
542             extends 'Cucumber::Messages::Message';
543              
544 3     3   976 use Scalar::Util qw( blessed );
  3         7  
  3         488  
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 = '22.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   22 use Moo;
  3         8  
  3         11  
607             extends 'Cucumber::Messages::Message';
608              
609 3     3   950 use Scalar::Util qw( blessed );
  3         6  
  3         484  
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 = '22.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   22 use Moo;
  3         22  
  3         21  
679             extends 'Cucumber::Messages::Message';
680              
681 3     3   1039 use Scalar::Util qw( blessed );
  3         8  
  3         874  
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 = '22.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   23 use Moo;
  3         4  
  3         33  
792             extends 'Cucumber::Messages::Message';
793              
794 3     3   1026 use Scalar::Util qw( blessed );
  3         7  
  3         487  
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 = '22.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   21 use Moo;
  3         8  
  3         11  
853             extends 'Cucumber::Messages::Message';
854              
855 3     3   939 use Scalar::Util qw( blessed );
  3         24  
  3         468  
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 = '22.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   24 use Moo;
  3         17  
  3         16  
912             extends 'Cucumber::Messages::Message';
913              
914 3     3   963 use Scalar::Util qw( blessed );
  3         5  
  3         697  
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 = '22.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   22 use Moo;
  3         5  
  3         14  
995             extends 'Cucumber::Messages::Message';
996              
997 3     3   946 use Scalar::Util qw( blessed );
  3         7  
  3         959  
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 = '22.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   25 use Moo;
  3         20  
  3         13  
1131             extends 'Cucumber::Messages::Message';
1132              
1133 3     3   931 use Scalar::Util qw( blessed );
  3         29  
  3         964  
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 = '22.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   23 use Moo;
  3         6  
  3         18  
1263             extends 'Cucumber::Messages::Message';
1264              
1265 3     3   1079 use Scalar::Util qw( blessed );
  3         7  
  3         523  
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 = '22.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   28 use Moo;
  3         18  
  3         15  
1329             extends 'Cucumber::Messages::Message';
1330              
1331 3     3   975 use Scalar::Util qw( blessed );
  3         16  
  3         927  
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 = '22.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   21 use Moo;
  3         19  
  3         16  
1456             extends 'Cucumber::Messages::Message';
1457              
1458 3     3   1025 use Scalar::Util qw( blessed );
  3         7  
  3         392  
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 = '22.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   38 use Moo;
  3         13  
  3         16  
1511             extends 'Cucumber::Messages::Message';
1512              
1513 3     3   1018 use Scalar::Util qw( blessed );
  3         8  
  3         1118  
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 = '22.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   28 use Moo;
  3         5  
  3         12  
1649             extends 'Cucumber::Messages::Message';
1650              
1651 3     3   907 use Scalar::Util qw( blessed );
  3         13  
  3         519  
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         647 KEYWORDTYPE_UNKNOWN => 'Unknown',
1723             KEYWORDTYPE_CONTEXT => 'Context',
1724             KEYWORDTYPE_ACTION => 'Action',
1725             KEYWORDTYPE_OUTCOME => 'Outcome',
1726             KEYWORDTYPE_CONJUNCTION => 'Conjunction',
1727 3     3   27 };
  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 = '22.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   23 use Moo;
  3         8  
  3         31  
1797             extends 'Cucumber::Messages::Message';
1798              
1799 3     3   1371 use Scalar::Util qw( blessed );
  3         12  
  3         611  
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 = '22.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         5  
  3         12  
1858             extends 'Cucumber::Messages::Message';
1859              
1860 3     3   1035 use Scalar::Util qw( blessed );
  3         7  
  3         549  
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 = '22.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         16  
  3         37  
1933             extends 'Cucumber::Messages::Message';
1934              
1935 3     3   952 use Scalar::Util qw( blessed );
  3         8  
  3         586  
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 = '22.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   26 use Moo;
  3         8  
  3         24  
2008             extends 'Cucumber::Messages::Message';
2009              
2010 3     3   1003 use Scalar::Util qw( blessed );
  3         20  
  3         698  
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 = '22.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   32 use Moo;
  3         6  
  3         29  
2090             extends 'Cucumber::Messages::Message';
2091              
2092 3     3   947 use Scalar::Util qw( blessed );
  3         6  
  3         499  
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 = '22.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   36 use Moo;
  3         9  
  3         13  
2149             extends 'Cucumber::Messages::Message';
2150              
2151 3     3   945 use Scalar::Util qw( blessed );
  3         20  
  3         932  
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 = '22.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   34 use Moo;
  3         14  
  3         22  
2264             extends 'Cucumber::Messages::Message';
2265              
2266 3     3   1108 use Scalar::Util qw( blessed );
  3         7  
  3         512  
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 = '22.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   21 use Moo;
  3         6  
  3         29  
2347             extends 'Cucumber::Messages::Message';
2348              
2349 3     3   964 use Scalar::Util qw( blessed );
  3         7  
  3         592  
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 = '22.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   21 use Moo;
  3         11  
  3         19  
2428             extends 'Cucumber::Messages::Message';
2429              
2430 3     3   1025 use Scalar::Util qw( blessed );
  3         7  
  3         467  
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 = '22.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   24 use Moo;
  3         8  
  3         13  
2487             extends 'Cucumber::Messages::Message';
2488              
2489 3     3   962 use Scalar::Util qw( blessed );
  3         7  
  3         887  
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             source_reference => 'Cucumber::Messages::SourceReference',
2498             );
2499              
2500             # This is a work-around for the fact that Moo doesn't have introspection
2501             # and Perl doesn't have boolean values...
2502             sub _types {
2503 0     0     return \%types;
2504             }
2505              
2506              
2507              
2508             =head4 name
2509              
2510             The name is unique, so we don't need an id.
2511              
2512             =cut
2513              
2514             has name =>
2515             (is => 'ro',
2516             required => 1,
2517             default => sub { '' },
2518             );
2519              
2520              
2521             =head4 regular_expressions
2522              
2523              
2524             =cut
2525              
2526             has regular_expressions =>
2527             (is => 'ro',
2528             required => 1,
2529             default => sub { [] },
2530             );
2531              
2532              
2533             =head4 prefer_for_regular_expression_match
2534              
2535              
2536             =cut
2537              
2538             has prefer_for_regular_expression_match =>
2539             (is => 'ro',
2540             required => 1,
2541             default => sub { '' },
2542             );
2543              
2544              
2545             =head4 use_for_snippets
2546              
2547              
2548             =cut
2549              
2550             has use_for_snippets =>
2551             (is => 'ro',
2552             required => 1,
2553             default => sub { '' },
2554             );
2555              
2556              
2557             =head4 id
2558              
2559              
2560             =cut
2561              
2562             has id =>
2563             (is => 'ro',
2564             required => 1,
2565             default => sub { '' },
2566             );
2567              
2568              
2569             =head4 source_reference
2570              
2571              
2572             =cut
2573              
2574             has source_reference =>
2575             (is => 'ro',
2576             );
2577              
2578              
2579             }
2580              
2581             package Cucumber::Messages::ParseError {
2582             $Cucumber::Messages::ParseError::VERSION = '22.0.0';
2583             =head2 Cucumber::Messages::ParseError
2584              
2585             =head3 DESCRIPTION
2586              
2587             Represents the ParseError message in Cucumber's
2588             L.
2589              
2590              
2591              
2592             =head3 ATTRIBUTES
2593              
2594             =cut
2595              
2596 3     3   24 use Moo;
  3         5  
  3         20  
2597             extends 'Cucumber::Messages::Message';
2598              
2599 3     3   1136 use Scalar::Util qw( blessed );
  3         63  
  3         558  
2600              
2601             my %types = (
2602             source => 'Cucumber::Messages::SourceReference',
2603             message => 'string',
2604             );
2605              
2606             # This is a work-around for the fact that Moo doesn't have introspection
2607             # and Perl doesn't have boolean values...
2608             sub _types {
2609 0     0     return \%types;
2610             }
2611              
2612              
2613              
2614             =head4 source
2615              
2616              
2617             =cut
2618              
2619             has source =>
2620             (is => 'ro',
2621             required => 1,
2622             default => sub { Cucumber::Messages::SourceReference->new() },
2623             );
2624              
2625              
2626             =head4 message
2627              
2628              
2629             =cut
2630              
2631             has message =>
2632             (is => 'ro',
2633             required => 1,
2634             default => sub { '' },
2635             );
2636              
2637              
2638             }
2639              
2640             package Cucumber::Messages::Pickle {
2641             $Cucumber::Messages::Pickle::VERSION = '22.0.0';
2642             =head2 Cucumber::Messages::Pickle
2643              
2644             =head3 DESCRIPTION
2645              
2646             Represents the Pickle message in Cucumber's
2647             L.
2648              
2649             //// Pickles
2650              
2651             *
2652             A `Pickle` represents a template for a `TestCase`. It is typically derived
2653             from another format, such as [GherkinDocument](#io.cucumber.messages.GherkinDocument).
2654             In the future a `Pickle` may be derived from other formats such as Markdown or
2655             Excel files.
2656              
2657             By making `Pickle` the main data structure Cucumber uses for execution, the
2658             implementation of Cucumber itself becomes simpler, as it doesn't have to deal
2659             with the complex structure of a [GherkinDocument](#io.cucumber.messages.GherkinDocument).
2660              
2661             Each `PickleStep` of a `Pickle` is matched with a `StepDefinition` to create a `TestCase`
2662              
2663             =head3 ATTRIBUTES
2664              
2665             =cut
2666              
2667 3     3   22 use Moo;
  3         43  
  3         17  
2668             extends 'Cucumber::Messages::Message';
2669              
2670 3     3   1003 use Scalar::Util qw( blessed );
  3         6  
  3         1065  
2671              
2672             my %types = (
2673             id => 'string',
2674             uri => 'string',
2675             name => 'string',
2676             language => 'string',
2677             steps => '[]Cucumber::Messages::PickleStep',
2678             tags => '[]Cucumber::Messages::PickleTag',
2679             ast_node_ids => '[]string',
2680             );
2681              
2682             # This is a work-around for the fact that Moo doesn't have introspection
2683             # and Perl doesn't have boolean values...
2684             sub _types {
2685 0     0     return \%types;
2686             }
2687              
2688              
2689              
2690             =head4 id
2691              
2692             *
2693             A unique id for the pickle
2694              
2695             =cut
2696              
2697             has id =>
2698             (is => 'ro',
2699             required => 1,
2700             default => sub { '' },
2701             );
2702              
2703              
2704             =head4 uri
2705              
2706             The uri of the source file
2707              
2708             =cut
2709              
2710             has uri =>
2711             (is => 'ro',
2712             required => 1,
2713             default => sub { '' },
2714             );
2715              
2716              
2717             =head4 name
2718              
2719             The name of the pickle
2720              
2721             =cut
2722              
2723             has name =>
2724             (is => 'ro',
2725             required => 1,
2726             default => sub { '' },
2727             );
2728              
2729              
2730             =head4 language
2731              
2732             The language of the pickle
2733              
2734             =cut
2735              
2736             has language =>
2737             (is => 'ro',
2738             required => 1,
2739             default => sub { '' },
2740             );
2741              
2742              
2743             =head4 steps
2744              
2745             One or more steps
2746              
2747             =cut
2748              
2749             has steps =>
2750             (is => 'ro',
2751             required => 1,
2752             default => sub { [] },
2753             );
2754              
2755              
2756             =head4 tags
2757              
2758             *
2759             One or more tags. If this pickle is constructed from a Gherkin document,
2760             It includes inherited tags from the `Feature` as well.
2761              
2762             =cut
2763              
2764             has tags =>
2765             (is => 'ro',
2766             required => 1,
2767             default => sub { [] },
2768             );
2769              
2770              
2771             =head4 ast_node_ids
2772              
2773             *
2774             Points to the AST node locations of the pickle. The last one represents the unique
2775             id of the pickle. A pickle constructed from `Examples` will have the first
2776             id originating from the `Scenario` AST node, and the second from the `TableRow` AST node.
2777              
2778             =cut
2779              
2780             has ast_node_ids =>
2781             (is => 'ro',
2782             required => 1,
2783             default => sub { [] },
2784             );
2785              
2786              
2787             }
2788              
2789             package Cucumber::Messages::PickleDocString {
2790             $Cucumber::Messages::PickleDocString::VERSION = '22.0.0';
2791             =head2 Cucumber::Messages::PickleDocString
2792              
2793             =head3 DESCRIPTION
2794              
2795             Represents the PickleDocString message in Cucumber's
2796             L.
2797              
2798              
2799              
2800             =head3 ATTRIBUTES
2801              
2802             =cut
2803              
2804 3     3   39 use Moo;
  3         7  
  3         19  
2805             extends 'Cucumber::Messages::Message';
2806              
2807 3     3   899 use Scalar::Util qw( blessed );
  3         21  
  3         436  
2808              
2809             my %types = (
2810             media_type => 'string',
2811             content => 'string',
2812             );
2813              
2814             # This is a work-around for the fact that Moo doesn't have introspection
2815             # and Perl doesn't have boolean values...
2816             sub _types {
2817 0     0     return \%types;
2818             }
2819              
2820              
2821              
2822             =head4 media_type
2823              
2824              
2825             =cut
2826              
2827             has media_type =>
2828             (is => 'ro',
2829             );
2830              
2831              
2832             =head4 content
2833              
2834              
2835             =cut
2836              
2837             has content =>
2838             (is => 'ro',
2839             required => 1,
2840             default => sub { '' },
2841             );
2842              
2843              
2844             }
2845              
2846             package Cucumber::Messages::PickleStep {
2847             $Cucumber::Messages::PickleStep::VERSION = '22.0.0';
2848             =head2 Cucumber::Messages::PickleStep
2849              
2850             =head3 DESCRIPTION
2851              
2852             Represents the PickleStep message in Cucumber's
2853             L.
2854              
2855             *
2856             An executable step
2857              
2858             =head3 ATTRIBUTES
2859              
2860             =cut
2861              
2862 3     3   27 use Moo;
  3         7  
  3         18  
2863             extends 'Cucumber::Messages::Message';
2864              
2865 3     3   945 use Scalar::Util qw( blessed );
  3         6  
  3         514  
2866              
2867             my %types = (
2868             argument => 'Cucumber::Messages::PickleStepArgument',
2869             ast_node_ids => '[]string',
2870             id => 'string',
2871             type => '',
2872             text => 'string',
2873             );
2874              
2875             # This is a work-around for the fact that Moo doesn't have introspection
2876             # and Perl doesn't have boolean values...
2877             sub _types {
2878 0     0     return \%types;
2879             }
2880              
2881              
2882              
2883             =head4 argument
2884              
2885              
2886             =cut
2887              
2888             has argument =>
2889             (is => 'ro',
2890             );
2891              
2892              
2893             =head4 ast_node_ids
2894              
2895             References the IDs of the source of the step. For Gherkin, this can be
2896             the ID of a Step, and possibly also the ID of a TableRow
2897              
2898             =cut
2899              
2900             has ast_node_ids =>
2901             (is => 'ro',
2902             required => 1,
2903             default => sub { [] },
2904             );
2905              
2906              
2907             =head4 id
2908              
2909             A unique ID for the PickleStep
2910              
2911             =cut
2912              
2913             has id =>
2914             (is => 'ro',
2915             required => 1,
2916             default => sub { '' },
2917             );
2918              
2919              
2920             =head4 type
2921              
2922             The context in which the step was specified: context (Given), action (When) or outcome (Then).
2923              
2924             Note that the keywords `But` and `And` inherit their meaning from prior steps and the `*` 'keyword' doesn't have specific meaning (hence Unknown)
2925              
2926              
2927             Available constants for valid values of this field:
2928              
2929             =over
2930              
2931             =item * TYPE_UNKNOWN
2932              
2933             =item * TYPE_CONTEXT
2934              
2935             =item * TYPE_ACTION
2936              
2937             =item * TYPE_OUTCOME
2938              
2939             =back
2940              
2941             =cut
2942              
2943              
2944             use constant {
2945 3         608 TYPE_UNKNOWN => 'Unknown',
2946             TYPE_CONTEXT => 'Context',
2947             TYPE_ACTION => 'Action',
2948             TYPE_OUTCOME => 'Outcome',
2949 3     3   21 };
  3         6  
2950              
2951             has type =>
2952             (is => 'ro',
2953             );
2954              
2955              
2956             =head4 text
2957              
2958              
2959             =cut
2960              
2961             has text =>
2962             (is => 'ro',
2963             required => 1,
2964             default => sub { '' },
2965             );
2966              
2967              
2968             }
2969              
2970             package Cucumber::Messages::PickleStepArgument {
2971             $Cucumber::Messages::PickleStepArgument::VERSION = '22.0.0';
2972             =head2 Cucumber::Messages::PickleStepArgument
2973              
2974             =head3 DESCRIPTION
2975              
2976             Represents the PickleStepArgument message in Cucumber's
2977             L.
2978              
2979             An optional argument
2980              
2981             =head3 ATTRIBUTES
2982              
2983             =cut
2984              
2985 3     3   22 use Moo;
  3         6  
  3         13  
2986             extends 'Cucumber::Messages::Message';
2987              
2988 3     3   970 use Scalar::Util qw( blessed );
  3         6  
  3         452  
2989              
2990             my %types = (
2991             doc_string => 'Cucumber::Messages::PickleDocString',
2992             data_table => 'Cucumber::Messages::PickleTable',
2993             );
2994              
2995             # This is a work-around for the fact that Moo doesn't have introspection
2996             # and Perl doesn't have boolean values...
2997             sub _types {
2998 0     0     return \%types;
2999             }
3000              
3001              
3002              
3003             =head4 doc_string
3004              
3005              
3006             =cut
3007              
3008             has doc_string =>
3009             (is => 'ro',
3010             );
3011              
3012              
3013             =head4 data_table
3014              
3015              
3016             =cut
3017              
3018             has data_table =>
3019             (is => 'ro',
3020             );
3021              
3022              
3023             }
3024              
3025             package Cucumber::Messages::PickleTable {
3026             $Cucumber::Messages::PickleTable::VERSION = '22.0.0';
3027             =head2 Cucumber::Messages::PickleTable
3028              
3029             =head3 DESCRIPTION
3030              
3031             Represents the PickleTable message in Cucumber's
3032             L.
3033              
3034              
3035              
3036             =head3 ATTRIBUTES
3037              
3038             =cut
3039              
3040 3     3   40 use Moo;
  3         12  
  3         12  
3041             extends 'Cucumber::Messages::Message';
3042              
3043 3     3   974 use Scalar::Util qw( blessed );
  3         6  
  3         432  
3044              
3045             my %types = (
3046             rows => '[]Cucumber::Messages::PickleTableRow',
3047             );
3048              
3049             # This is a work-around for the fact that Moo doesn't have introspection
3050             # and Perl doesn't have boolean values...
3051             sub _types {
3052 0     0     return \%types;
3053             }
3054              
3055              
3056              
3057             =head4 rows
3058              
3059              
3060             =cut
3061              
3062             has rows =>
3063             (is => 'ro',
3064             required => 1,
3065             default => sub { [] },
3066             );
3067              
3068              
3069             }
3070              
3071             package Cucumber::Messages::PickleTableCell {
3072             $Cucumber::Messages::PickleTableCell::VERSION = '22.0.0';
3073             =head2 Cucumber::Messages::PickleTableCell
3074              
3075             =head3 DESCRIPTION
3076              
3077             Represents the PickleTableCell message in Cucumber's
3078             L.
3079              
3080              
3081              
3082             =head3 ATTRIBUTES
3083              
3084             =cut
3085              
3086 3     3   29 use Moo;
  3         7  
  3         10  
3087             extends 'Cucumber::Messages::Message';
3088              
3089 3     3   987 use Scalar::Util qw( blessed );
  3         6  
  3         430  
3090              
3091             my %types = (
3092             value => 'string',
3093             );
3094              
3095             # This is a work-around for the fact that Moo doesn't have introspection
3096             # and Perl doesn't have boolean values...
3097             sub _types {
3098 0     0     return \%types;
3099             }
3100              
3101              
3102              
3103             =head4 value
3104              
3105              
3106             =cut
3107              
3108             has value =>
3109             (is => 'ro',
3110             required => 1,
3111             default => sub { '' },
3112             );
3113              
3114              
3115             }
3116              
3117             package Cucumber::Messages::PickleTableRow {
3118             $Cucumber::Messages::PickleTableRow::VERSION = '22.0.0';
3119             =head2 Cucumber::Messages::PickleTableRow
3120              
3121             =head3 DESCRIPTION
3122              
3123             Represents the PickleTableRow message in Cucumber's
3124             L.
3125              
3126              
3127              
3128             =head3 ATTRIBUTES
3129              
3130             =cut
3131              
3132 3     3   21 use Moo;
  3         5  
  3         30  
3133             extends 'Cucumber::Messages::Message';
3134              
3135 3     3   972 use Scalar::Util qw( blessed );
  3         9  
  3         409  
3136              
3137             my %types = (
3138             cells => '[]Cucumber::Messages::PickleTableCell',
3139             );
3140              
3141             # This is a work-around for the fact that Moo doesn't have introspection
3142             # and Perl doesn't have boolean values...
3143             sub _types {
3144 0     0     return \%types;
3145             }
3146              
3147              
3148              
3149             =head4 cells
3150              
3151              
3152             =cut
3153              
3154             has cells =>
3155             (is => 'ro',
3156             required => 1,
3157             default => sub { [] },
3158             );
3159              
3160              
3161             }
3162              
3163             package Cucumber::Messages::PickleTag {
3164             $Cucumber::Messages::PickleTag::VERSION = '22.0.0';
3165             =head2 Cucumber::Messages::PickleTag
3166              
3167             =head3 DESCRIPTION
3168              
3169             Represents the PickleTag message in Cucumber's
3170             L.
3171              
3172             *
3173             A tag
3174              
3175             =head3 ATTRIBUTES
3176              
3177             =cut
3178              
3179 3     3   30 use Moo;
  3         14  
  3         19  
3180             extends 'Cucumber::Messages::Message';
3181              
3182 3     3   1089 use Scalar::Util qw( blessed );
  3         7  
  3         597  
3183              
3184             my %types = (
3185             name => 'string',
3186             ast_node_id => 'string',
3187             );
3188              
3189             # This is a work-around for the fact that Moo doesn't have introspection
3190             # and Perl doesn't have boolean values...
3191             sub _types {
3192 0     0     return \%types;
3193             }
3194              
3195              
3196              
3197             =head4 name
3198              
3199              
3200             =cut
3201              
3202             has name =>
3203             (is => 'ro',
3204             required => 1,
3205             default => sub { '' },
3206             );
3207              
3208              
3209             =head4 ast_node_id
3210              
3211             Points to the AST node this was created from
3212              
3213             =cut
3214              
3215             has ast_node_id =>
3216             (is => 'ro',
3217             required => 1,
3218             default => sub { '' },
3219             );
3220              
3221              
3222             }
3223              
3224             package Cucumber::Messages::Source {
3225             $Cucumber::Messages::Source::VERSION = '22.0.0';
3226             =head2 Cucumber::Messages::Source
3227              
3228             =head3 DESCRIPTION
3229              
3230             Represents the Source message in Cucumber's
3231             L.
3232              
3233             //// Source
3234              
3235             *
3236             A source file, typically a Gherkin document or Java/Ruby/JavaScript source code
3237              
3238             =head3 ATTRIBUTES
3239              
3240             =cut
3241              
3242 3     3   20 use Moo;
  3         46  
  3         22  
3243             extends 'Cucumber::Messages::Message';
3244              
3245 3     3   1019 use Scalar::Util qw( blessed );
  3         7  
  3         509  
3246              
3247             my %types = (
3248             uri => 'string',
3249             data => 'string',
3250             media_type => '',
3251             );
3252              
3253             # This is a work-around for the fact that Moo doesn't have introspection
3254             # and Perl doesn't have boolean values...
3255             sub _types {
3256 0     0     return \%types;
3257             }
3258              
3259              
3260              
3261             =head4 uri
3262              
3263             *
3264             The [URI](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier)
3265             of the source, typically a file path relative to the root directory
3266              
3267             =cut
3268              
3269             has uri =>
3270             (is => 'ro',
3271             required => 1,
3272             default => sub { '' },
3273             );
3274              
3275              
3276             =head4 data
3277              
3278             The contents of the file
3279              
3280             =cut
3281              
3282             has data =>
3283             (is => 'ro',
3284             required => 1,
3285             default => sub { '' },
3286             );
3287              
3288              
3289             =head4 media_type
3290              
3291             The media type of the file. Can be used to specify custom types, such as
3292             text/x.cucumber.gherkin+plain
3293              
3294              
3295             Available constants for valid values of this field:
3296              
3297             =over
3298              
3299             =item * MEDIATYPE_TEXT_X_CUCUMBER_GHERKIN_PLAIN
3300              
3301             =item * MEDIATYPE_TEXT_X_CUCUMBER_GHERKIN_MARKDOWN
3302              
3303             =back
3304              
3305             =cut
3306              
3307              
3308             use constant {
3309 3         424 MEDIATYPE_TEXT_X_CUCUMBER_GHERKIN_PLAIN => 'text/x.cucumber.gherkin+plain',
3310             MEDIATYPE_TEXT_X_CUCUMBER_GHERKIN_MARKDOWN => 'text/x.cucumber.gherkin+markdown',
3311 3     3   21 };
  3         7  
3312              
3313             has media_type =>
3314             (is => 'ro',
3315             required => 1,
3316             default => sub { MEDIATYPE_TEXT_X_CUCUMBER_GHERKIN_PLAIN },
3317             );
3318              
3319              
3320             }
3321              
3322             package Cucumber::Messages::SourceReference {
3323             $Cucumber::Messages::SourceReference::VERSION = '22.0.0';
3324             =head2 Cucumber::Messages::SourceReference
3325              
3326             =head3 DESCRIPTION
3327              
3328             Represents the SourceReference message in Cucumber's
3329             L.
3330              
3331             *
3332             Points to a [Source](#io.cucumber.messages.Source) identified by `uri` and a
3333             [Location](#io.cucumber.messages.Location) within that file.
3334              
3335             =head3 ATTRIBUTES
3336              
3337             =cut
3338              
3339 3     3   21 use Moo;
  3         21  
  3         16  
3340             extends 'Cucumber::Messages::Message';
3341              
3342 3     3   939 use Scalar::Util qw( blessed );
  3         16  
  3         549  
3343              
3344             my %types = (
3345             uri => 'string',
3346             java_method => 'Cucumber::Messages::JavaMethod',
3347             java_stack_trace_element => 'Cucumber::Messages::JavaStackTraceElement',
3348             location => 'Cucumber::Messages::Location',
3349             );
3350              
3351             # This is a work-around for the fact that Moo doesn't have introspection
3352             # and Perl doesn't have boolean values...
3353             sub _types {
3354 0     0     return \%types;
3355             }
3356              
3357              
3358              
3359             =head4 uri
3360              
3361              
3362             =cut
3363              
3364             has uri =>
3365             (is => 'ro',
3366             );
3367              
3368              
3369             =head4 java_method
3370              
3371              
3372             =cut
3373              
3374             has java_method =>
3375             (is => 'ro',
3376             );
3377              
3378              
3379             =head4 java_stack_trace_element
3380              
3381              
3382             =cut
3383              
3384             has java_stack_trace_element =>
3385             (is => 'ro',
3386             );
3387              
3388              
3389             =head4 location
3390              
3391              
3392             =cut
3393              
3394             has location =>
3395             (is => 'ro',
3396             );
3397              
3398              
3399             }
3400              
3401             package Cucumber::Messages::JavaMethod {
3402             $Cucumber::Messages::JavaMethod::VERSION = '22.0.0';
3403             =head2 Cucumber::Messages::JavaMethod
3404              
3405             =head3 DESCRIPTION
3406              
3407             Represents the JavaMethod message in Cucumber's
3408             L.
3409              
3410              
3411              
3412             =head3 ATTRIBUTES
3413              
3414             =cut
3415              
3416 3     3   20 use Moo;
  3         7  
  3         22  
3417             extends 'Cucumber::Messages::Message';
3418              
3419 3     3   907 use Scalar::Util qw( blessed );
  3         6  
  3         725  
3420              
3421             my %types = (
3422             class_name => 'string',
3423             method_name => 'string',
3424             method_parameter_types => '[]string',
3425             );
3426              
3427             # This is a work-around for the fact that Moo doesn't have introspection
3428             # and Perl doesn't have boolean values...
3429             sub _types {
3430 0     0     return \%types;
3431             }
3432              
3433              
3434              
3435             =head4 class_name
3436              
3437              
3438             =cut
3439              
3440             has class_name =>
3441             (is => 'ro',
3442             required => 1,
3443             default => sub { '' },
3444             );
3445              
3446              
3447             =head4 method_name
3448              
3449              
3450             =cut
3451              
3452             has method_name =>
3453             (is => 'ro',
3454             required => 1,
3455             default => sub { '' },
3456             );
3457              
3458              
3459             =head4 method_parameter_types
3460              
3461              
3462             =cut
3463              
3464             has method_parameter_types =>
3465             (is => 'ro',
3466             required => 1,
3467             default => sub { [] },
3468             );
3469              
3470              
3471             }
3472              
3473             package Cucumber::Messages::JavaStackTraceElement {
3474             $Cucumber::Messages::JavaStackTraceElement::VERSION = '22.0.0';
3475             =head2 Cucumber::Messages::JavaStackTraceElement
3476              
3477             =head3 DESCRIPTION
3478              
3479             Represents the JavaStackTraceElement message in Cucumber's
3480             L.
3481              
3482              
3483              
3484             =head3 ATTRIBUTES
3485              
3486             =cut
3487              
3488 3     3   21 use Moo;
  3         6  
  3         20  
3489             extends 'Cucumber::Messages::Message';
3490              
3491 3     3   977 use Scalar::Util qw( blessed );
  3         6  
  3         678  
3492              
3493             my %types = (
3494             class_name => 'string',
3495             file_name => 'string',
3496             method_name => 'string',
3497             );
3498              
3499             # This is a work-around for the fact that Moo doesn't have introspection
3500             # and Perl doesn't have boolean values...
3501             sub _types {
3502 0     0     return \%types;
3503             }
3504              
3505              
3506              
3507             =head4 class_name
3508              
3509              
3510             =cut
3511              
3512             has class_name =>
3513             (is => 'ro',
3514             required => 1,
3515             default => sub { '' },
3516             );
3517              
3518              
3519             =head4 file_name
3520              
3521              
3522             =cut
3523              
3524             has file_name =>
3525             (is => 'ro',
3526             required => 1,
3527             default => sub { '' },
3528             );
3529              
3530              
3531             =head4 method_name
3532              
3533              
3534             =cut
3535              
3536             has method_name =>
3537             (is => 'ro',
3538             required => 1,
3539             default => sub { '' },
3540             );
3541              
3542              
3543             }
3544              
3545             package Cucumber::Messages::StepDefinition {
3546             $Cucumber::Messages::StepDefinition::VERSION = '22.0.0';
3547             =head2 Cucumber::Messages::StepDefinition
3548              
3549             =head3 DESCRIPTION
3550              
3551             Represents the StepDefinition message in Cucumber's
3552             L.
3553              
3554              
3555              
3556             =head3 ATTRIBUTES
3557              
3558             =cut
3559              
3560 3     3   21 use Moo;
  3         7  
  3         14  
3561             extends 'Cucumber::Messages::Message';
3562              
3563 3     3   1067 use Scalar::Util qw( blessed );
  3         19  
  3         644  
3564              
3565             my %types = (
3566             id => 'string',
3567             pattern => 'Cucumber::Messages::StepDefinitionPattern',
3568             source_reference => 'Cucumber::Messages::SourceReference',
3569             );
3570              
3571             # This is a work-around for the fact that Moo doesn't have introspection
3572             # and Perl doesn't have boolean values...
3573             sub _types {
3574 0     0     return \%types;
3575             }
3576              
3577              
3578              
3579             =head4 id
3580              
3581              
3582             =cut
3583              
3584             has id =>
3585             (is => 'ro',
3586             required => 1,
3587             default => sub { '' },
3588             );
3589              
3590              
3591             =head4 pattern
3592              
3593              
3594             =cut
3595              
3596             has pattern =>
3597             (is => 'ro',
3598             required => 1,
3599             default => sub { Cucumber::Messages::StepDefinitionPattern->new() },
3600             );
3601              
3602              
3603             =head4 source_reference
3604              
3605              
3606             =cut
3607              
3608             has source_reference =>
3609             (is => 'ro',
3610             required => 1,
3611             default => sub { Cucumber::Messages::SourceReference->new() },
3612             );
3613              
3614              
3615             }
3616              
3617             package Cucumber::Messages::StepDefinitionPattern {
3618             $Cucumber::Messages::StepDefinitionPattern::VERSION = '22.0.0';
3619             =head2 Cucumber::Messages::StepDefinitionPattern
3620              
3621             =head3 DESCRIPTION
3622              
3623             Represents the StepDefinitionPattern message in Cucumber's
3624             L.
3625              
3626              
3627              
3628             =head3 ATTRIBUTES
3629              
3630             =cut
3631              
3632 3     3   20 use Moo;
  3         9  
  3         13  
3633             extends 'Cucumber::Messages::Message';
3634              
3635 3     3   1033 use Scalar::Util qw( blessed );
  3         13  
  3         386  
3636              
3637             my %types = (
3638             source => 'string',
3639             type => '',
3640             );
3641              
3642             # This is a work-around for the fact that Moo doesn't have introspection
3643             # and Perl doesn't have boolean values...
3644             sub _types {
3645 0     0     return \%types;
3646             }
3647              
3648              
3649              
3650             =head4 source
3651              
3652              
3653             =cut
3654              
3655             has source =>
3656             (is => 'ro',
3657             required => 1,
3658             default => sub { '' },
3659             );
3660              
3661              
3662             =head4 type
3663              
3664              
3665              
3666             Available constants for valid values of this field:
3667              
3668             =over
3669              
3670             =item * TYPE_CUCUMBER_EXPRESSION
3671              
3672             =item * TYPE_REGULAR_EXPRESSION
3673              
3674             =back
3675              
3676             =cut
3677              
3678              
3679             use constant {
3680 3         519 TYPE_CUCUMBER_EXPRESSION => 'CUCUMBER_EXPRESSION',
3681             TYPE_REGULAR_EXPRESSION => 'REGULAR_EXPRESSION',
3682 3     3   21 };
  3         7  
3683              
3684             has type =>
3685             (is => 'ro',
3686             required => 1,
3687             default => sub { TYPE_CUCUMBER_EXPRESSION },
3688             );
3689              
3690              
3691             }
3692              
3693             package Cucumber::Messages::TestCase {
3694             $Cucumber::Messages::TestCase::VERSION = '22.0.0';
3695             =head2 Cucumber::Messages::TestCase
3696              
3697             =head3 DESCRIPTION
3698              
3699             Represents the TestCase message in Cucumber's
3700             L.
3701              
3702             //// TestCases
3703              
3704             *
3705             A `TestCase` contains a sequence of `TestStep`s.
3706              
3707             =head3 ATTRIBUTES
3708              
3709             =cut
3710              
3711 3     3   20 use Moo;
  3         5  
  3         23  
3712             extends 'Cucumber::Messages::Message';
3713              
3714 3     3   1061 use Scalar::Util qw( blessed );
  3         11  
  3         604  
3715              
3716             my %types = (
3717             id => 'string',
3718             pickle_id => 'string',
3719             test_steps => '[]Cucumber::Messages::TestStep',
3720             );
3721              
3722             # This is a work-around for the fact that Moo doesn't have introspection
3723             # and Perl doesn't have boolean values...
3724             sub _types {
3725 0     0     return \%types;
3726             }
3727              
3728              
3729              
3730             =head4 id
3731              
3732              
3733             =cut
3734              
3735             has id =>
3736             (is => 'ro',
3737             required => 1,
3738             default => sub { '' },
3739             );
3740              
3741              
3742             =head4 pickle_id
3743              
3744             The ID of the `Pickle` this `TestCase` is derived from.
3745              
3746             =cut
3747              
3748             has pickle_id =>
3749             (is => 'ro',
3750             required => 1,
3751             default => sub { '' },
3752             );
3753              
3754              
3755             =head4 test_steps
3756              
3757              
3758             =cut
3759              
3760             has test_steps =>
3761             (is => 'ro',
3762             required => 1,
3763             default => sub { [] },
3764             );
3765              
3766              
3767             }
3768              
3769             package Cucumber::Messages::Group {
3770             $Cucumber::Messages::Group::VERSION = '22.0.0';
3771             =head2 Cucumber::Messages::Group
3772              
3773             =head3 DESCRIPTION
3774              
3775             Represents the Group message in Cucumber's
3776             L.
3777              
3778              
3779              
3780             =head3 ATTRIBUTES
3781              
3782             =cut
3783              
3784 3     3   22 use Moo;
  3         6  
  3         12  
3785             extends 'Cucumber::Messages::Message';
3786              
3787 3     3   1003 use Scalar::Util qw( blessed );
  3         14  
  3         587  
3788              
3789             my %types = (
3790             children => '[]Cucumber::Messages::Group',
3791             start => 'number',
3792             value => 'string',
3793             );
3794              
3795             # This is a work-around for the fact that Moo doesn't have introspection
3796             # and Perl doesn't have boolean values...
3797             sub _types {
3798 0     0     return \%types;
3799             }
3800              
3801              
3802              
3803             =head4 children
3804              
3805              
3806             =cut
3807              
3808             has children =>
3809             (is => 'ro',
3810             required => 1,
3811             default => sub { [] },
3812             );
3813              
3814              
3815             =head4 start
3816              
3817              
3818             =cut
3819              
3820             has start =>
3821             (is => 'ro',
3822             );
3823              
3824              
3825             =head4 value
3826              
3827              
3828             =cut
3829              
3830             has value =>
3831             (is => 'ro',
3832             );
3833              
3834              
3835             }
3836              
3837             package Cucumber::Messages::StepMatchArgument {
3838             $Cucumber::Messages::StepMatchArgument::VERSION = '22.0.0';
3839             =head2 Cucumber::Messages::StepMatchArgument
3840              
3841             =head3 DESCRIPTION
3842              
3843             Represents the StepMatchArgument message in Cucumber's
3844             L.
3845              
3846             *
3847             Represents a single argument extracted from a step match and passed to a step definition.
3848             This is used for the following purposes:
3849             - Construct an argument to pass to a step definition (possibly through a parameter type transform)
3850             - Highlight the matched parameter in rich formatters such as the HTML formatter
3851              
3852             This message closely matches the `Argument` class in the `cucumber-expressions` library.
3853              
3854             =head3 ATTRIBUTES
3855              
3856             =cut
3857              
3858 3     3   35 use Moo;
  3         6  
  3         12  
3859             extends 'Cucumber::Messages::Message';
3860              
3861 3     3   983 use Scalar::Util qw( blessed );
  3         6  
  3         499  
3862              
3863             my %types = (
3864             group => 'Cucumber::Messages::Group',
3865             parameter_type_name => 'string',
3866             );
3867              
3868             # This is a work-around for the fact that Moo doesn't have introspection
3869             # and Perl doesn't have boolean values...
3870             sub _types {
3871 0     0     return \%types;
3872             }
3873              
3874              
3875              
3876             =head4 group
3877              
3878             *
3879             Represents the outermost capture group of an argument. This message closely matches the
3880             `Group` class in the `cucumber-expressions` library.
3881              
3882             =cut
3883              
3884             has group =>
3885             (is => 'ro',
3886             required => 1,
3887             default => sub { Cucumber::Messages::Group->new() },
3888             );
3889              
3890              
3891             =head4 parameter_type_name
3892              
3893              
3894             =cut
3895              
3896             has parameter_type_name =>
3897             (is => 'ro',
3898             );
3899              
3900              
3901             }
3902              
3903             package Cucumber::Messages::StepMatchArgumentsList {
3904             $Cucumber::Messages::StepMatchArgumentsList::VERSION = '22.0.0';
3905             =head2 Cucumber::Messages::StepMatchArgumentsList
3906              
3907             =head3 DESCRIPTION
3908              
3909             Represents the StepMatchArgumentsList message in Cucumber's
3910             L.
3911              
3912              
3913              
3914             =head3 ATTRIBUTES
3915              
3916             =cut
3917              
3918 3     3   21 use Moo;
  3         5  
  3         31  
3919             extends 'Cucumber::Messages::Message';
3920              
3921 3     3   1026 use Scalar::Util qw( blessed );
  3         6  
  3         443  
3922              
3923             my %types = (
3924             step_match_arguments => '[]Cucumber::Messages::StepMatchArgument',
3925             );
3926              
3927             # This is a work-around for the fact that Moo doesn't have introspection
3928             # and Perl doesn't have boolean values...
3929             sub _types {
3930 0     0     return \%types;
3931             }
3932              
3933              
3934              
3935             =head4 step_match_arguments
3936              
3937              
3938             =cut
3939              
3940             has step_match_arguments =>
3941             (is => 'ro',
3942             required => 1,
3943             default => sub { [] },
3944             );
3945              
3946              
3947             }
3948              
3949             package Cucumber::Messages::TestStep {
3950             $Cucumber::Messages::TestStep::VERSION = '22.0.0';
3951             =head2 Cucumber::Messages::TestStep
3952              
3953             =head3 DESCRIPTION
3954              
3955             Represents the TestStep message in Cucumber's
3956             L.
3957              
3958             *
3959             A `TestStep` is derived from either a `PickleStep`
3960             combined with a `StepDefinition`, or from a `Hook`.
3961              
3962             =head3 ATTRIBUTES
3963              
3964             =cut
3965              
3966 3     3   32 use Moo;
  3         7  
  3         20  
3967             extends 'Cucumber::Messages::Message';
3968              
3969 3     3   1135 use Scalar::Util qw( blessed );
  3         27  
  3         576  
3970              
3971             my %types = (
3972             hook_id => 'string',
3973             id => 'string',
3974             pickle_step_id => 'string',
3975             step_definition_ids => '[]string',
3976             step_match_arguments_lists => '[]Cucumber::Messages::StepMatchArgumentsList',
3977             );
3978              
3979             # This is a work-around for the fact that Moo doesn't have introspection
3980             # and Perl doesn't have boolean values...
3981             sub _types {
3982 0     0     return \%types;
3983             }
3984              
3985              
3986              
3987             =head4 hook_id
3988              
3989             Pointer to the `Hook` (if derived from a Hook)
3990              
3991             =cut
3992              
3993             has hook_id =>
3994             (is => 'ro',
3995             );
3996              
3997              
3998             =head4 id
3999              
4000              
4001             =cut
4002              
4003             has id =>
4004             (is => 'ro',
4005             required => 1,
4006             default => sub { '' },
4007             );
4008              
4009              
4010             =head4 pickle_step_id
4011              
4012             Pointer to the `PickleStep` (if derived from a `PickleStep`)
4013              
4014             =cut
4015              
4016             has pickle_step_id =>
4017             (is => 'ro',
4018             );
4019              
4020              
4021             =head4 step_definition_ids
4022              
4023             Pointer to all the matching `StepDefinition`s (if derived from a `PickleStep`)
4024              
4025             =cut
4026              
4027             has step_definition_ids =>
4028             (is => 'ro',
4029             );
4030              
4031              
4032             =head4 step_match_arguments_lists
4033              
4034             A list of list of StepMatchArgument (if derived from a `PickleStep`).
4035             Each element represents a matching step definition. A size of 0 means `UNDEFINED`,
4036             and a size of 2+ means `AMBIGUOUS`
4037              
4038             =cut
4039              
4040             has step_match_arguments_lists =>
4041             (is => 'ro',
4042             );
4043              
4044              
4045             }
4046              
4047             package Cucumber::Messages::TestCaseFinished {
4048             $Cucumber::Messages::TestCaseFinished::VERSION = '22.0.0';
4049             =head2 Cucumber::Messages::TestCaseFinished
4050              
4051             =head3 DESCRIPTION
4052              
4053             Represents the TestCaseFinished message in Cucumber's
4054             L.
4055              
4056              
4057              
4058             =head3 ATTRIBUTES
4059              
4060             =cut
4061              
4062 3     3   23 use Moo;
  3         22  
  3         12  
4063             extends 'Cucumber::Messages::Message';
4064              
4065 3     3   1003 use Scalar::Util qw( blessed );
  3         20  
  3         665  
4066              
4067             my %types = (
4068             test_case_started_id => 'string',
4069             timestamp => 'Cucumber::Messages::Timestamp',
4070             will_be_retried => 'boolean',
4071             );
4072              
4073             # This is a work-around for the fact that Moo doesn't have introspection
4074             # and Perl doesn't have boolean values...
4075             sub _types {
4076 0     0     return \%types;
4077             }
4078              
4079              
4080              
4081             =head4 test_case_started_id
4082              
4083              
4084             =cut
4085              
4086             has test_case_started_id =>
4087             (is => 'ro',
4088             required => 1,
4089             default => sub { '' },
4090             );
4091              
4092              
4093             =head4 timestamp
4094              
4095              
4096             =cut
4097              
4098             has timestamp =>
4099             (is => 'ro',
4100             required => 1,
4101             default => sub { Cucumber::Messages::Timestamp->new() },
4102             );
4103              
4104              
4105             =head4 will_be_retried
4106              
4107              
4108             =cut
4109              
4110             has will_be_retried =>
4111             (is => 'ro',
4112             required => 1,
4113             default => sub { '' },
4114             );
4115              
4116              
4117             }
4118              
4119             package Cucumber::Messages::TestCaseStarted {
4120             $Cucumber::Messages::TestCaseStarted::VERSION = '22.0.0';
4121             =head2 Cucumber::Messages::TestCaseStarted
4122              
4123             =head3 DESCRIPTION
4124              
4125             Represents the TestCaseStarted message in Cucumber's
4126             L.
4127              
4128              
4129              
4130             =head3 ATTRIBUTES
4131              
4132             =cut
4133              
4134 3     3   27 use Moo;
  3         19  
  3         13  
4135             extends 'Cucumber::Messages::Message';
4136              
4137 3     3   1045 use Scalar::Util qw( blessed );
  3         7  
  3         899  
4138              
4139             my %types = (
4140             attempt => 'number',
4141             id => 'string',
4142             test_case_id => 'string',
4143             worker_id => 'string',
4144             timestamp => 'Cucumber::Messages::Timestamp',
4145             );
4146              
4147             # This is a work-around for the fact that Moo doesn't have introspection
4148             # and Perl doesn't have boolean values...
4149             sub _types {
4150 0     0     return \%types;
4151             }
4152              
4153              
4154              
4155             =head4 attempt
4156              
4157             *
4158             The first attempt should have value 0, and for each retry the value
4159             should increase by 1.
4160              
4161             =cut
4162              
4163             has attempt =>
4164             (is => 'ro',
4165             required => 1,
4166             default => sub { 0 },
4167             );
4168              
4169              
4170             =head4 id
4171              
4172             *
4173             Because a `TestCase` can be run multiple times (in case of a retry),
4174             we use this field to group messages relating to the same attempt.
4175              
4176             =cut
4177              
4178             has id =>
4179             (is => 'ro',
4180             required => 1,
4181             default => sub { '' },
4182             );
4183              
4184              
4185             =head4 test_case_id
4186              
4187              
4188             =cut
4189              
4190             has test_case_id =>
4191             (is => 'ro',
4192             required => 1,
4193             default => sub { '' },
4194             );
4195              
4196              
4197             =head4 worker_id
4198              
4199             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.
4200              
4201             =cut
4202              
4203             has worker_id =>
4204             (is => 'ro',
4205             );
4206              
4207              
4208             =head4 timestamp
4209              
4210              
4211             =cut
4212              
4213             has timestamp =>
4214             (is => 'ro',
4215             required => 1,
4216             default => sub { Cucumber::Messages::Timestamp->new() },
4217             );
4218              
4219              
4220             }
4221              
4222             package Cucumber::Messages::TestRunFinished {
4223             $Cucumber::Messages::TestRunFinished::VERSION = '22.0.0';
4224             =head2 Cucumber::Messages::TestRunFinished
4225              
4226             =head3 DESCRIPTION
4227              
4228             Represents the TestRunFinished message in Cucumber's
4229             L.
4230              
4231              
4232              
4233             =head3 ATTRIBUTES
4234              
4235             =cut
4236              
4237 3     3   23 use Moo;
  3         5  
  3         12  
4238             extends 'Cucumber::Messages::Message';
4239              
4240 3     3   1072 use Scalar::Util qw( blessed );
  3         7  
  3         761  
4241              
4242             my %types = (
4243             message => 'string',
4244             success => 'boolean',
4245             timestamp => 'Cucumber::Messages::Timestamp',
4246             exception => 'Cucumber::Messages::Exception',
4247             );
4248              
4249             # This is a work-around for the fact that Moo doesn't have introspection
4250             # and Perl doesn't have boolean values...
4251             sub _types {
4252 0     0     return \%types;
4253             }
4254              
4255              
4256              
4257             =head4 message
4258              
4259             An informative message about the test run. Typically additional information about failure, but not necessarily.
4260              
4261             =cut
4262              
4263             has message =>
4264             (is => 'ro',
4265             );
4266              
4267              
4268             =head4 success
4269              
4270             A test run is successful if all steps are either passed or skipped, all before/after hooks passed and no other exceptions where thrown.
4271              
4272             =cut
4273              
4274             has success =>
4275             (is => 'ro',
4276             required => 1,
4277             default => sub { '' },
4278             );
4279              
4280              
4281             =head4 timestamp
4282              
4283             Timestamp when the TestRun is finished
4284              
4285             =cut
4286              
4287             has timestamp =>
4288             (is => 'ro',
4289             required => 1,
4290             default => sub { Cucumber::Messages::Timestamp->new() },
4291             );
4292              
4293              
4294             =head4 exception
4295              
4296             Any exception thrown during the test run, if any. Does not include exceptions thrown while executing steps.
4297              
4298             =cut
4299              
4300             has exception =>
4301             (is => 'ro',
4302             );
4303              
4304              
4305             }
4306              
4307             package Cucumber::Messages::TestRunStarted {
4308             $Cucumber::Messages::TestRunStarted::VERSION = '22.0.0';
4309             =head2 Cucumber::Messages::TestRunStarted
4310              
4311             =head3 DESCRIPTION
4312              
4313             Represents the TestRunStarted message in Cucumber's
4314             L.
4315              
4316              
4317              
4318             =head3 ATTRIBUTES
4319              
4320             =cut
4321              
4322 3     3   26 use Moo;
  3         6  
  3         27  
4323             extends 'Cucumber::Messages::Message';
4324              
4325 3     3   1111 use Scalar::Util qw( blessed );
  3         9  
  3         434  
4326              
4327             my %types = (
4328             timestamp => 'Cucumber::Messages::Timestamp',
4329             );
4330              
4331             # This is a work-around for the fact that Moo doesn't have introspection
4332             # and Perl doesn't have boolean values...
4333             sub _types {
4334 0     0     return \%types;
4335             }
4336              
4337              
4338              
4339             =head4 timestamp
4340              
4341              
4342             =cut
4343              
4344             has timestamp =>
4345             (is => 'ro',
4346             required => 1,
4347             default => sub { Cucumber::Messages::Timestamp->new() },
4348             );
4349              
4350              
4351             }
4352              
4353             package Cucumber::Messages::TestStepFinished {
4354             $Cucumber::Messages::TestStepFinished::VERSION = '22.0.0';
4355             =head2 Cucumber::Messages::TestStepFinished
4356              
4357             =head3 DESCRIPTION
4358              
4359             Represents the TestStepFinished message in Cucumber's
4360             L.
4361              
4362              
4363              
4364             =head3 ATTRIBUTES
4365              
4366             =cut
4367              
4368 3     3   23 use Moo;
  3         9  
  3         15  
4369             extends 'Cucumber::Messages::Message';
4370              
4371 3     3   1053 use Scalar::Util qw( blessed );
  3         13  
  3         823  
4372              
4373             my %types = (
4374             test_case_started_id => 'string',
4375             test_step_id => 'string',
4376             test_step_result => 'Cucumber::Messages::TestStepResult',
4377             timestamp => 'Cucumber::Messages::Timestamp',
4378             );
4379              
4380             # This is a work-around for the fact that Moo doesn't have introspection
4381             # and Perl doesn't have boolean values...
4382             sub _types {
4383 0     0     return \%types;
4384             }
4385              
4386              
4387              
4388             =head4 test_case_started_id
4389              
4390              
4391             =cut
4392              
4393             has test_case_started_id =>
4394             (is => 'ro',
4395             required => 1,
4396             default => sub { '' },
4397             );
4398              
4399              
4400             =head4 test_step_id
4401              
4402              
4403             =cut
4404              
4405             has test_step_id =>
4406             (is => 'ro',
4407             required => 1,
4408             default => sub { '' },
4409             );
4410              
4411              
4412             =head4 test_step_result
4413              
4414              
4415             =cut
4416              
4417             has test_step_result =>
4418             (is => 'ro',
4419             required => 1,
4420             default => sub { Cucumber::Messages::TestStepResult->new() },
4421             );
4422              
4423              
4424             =head4 timestamp
4425              
4426              
4427             =cut
4428              
4429             has timestamp =>
4430             (is => 'ro',
4431             required => 1,
4432             default => sub { Cucumber::Messages::Timestamp->new() },
4433             );
4434              
4435              
4436             }
4437              
4438             package Cucumber::Messages::TestStepResult {
4439             $Cucumber::Messages::TestStepResult::VERSION = '22.0.0';
4440             =head2 Cucumber::Messages::TestStepResult
4441              
4442             =head3 DESCRIPTION
4443              
4444             Represents the TestStepResult message in Cucumber's
4445             L.
4446              
4447              
4448              
4449             =head3 ATTRIBUTES
4450              
4451             =cut
4452              
4453 3     3   21 use Moo;
  3         20  
  3         20  
4454             extends 'Cucumber::Messages::Message';
4455              
4456 3     3   948 use Scalar::Util qw( blessed );
  3         7  
  3         622  
4457              
4458             my %types = (
4459             duration => 'Cucumber::Messages::Duration',
4460             message => 'string',
4461             status => '',
4462             exception => 'Cucumber::Messages::Exception',
4463             );
4464              
4465             # This is a work-around for the fact that Moo doesn't have introspection
4466             # and Perl doesn't have boolean values...
4467             sub _types {
4468 0     0     return \%types;
4469             }
4470              
4471              
4472              
4473             =head4 duration
4474              
4475              
4476             =cut
4477              
4478             has duration =>
4479             (is => 'ro',
4480             required => 1,
4481             default => sub { Cucumber::Messages::Duration->new() },
4482             );
4483              
4484              
4485             =head4 message
4486              
4487             An arbitrary bit of information that explains this result. This can be a stack trace of anything else.
4488              
4489             =cut
4490              
4491             has message =>
4492             (is => 'ro',
4493             );
4494              
4495              
4496             =head4 status
4497              
4498              
4499              
4500             Available constants for valid values of this field:
4501              
4502             =over
4503              
4504             =item * STATUS_UNKNOWN
4505              
4506             =item * STATUS_PASSED
4507              
4508             =item * STATUS_SKIPPED
4509              
4510             =item * STATUS_PENDING
4511              
4512             =item * STATUS_UNDEFINED
4513              
4514             =item * STATUS_AMBIGUOUS
4515              
4516             =item * STATUS_FAILED
4517              
4518             =back
4519              
4520             =cut
4521              
4522              
4523             use constant {
4524 3         671 STATUS_UNKNOWN => 'UNKNOWN',
4525             STATUS_PASSED => 'PASSED',
4526             STATUS_SKIPPED => 'SKIPPED',
4527             STATUS_PENDING => 'PENDING',
4528             STATUS_UNDEFINED => 'UNDEFINED',
4529             STATUS_AMBIGUOUS => 'AMBIGUOUS',
4530             STATUS_FAILED => 'FAILED',
4531 3     3   22 };
  3         17  
4532              
4533             has status =>
4534             (is => 'ro',
4535             required => 1,
4536             default => sub { STATUS_UNKNOWN },
4537             );
4538              
4539              
4540             =head4 exception
4541              
4542             Exception thrown while executing this step, if any.
4543              
4544             =cut
4545              
4546             has exception =>
4547             (is => 'ro',
4548             );
4549              
4550              
4551             }
4552              
4553             package Cucumber::Messages::TestStepStarted {
4554             $Cucumber::Messages::TestStepStarted::VERSION = '22.0.0';
4555             =head2 Cucumber::Messages::TestStepStarted
4556              
4557             =head3 DESCRIPTION
4558              
4559             Represents the TestStepStarted message in Cucumber's
4560             L.
4561              
4562              
4563              
4564             =head3 ATTRIBUTES
4565              
4566             =cut
4567              
4568 3     3   21 use Moo;
  3         7  
  3         25  
4569             extends 'Cucumber::Messages::Message';
4570              
4571 3     3   957 use Scalar::Util qw( blessed );
  3         14  
  3         803  
4572              
4573             my %types = (
4574             test_case_started_id => 'string',
4575             test_step_id => 'string',
4576             timestamp => 'Cucumber::Messages::Timestamp',
4577             );
4578              
4579             # This is a work-around for the fact that Moo doesn't have introspection
4580             # and Perl doesn't have boolean values...
4581             sub _types {
4582 0     0     return \%types;
4583             }
4584              
4585              
4586              
4587             =head4 test_case_started_id
4588              
4589              
4590             =cut
4591              
4592             has test_case_started_id =>
4593             (is => 'ro',
4594             required => 1,
4595             default => sub { '' },
4596             );
4597              
4598              
4599             =head4 test_step_id
4600              
4601              
4602             =cut
4603              
4604             has test_step_id =>
4605             (is => 'ro',
4606             required => 1,
4607             default => sub { '' },
4608             );
4609              
4610              
4611             =head4 timestamp
4612              
4613              
4614             =cut
4615              
4616             has timestamp =>
4617             (is => 'ro',
4618             required => 1,
4619             default => sub { Cucumber::Messages::Timestamp->new() },
4620             );
4621              
4622              
4623             }
4624              
4625             package Cucumber::Messages::Timestamp {
4626             $Cucumber::Messages::Timestamp::VERSION = '22.0.0';
4627             =head2 Cucumber::Messages::Timestamp
4628              
4629             =head3 DESCRIPTION
4630              
4631             Represents the Timestamp message in Cucumber's
4632             L.
4633              
4634              
4635              
4636             =head3 ATTRIBUTES
4637              
4638             =cut
4639              
4640 3     3   21 use Moo;
  3         6  
  3         16  
4641             extends 'Cucumber::Messages::Message';
4642              
4643 3     3   968 use Scalar::Util qw( blessed );
  3         7  
  3         602  
4644              
4645             my %types = (
4646             seconds => 'number',
4647             nanos => 'number',
4648             );
4649              
4650             # This is a work-around for the fact that Moo doesn't have introspection
4651             # and Perl doesn't have boolean values...
4652             sub _types {
4653 0     0     return \%types;
4654             }
4655              
4656              
4657              
4658             =head4 seconds
4659              
4660             Represents seconds of UTC time since Unix epoch
4661             1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
4662             9999-12-31T23:59:59Z inclusive.
4663              
4664             =cut
4665              
4666             has seconds =>
4667             (is => 'ro',
4668             required => 1,
4669             default => sub { 0 },
4670             );
4671              
4672              
4673             =head4 nanos
4674              
4675             Non-negative fractions of a second at nanosecond resolution. Negative
4676             second values with fractions must still have non-negative nanos values
4677             that count forward in time. Must be from 0 to 999,999,999
4678             inclusive.
4679              
4680             =cut
4681              
4682             has nanos =>
4683             (is => 'ro',
4684             required => 1,
4685             default => sub { 0 },
4686             );
4687              
4688              
4689             }
4690              
4691             package Cucumber::Messages::UndefinedParameterType {
4692             $Cucumber::Messages::UndefinedParameterType::VERSION = '22.0.0';
4693             =head2 Cucumber::Messages::UndefinedParameterType
4694              
4695             =head3 DESCRIPTION
4696              
4697             Represents the UndefinedParameterType message in Cucumber's
4698             L.
4699              
4700              
4701              
4702             =head3 ATTRIBUTES
4703              
4704             =cut
4705              
4706 3     3   22 use Moo;
  3         7  
  3         12  
4707             extends 'Cucumber::Messages::Message';
4708              
4709 3     3   1003 use Scalar::Util qw( blessed );
  3         8  
  3         1211  
4710              
4711             my %types = (
4712             expression => 'string',
4713             name => 'string',
4714             );
4715              
4716             # This is a work-around for the fact that Moo doesn't have introspection
4717             # and Perl doesn't have boolean values...
4718             sub _types {
4719 0     0     return \%types;
4720             }
4721              
4722              
4723              
4724             =head4 expression
4725              
4726              
4727             =cut
4728              
4729             has expression =>
4730             (is => 'ro',
4731             required => 1,
4732             default => sub { '' },
4733             );
4734              
4735              
4736             =head4 name
4737              
4738              
4739             =cut
4740              
4741             has name =>
4742             (is => 'ro',
4743             required => 1,
4744             default => sub { '' },
4745             );
4746              
4747              
4748             }
4749              
4750             1;
4751              
4752             __END__