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 )