晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /usr/share/doc/perl-Sub-Exporter/t/ |
Upload File : |
#!/usr/bin/perl -T
use strict;
use warnings;
=head1 TEST PURPOSE
These tests check export group expansion, specifically the expansion of groups
that use group generators.
=cut
# XXX: The framework is stolen from expand-group. I guess it should be
# factored out. Whatever. -- rjbs, 2006-03-12
use Test::More tests => 12;
BEGIN { use_ok('Sub::Exporter'); }
my $alfa = sub { 'alfa' };
my $bravo = sub { 'bravo' };
my $returner = sub {
my ($class, $group, $arg, $collection) = @_;
my %given = (
class => $class,
group => $group,
arg => $arg,
collection => $collection,
);
return {
foo => sub { return { name => 'foo', %given }; },
bar => sub { return { name => 'bar', %given }; },
};
};
my $config = {
exports => [ ],
groups => {
alphabet => sub { { A => $alfa, b => $bravo } },
broken => sub { [ qw(this is broken because it is not a hashref) ] },
generated => $returner,
nested => [qw( :generated )],
},
collectors => [ 'col1' ],
};
my @single_tests = (
# [ comment, \@group, \@output ]
# [ "simple group 1", [ ':A' => undef ] => [ [ a => undef ] ] ],
[
"simple group generator",
[ -alphabet => undef ],
[ [ A => $alfa ], [ b => $bravo ] ],
],
[
"simple group generator with prefix",
[ -alphabet => { -prefix => 'prefix_' } ],
[ [ prefix_A => $alfa ], [ prefix_b => $bravo ] ],
],
);
for my $test (@single_tests) {
my ($label, $given, $expected) = @$test;
my @got = Sub::Exporter::_expand_group(
'Class',
$config,
$given,
{},
);
is_deeply(
[ sort { lc $a->[0] cmp lc $b->[0] } @got ],
$expected,
"expand_group: $label",
);
}
for my $test (@single_tests) {
my ($label, $given, $expected) = @$test;
my $got = Sub::Exporter::_expand_groups(
'Class',
$config,
[ $given ],
);
is_deeply(
[ sort { lc $a->[0] cmp lc $b->[0] } @$got ],
$expected,
"expand_groups: $label [single test]",
);
}
my @multi_tests = (
# [ $comment, \@groups, \@output ]
);
for my $test (@multi_tests) {
my ($label, $given, $expected) = @$test;
my $got = Sub::Exporter::_expand_groups(
'Class',
$config,
$given,
);
is_deeply($got, $expected, "expand_groups: $label");
}
##
eval {
Sub::Exporter::_expand_groups('Class', $config, [[ -broken => undef ]])
};
like($@,
qr/did not return a hash/,
"exception on non-hashref groupgen return",
);
##
{
my $got = Sub::Exporter::_expand_groups(
'Class',
$config,
[ [ -alphabet => undef ] ],
{},
);
my %code = map { $_->[0] => $_->[1] } @$got;
my $a = $code{A};
my $b = $code{b};
is($a->(), 'alfa', "generated 'a' sub does what we think");
is($b->(), 'bravo', "generated 'b' sub does what we think");
}
{
my $got = Sub::Exporter::_expand_groups(
'Class',
$config,
[ [ -generated => { xyz => 1 } ] ],
{ col1 => { value => 2 } },
);
my %code = map { $_->[0] => $_->[1] } @$got;
for (qw(foo bar)) {
is_deeply(
$code{$_}->(),
{
name => $_,
class => 'Class',
group => 'generated',
arg => { xyz => 1 },
collection => { col1 => { value => 2 } },
},
"generated foo does what we expect",
);
}
}
{
my $got = Sub::Exporter::_expand_groups(
'Class',
$config,
[ [ -nested => { xyz => 1 } ] ],
{ col1 => { value => 2 } },
);
my %code = map { $_->[0] => $_->[1] } @$got;
for (qw(foo bar)) {
is_deeply(
$code{$_}->(),
{
name => $_,
class => 'Class',
group => 'generated',
arg => { xyz => 1 },
collection => { col1 => { value => 2 } },
},
"generated foo (via nested group) does what we expect",
);
}
}