File: eval.t

package info (click to toggle)
perl 5.42.0-2
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 128,392 kB
  • sloc: perl: 534,963; ansic: 240,563; sh: 72,042; pascal: 6,934; xml: 2,428; yacc: 1,360; makefile: 1,197; cpp: 208; lisp: 1
file content (67 lines) | stat: -rw-r--r-- 2,270 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/usr/bin/perl
#
# Test suite for $@ preservation with constants.
#
# Earlier versions of Term::ANSIColor would clobber $@ during AUTOLOAD
# processing and lose its value or leak $@ values to the calling program.
# This is a regression test to ensure that this problem doesn't return.
#
# Copyright 2012-2014, 2020 Russ Allbery <rra@cpan.org>
#
# SPDX-License-Identifier: GPL-1.0-or-later OR Artistic-1.0-Perl

use 5.008;
use strict;
use warnings;

use Test::More tests => 17;

# We refer to $@ in the test descriptions.
## no critic (ValuesAndExpressions::RequireInterpolationOfMetachars)

# Load the module.
BEGIN {
    delete $ENV{ANSI_COLORS_ALIASES};
    delete $ENV{ANSI_COLORS_DISABLED};
    delete $ENV{NO_COLOR};
    use_ok('Term::ANSIColor', qw(:constants));
}

# Ensure that using a constant doesn't leak anything in $@.
is((BOLD 'test'), "\e[1mtest", 'BOLD works');
is($@,            q{},         '... and $@ is empty');

# Store something in $@ and ensure it doesn't get clobbered.
## no critic (BuiltinFunctions::ProhibitStringyEval)
eval 'sub { syntax';
is((BLINK 'test'), "\e[5mtest", 'BLINK works after eval failure');
isnt($@, q{}, '... and $@ still contains something useful');

# Do some additional unnecessary testing so that coverage analysis works
# properly.  First, check disabled colors.
local $ENV{ANSI_COLORS_DISABLED} = 1;
is(BOLD,  q{}, 'ANSI_COLORS_DISABLED works for BOLD');
is(BLINK, q{}, '...and for BLINK');
delete $ENV{ANSI_COLORS_DISABLED};

# Now, NO_COLOR.
local $ENV{NO_COLOR} = 'foo';
is(BOLD,  q{}, 'NO_COLOR works for BOLD');
is(BLINK, q{}, '...and for BLINK');
delete $ENV{NO_COLOR};

# Now, AUTORESET.
$Term::ANSIColor::AUTORESET = 1;
is((BOLD 't'),  "\e[1mt\e[0m", 'AUTORESET works for BOLD');
is((BLINK 't'), "\e[5mt\e[0m", '...and for BLINK');
is((BOLD),      "\e[1m",       'AUTORESET without text for BOLD');
is((BLINK),     "\e[5m",       '...and for BLINK');
$Term::ANSIColor::AUTORESET = 0;

# And, finally, AUTOLOCAL.
$Term::ANSIColor::AUTOLOCAL = 1;
is((BOLD 't'),  "\e[1mt\e[0m", 'AUTOLOCAL works for BOLD');
is((BLINK 't'), "\e[5mt\e[0m", '...and for BLINK');
is((BOLD),      "\e[1m",       'AUTOLOCAL without text for BOLD');
is((BLINK),     "\e[5m",       '...and for BLINK');
$Term::ANSIColor::AUTOLOCAL = 0;