����JFIF���������
__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
#============================================================= -*-perl-*-
#
# t/stash-xs.t
#
# Template script testing (some elements of) the XS version of
# Template::Stash
#
# Written by Andy Wardley <abw@wardley.org>
#
# Copyright (C) 1996-2009 Andy Wardley. All Rights Reserved.
#
# This is free software; you can redistribute it and/or modify it
# under the same terms as Perl itself.
#
#========================================================================
use strict;
use warnings;
use lib qw( ./lib ../lib ../blib/lib ../blib/arch ./blib/lib ./blib/arch );
use Template::Constants qw( :status );
use Template;
use Template::Test;
use Template::Config;
use File::Spec;
# MacOS Catalina won't allow Dynaloader to load from relative paths
# Error: file system relative paths not allowed in hardened program
@INC = map { File::Spec->rel2abs($_) } @INC;
# only run the test when compiled with Template::Stash
if ( $Template::Config::STASH ne 'Template::Stash::XS' ) {
skip_all('Template::Config is not using Template::Stash::XS');
}
require Template::Stash::XS;
#------------------------------------------------------------------------
# define some simple objects for testing
#------------------------------------------------------------------------
package Buggy;
sub new { bless {}, shift }
sub croak { my $self = shift; die @_ }
package ListObject;
package HashObject;
sub hello {
my $self = shift;
return "Hello $self->{ planet }";
}
sub goodbye {
my $self = shift;
return $self->no_such_method();
}
sub now_is_the_time_to_test_a_very_long_method_to_see_what_happens {
my $self = shift;
return $self->this_method_does_not_exist();
}
#-----------------------------------------------------------------------
# another object without overloaded comparison.
# http://rt.cpan.org/Ticket/Display.html?id=24044
#-----------------------------------------------------------------------
package CmpOverloadObject;
use overload ('cmp' => 'compare_overload', '<=>', 'compare_overload');
sub new { bless {}, shift };
sub hello {
return "Hello";
}
sub compare_overload {
die "Mayhem!";
}
package main;
my $count = 20;
my $data = {
foo => 10,
bar => {
baz => 20,
},
baz => sub {
return {
boz => ($count += 10),
biz => (shift || '<undef>'),
};
},
obj => bless({
name => 'an object',
}, 'AnObject'),
bop => sub { return ( bless ({ name => 'an object' }, 'AnObject') ) },
listobj => bless([10, 20, 30], 'ListObject'),
hashobj => bless({ planet => 'World' }, 'HashObject'),
cmp_ol => CmpOverloadObject->new(),
clean => sub {
my $error = shift;
$error =~ s/(\s*\(.*?\))?\s+at.*$//;
return $error;
},
correct => sub { die @_ },
buggy => Buggy->new(),
str_eval_die => sub {
# This is to test bug RT#47929
eval "use No::Such::Module::Exists";
return "str_eval_die returned";
},
};
my $stash = Template::Stash::XS->new($data);
match( $stash->get('foo'), 10 );
match( $stash->get([ 'bar', 0, 'baz', 0 ]), 20 );
match( $stash->get('bar.baz'), 20 );
match( $stash->get('bar(10).baz'), 20 );
match( $stash->get('baz.boz'), 30 );
match( $stash->get('baz.boz'), 40 );
match( $stash->get('baz.biz'), '<undef>' );
match( $stash->get('baz(50).biz'), '<undef>' ); # args are ignored
#match( $stash->get('str_eval_die'), '' );
$stash->set( 'bar.buz' => 100 );
match( $stash->get('bar.buz'), 100 );
# test the dotop() method
match( $stash->dotop({ foo => 10 }, 'foo'), 10 );
my $stash_dbg = Template::Stash::XS->new({ %$data, _DEBUG => 1 });
my $ttlist = [
'default' => Template->new( STASH => $stash ),
'warn' => Template->new( STASH => $stash_dbg ),
];
test_expect(\*DATA, $ttlist, $data);
__DATA__
-- test --
-- name scalar list method --
[% foo = 'bar'; foo.join %]
-- expect --
bar
-- test --
a: [% a %]
-- expect --
a:
-- test --
-- use warn --
[% TRY; a; CATCH; "ERROR: $error"; END %]
-- expect --
ERROR: undef error - a is undefined
-- test --
-- use default --
[% myitem = 'foo' -%]
1: [% myitem %]
2: [% myitem.item %]
3: [% myitem.item.item %]
-- expect --
1: foo
2: foo
3: foo
-- test --
[% myitem = 'foo' -%]
[% "* $item\n" FOREACH item = myitem -%]
[% "+ $item\n" FOREACH item = myitem.list %]
-- expect --
* foo
+ foo
-- test --
[% myitem = 'foo' -%]
[% myitem.hash.value %]
-- expect --
foo
-- test --
[% myitem = 'foo'
mylist = [ 'one', myitem, 'three' ]
global.mylist = mylist
-%]
[% mylist.item %]
0: [% mylist.item(0) %]
1: [% mylist.item(1) %]
2: [% mylist.item(2) %]
-- expect --
one
0: one
1: foo
2: three
-- test --
[% "* $item\n" FOREACH item = global.mylist -%]
[% "+ $item\n" FOREACH item = global.mylist.list -%]
-- expect --
* one
* foo
* three
+ one
+ foo
+ three
-- test --
[% global.mylist.push('bar');
"* $item.key => $item.value\n" FOREACH item = global.mylist.hash -%]
-- expect --
* one => foo
* three => bar
-- test --
[% myhash = { msg => 'Hello World', things => global.mylist, a => 'alpha' };
global.myhash = myhash
-%]
* [% myhash.item('msg') %]
-- expect --
* Hello World
-- test --
[% global.myhash.delete('things') -%]
keys: [% global.myhash.keys.sort.join(', ') %]
-- expect --
keys: a, msg
-- test --
[% "* $item\n"
FOREACH item IN global.myhash.items.sort -%]
-- expect --
* a
* alpha
* Hello World
* msg
-- test --
[% items = [ 'foo', 'bar', 'baz' ];
take = [ 0, 2 ];
slice = items.$take;
slice.join(', ');
%]
-- expect --
foo, baz
-- test --
-- name slice of lemon --
[% items = {
foo = 'one',
bar = 'two',
baz = 'three'
}
take = [ 'foo', 'baz' ];
slice = items.$take;
slice.join(', ');
%]
-- expect --
one, three
-- test --
-- name slice of toast --
[% items = {
foo = 'one',
bar = 'two',
baz = 'three'
}
keys = items.keys.sort;
items.${keys}.join(', ');
%]
-- expect --
two, three, one
-- test --
[% i = 0 %]
[%- a = [ 0, 1, 2 ] -%]
[%- WHILE i < 3 -%]
[%- i %][% a.$i -%]
[%- i = i + 1 -%]
[%- END %]
-- expect --
001122
-- test --
[%- a = [ "alpha", "beta", "gamma", "delta" ] -%]
[%- b = "foo" -%]
[%- a.$b -%]
-- expect --
-- test --
[%- a = [ "alpha", "beta", "gamma", "delta" ] -%]
[%- b = "2" -%]
[%- a.$b -%]
-- expect --
gamma
-- test --
[% obj.name %]
-- expect --
an object
-- test --
[% obj.name.list.first %]
-- expect --
an object
-- test --
-- name bop --
[% bop.first.name %]
-- expect --
an object
-- test --
[% obj.items.first %]
-- expect --
name
-- test --
[% obj.items.1 %]
-- expect --
an object
-- test --
=[% size %]=
-- expect --
==
-- test --
[% USE Dumper;
TRY;
correct(["hello", "there"]);
CATCH;
error.info.join(', ');
END;
%]
==
[% TRY;
buggy.croak(["hello", "there"]);
CATCH;
error.info.join(', ');
END;
%]
-- expect --
hello, there
==
hello, there
-- test --
[% hash = { }
list = [ hash ]
list.last.message = 'Hello World';
"message: $list.last.message\n"
-%]
-- expect --
message: Hello World
# test Dave Howorth's patch (v2.15) which makes the stash more strict
# about what it considers to be a missing method error
-- test --
[% hashobj.hello %]
-- expect --
Hello World
-- test --
[% TRY; hashobj.goodbye; CATCH; "ERROR: "; clean(error); END %]
-- expect --
ERROR: undef error - Can't locate object method "no_such_method" via package "HashObject"
-- test --
[% TRY;
hashobj.now_is_the_time_to_test_a_very_long_method_to_see_what_happens;
CATCH;
"ERROR: "; clean(error);
END
%]
-- expect --
ERROR: undef error - Can't locate object method "this_method_does_not_exist" via package "HashObject"
-- test --
[% foo = { "one" = "bar" "" = "empty" } -%]
foo is { [% FOREACH k IN foo.keys.sort %]"[% k %]" = "[% foo.$k %]" [% END %]}
setting foo.one to baz
[% fookey = "one" foo.$fookey = "baz" -%]
foo is { [% FOREACH k IN foo.keys.sort %]"[% k %]" = "[% foo.$k %]" [% END %]}
setting foo."" to quux
[% fookey = "" foo.$fookey = "full" -%]
foo is { [% FOREACH k IN foo.keys.sort %]"[% k %]" = "[% foo.$k %]" [% END %]}
--expect --
foo is { "" = "empty" "one" = "bar" }
setting foo.one to baz
foo is { "" = "empty" "one" = "baz" }
setting foo."" to quux
foo is { "" = "full" "one" = "baz" }
# Exercise the object with the funky overloaded comparison
-- test --
[% cmp_ol.hello %]
-- expect --
Hello
-- test --
Before
[% TRY;
str_eval_die;
CATCH;
"caught error: $error";
END;
%]
After
-- expect --
Before
str_eval_die returned
After
-- test --
[% str_eval_die %]
-- expect --
str_eval_die returned
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| lib | Folder | 0755 |
|
|
| test | Folder | 0755 |
|
|
| vmethods | Folder | 0755 |
|
|
| README | File | 3.1 KB | 0644 |
|
| anycase.t | File | 2.16 KB | 0644 |
|
| args.t | File | 2.41 KB | 0644 |
|
| assert.t | File | 2.53 KB | 0644 |
|
| base.t | File | 3.58 KB | 0644 |
|
| binop.t | File | 4.82 KB | 0644 |
|
| block.t | File | 2.71 KB | 0644 |
|
| block_duplicate.t | File | 476 B | 0644 |
|
| blocks.t | File | 2.2 KB | 0644 |
|
| capture.t | File | 1.59 KB | 0644 |
|
| case.t | File | 1.46 KB | 0644 |
|
| chomp.t | File | 7.71 KB | 0644 |
|
| compile1.t | File | 2.12 KB | 0644 |
|
| compile2.t | File | 2.67 KB | 0644 |
|
| compile3.t | File | 3.75 KB | 0644 |
|
| compile4.t | File | 2.38 KB | 0644 |
|
| compile5.t | File | 3.28 KB | 0644 |
|
| config.t | File | 6.46 KB | 0644 |
|
| constants.t | File | 5.07 KB | 0644 |
|
| context.t | File | 5.87 KB | 0644 |
|
| datafile.t | File | 1.81 KB | 0644 |
|
| date.t | File | 6.73 KB | 0644 |
|
| date_offset.t | File | 2.17 KB | 0644 |
|
| date_utf8.t | File | 1.33 KB | 0644 |
|
| debug.t | File | 3.86 KB | 0644 |
|
| directive.t | File | 4.76 KB | 0644 |
|
| directry.t | File | 5.48 KB | 0644 |
|
| document.t | File | 3.58 KB | 0644 |
|
| dumper.t | File | 1.47 KB | 0644 |
|
| error.t | File | 953 B | 0644 |
|
| evalperl.t | File | 3.73 KB | 0644 |
|
| exception.t | File | 1.52 KB | 0644 |
|
| factory.t | File | 1.4 KB | 0644 |
|
| file.t | File | 2.87 KB | 0644 |
|
| fileline.t | File | 3.16 KB | 0644 |
|
| filter.t | File | 17.74 KB | 0644 |
|
| foreach.t | File | 10.31 KB | 0644 |
|
| format.t | File | 1.78 KB | 0644 |
|
| html.t | File | 2.52 KB | 0644 |
|
| image.t | File | 2.22 KB | 0644 |
|
| include.t | File | 6.04 KB | 0644 |
|
| iterator.t | File | 3.67 KB | 0644 |
|
| leak.t | File | 5.01 KB | 0644 |
|
| list.t | File | 4.41 KB | 0644 |
|
| load_order_vmethods_stash.t | File | 192 B | 0644 |
|
| macro.t | File | 2.93 KB | 0644 |
|
| math.t | File | 1.22 KB | 0644 |
|
| math_rand.t | File | 476 B | 0644 |
|
| meta.t | File | 881 B | 0644 |
|
| mtime-zero.t | File | 1.04 KB | 0644 |
|
| object.t | File | 7.23 KB | 0644 |
|
| outline.t | File | 2.29 KB | 0644 |
|
| outline_line.t | File | 971 B | 0644 |
|
| output.t | File | 2.66 KB | 0644 |
|
| parser.t | File | 4.74 KB | 0644 |
|
| parser2.t | File | 981 B | 0644 |
|
| plugins.t | File | 6.12 KB | 0644 |
|
| plusfile.t | File | 1.91 KB | 0644 |
|
| pod.t | File | 2.05 KB | 0644 |
|
| prefix.t | File | 1.46 KB | 0644 |
|
| proc.t | File | 867 B | 0644 |
|
| process-relative.t | File | 2.05 KB | 0644 |
|
| process.t | File | 1.88 KB | 0644 |
|
| process_dir.t | File | 1.84 KB | 0644 |
|
| provider.t | File | 11.08 KB | 0644 |
|
| ref.t | File | 1.63 KB | 0644 |
|
| scalar.t | File | 2.56 KB | 0644 |
|
| service.t | File | 5.07 KB | 0644 |
|
| skel.t | File | 947 B | 0644 |
|
| stash-xs-unicode.t | File | 2.03 KB | 0644 |
|
| stash-xs.t | File | 8.42 KB | 0644 |
|
| stash.t | File | 7.91 KB | 0644 |
|
| stashc.t | File | 1.6 KB | 0644 |
|
| stop.t | File | 2.72 KB | 0644 |
|
| strcat.t | File | 758 B | 0644 |
|
| strict.t | File | 1.52 KB | 0644 |
|
| string.t | File | 7.38 KB | 0644 |
|
| switch.t | File | 3.83 KB | 0644 |
|
| table.t | File | 2.68 KB | 0644 |
|
| tags.t | File | 3.63 KB | 0644 |
|
| template.t | File | 1.49 KB | 0644 |
|
| text.t | File | 2.89 KB | 0644 |
|
| throw.t | File | 1.94 KB | 0644 |
|
| tiedhash.t | File | 5.28 KB | 0644 |
|
| trace_vars.t | File | 1.11 KB | 0644 |
|
| try.t | File | 9.83 KB | 0644 |
|
| unicode.t | File | 4.55 KB | 0644 |
|
| url.t | File | 4.06 KB | 0644 |
|
| vars.t | File | 11.36 KB | 0644 |
|
| varsv1.t | File | 8.96 KB | 0644 |
|
| view.t | File | 17.43 KB | 0644 |
|
| while.t | File | 3.18 KB | 0644 |
|
| wrap.t | File | 2.63 KB | 0644 |
|
| wrapper.t | File | 3.95 KB | 0644 |
|
| zz-plugin-cycle.t | File | 1.6 KB | 0644 |
|
| zz-plugin-leak-gh-213.t | File | 2.77 KB | 0644 |
|
| zz-plugin-leak-rt-46691.t | File | 2.95 KB | 0644 |
|
| zz-plugin-leak.t | File | 2.02 KB | 0644 |
|
| zz-pmv.t | File | 1.15 KB | 0644 |
|
| zz-pod-coverage.t | File | 1.64 KB | 0644 |
|
| zz-pod-kwalitee.t | File | 776 B | 0644 |
|
| zz-stash-xs-leak.t | File | 1.59 KB | 0644 |
|
| zz-url2.t | File | 3.71 KB | 0644 |
|