App-Test-Generator
view release on metacpan or search on metacpan
t/Generator_unit.t view on Meta::CPAN
my $tmpdir = tempdir(CLEANUP => 1);
my $outfile = File::Spec->catfile($tmpdir, 'modern.t');
capture(sub {
App::Test::Generator->generate(
schema_file => $schema,
output_file => $outfile,
);
});
ok(-f $outfile, 'output file created via modern API');
ok(-s $outfile, 'output file is non-empty via modern API');
};
subtest 'generate() modern API with schema_file key' => sub {
my $schema = _schema_file();
my ($out) = capture(sub {
eval { App::Test::Generator->generate({ schema_file => $schema }) };
});
is($@, '', "modern schema_file API did not croak: $@");
like($out, qr/use strict/, 'output contains use strict');
};
subtest 'generate() modern API with input_file key' => sub {
my $schema = _schema_file();
my ($out) = capture(sub {
eval { App::Test::Generator->generate({ input_file => $schema }) };
});
is($@, '', "modern input_file API did not croak: $@");
like($out, qr/use strict/, 'output contains use strict');
};
subtest 'generate() modern API with inline schema hashref' => sub {
my $schema = {
module => 'builtin',
function => 'inline_func',
input => { type => 'string' },
output => { type => 'string' },
};
my ($out) = capture(sub {
eval { App::Test::Generator->generate({ schema => $schema }) };
});
is($@, '', "inline schema hashref did not croak: $@");
like($out, qr/use strict/, 'output contains use strict for inline schema');
};
subtest 'generate() output varies with function name' => sub {
my $s1 = _schema_file(function => 'func_alpha');
my $s2 = _schema_file(function => 'func_beta');
my ($out1) = capture(sub { App::Test::Generator->generate($s1) });
my ($out2) = capture(sub { App::Test::Generator->generate($s2) });
isnt($out1, $out2, 'different function names produce different output');
};
subtest 'generate() respects seed in schema' => sub {
my $s1 = _schema_file(extra => 'seed: 42');
my $s2 = _schema_file(extra => 'seed: 42');
my ($out1) = capture(sub { App::Test::Generator->generate($s1) });
my ($out2) = capture(sub { App::Test::Generator->generate($s2) });
is($out1, $out2, 'same seed produces identical output');
};
subtest 'generate() respects iterations in schema' => sub {
my $schema = _schema_file(extra => 'iterations: 5');
my ($out) = capture(sub {
App::Test::Generator->generate($schema);
});
like($out, qr/5/, 'iteration count appears in output');
};
subtest 'generate() can be called as exported function' => sub {
my $schema = _schema_file();
my ($out) = capture(sub {
eval { App::Test::Generator->generate($schema) };
});
is($@, '', "exported generate() did not croak: $@");
like($out, qr/use strict/, 'output contains use strict');
};
subtest 'generate() croaks for missing schema file' => sub {
throws_ok(
sub {
capture(sub {
App::Test::Generator->generate('/no/such/schema.yml');
});
},
qr/Cannot|not found|does not exist|No such/i,
'missing schema file croaks',
);
};
done_testing();
( run in 0.546 second using v1.01-cache-2.11-cpan-71847e10f99 )