App-Test-Generator
view release on metacpan or search on metacpan
t/SchemaExtractor_function.t view on Meta::CPAN
$e->_extract_parameters_from_signature(\%params,
'sub foo { my $self = shift; my $name = shift; }');
ok(exists $params{name}, '$name extracted from shift');
ok(!exists $params{self}, '$self excluded from shift');
};
subtest '_extract_parameters_from_signature() handles modern signature' => sub {
my $e = _extractor();
my %params;
$e->_extract_parameters_from_signature(\%params,
'sub foo($self, $x, $y = 5) { }');
ok(exists $params{x}, '$x extracted from modern sig');
ok(exists $params{y}, '$y extracted from modern sig');
};
# ==================================================================
# _parse_signature_parameter
# ==================================================================
subtest '_parse_signature_parameter() parses plain $name' => sub {
my $e = _extractor();
my $info = $e->_parse_signature_parameter('$name', 0);
is($info->{name}, 'name', 'name extracted');
is($info->{position}, 0, 'position set');
is($info->{optional}, 0, 'required by default');
};
subtest '_parse_signature_parameter() parses $name = default' => sub {
my $e = _extractor();
my $info = $e->_parse_signature_parameter('$count = 10', 1);
is($info->{name}, 'count', 'name extracted');
is($info->{optional}, 1, 'optional when default present');
is($info->{_default}, 10, 'default value stored');
};
subtest '_parse_signature_parameter() parses $name :Int type constraint' => sub {
my $e = _extractor();
my $info = $e->_parse_signature_parameter('$n :Int', 0);
is($info->{name}, 'n', 'name extracted');
is($info->{type}, 'integer', 'Int -> integer');
};
subtest '_parse_signature_parameter() parses @name as slurpy array' => sub {
my $e = _extractor();
my $info = $e->_parse_signature_parameter('@opts', 2);
is($info->{name}, 'opts', 'name extracted');
is($info->{type}, 'array', 'array type set');
ok($info->{slurpy}, 'slurpy flag set');
};
subtest '_parse_signature_parameter() parses %name as slurpy hash' => sub {
my $e = _extractor();
my $info = $e->_parse_signature_parameter('%opts', 2);
is($info->{name}, 'opts', 'name extracted');
is($info->{type}, 'hash', 'hash type set');
ok($info->{slurpy}, 'slurpy flag set');
};
subtest '_parse_signature_parameter() returns undef for unrecognised pattern' => sub {
my $e = _extractor();
my $info = $e->_parse_signature_parameter('not_a_param', 0);
ok(!defined $info, 'undef returned for unrecognised pattern');
};
# ==================================================================
# _extract_subroutine_attributes
# ==================================================================
subtest '_extract_subroutine_attributes() detects :lvalue attribute' => sub {
my $e = _extractor();
my $result = $e->_extract_subroutine_attributes('sub foo :lvalue { }');
ok($result->{lvalue}, ':lvalue detected');
};
subtest '_extract_subroutine_attributes() detects :Returns(Int) attribute' => sub {
my $e = _extractor();
my $result = $e->_extract_subroutine_attributes('sub foo :Returns(Int) { }');
is($result->{Returns}, 'Int', ':Returns(Int) detected');
};
subtest '_extract_subroutine_attributes() returns empty hashref when no attributes' => sub {
my $e = _extractor();
my $result = $e->_extract_subroutine_attributes('sub foo { return 1; }');
is_deeply($result, {}, 'no attributes -> empty hashref');
};
# ==================================================================
# _analyze_postfix_dereferencing
# ==================================================================
subtest '_analyze_postfix_dereferencing() detects ->@*' => sub {
my $e = _extractor();
my $result = $e->_analyze_postfix_dereferencing('my @a = $ref->@*;');
ok($result->{array_deref}, '->@* detected');
};
subtest '_analyze_postfix_dereferencing() detects ->%*' => sub {
my $e = _extractor();
my $result = $e->_analyze_postfix_dereferencing('my %h = $ref->%*;');
ok($result->{hash_deref}, '->%* detected');
};
subtest '_analyze_postfix_dereferencing() returns empty hashref when no derefs' => sub {
my $e = _extractor();
my $result = $e->_analyze_postfix_dereferencing('my $x = 1;');
is_deeply($result, {}, 'no derefs -> empty hashref');
};
# ==================================================================
# _extract_field_declarations
# ==================================================================
subtest '_extract_field_declarations() detects :param fields' => sub {
my $e = _extractor();
my $code = "field \$host :param = 'localhost';\n";
my $result = $e->_extract_field_declarations($code);
ok(exists $result->{host}, 'host field found');
ok($result->{host}{is_param}, ':param flag set');
};
subtest '_extract_field_declarations() detects :isa type constraint' => sub {
( run in 0.493 second using v1.01-cache-2.11-cpan-9581c071862 )