---
name: "Test::Strict"
section: "3pm"
platform: "linux"
package: "libtest-strict-perl"
version: "0.54-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Test::Strict"
---

# Test::Strict(3pm)

Check syntax, presence of use strict; and test coverage

## NAME

Test::Strict - Check syntax, presence of use strict; and test coverage

## VERSION

Version 0.54

## SYNOPSIS

`"Test::Strict"` lets you check the syntax, presence of `"use strict;"` and presence `"use warnings;"` in your perl code. It report its results in standard Test::Simple fashion:

```
    use Test::Strict tests => 3;
    syntax_ok( 'bin/myscript.pl' );
    strict_ok( 'My::Module', "use strict; in My::Module" );
    warnings_ok( 'lib/My/Module.pm' );
```

Module authors can include the following in a t/strict.t and have `"Test::Strict"` automatically find and check all perl files in a module distribution:

```
  use Test::Strict;
  all_perl_files_ok(); # Syntax ok and use strict;
```

or

```
    use Test::Strict;
    all_perl_files_ok( @mydirs );
```

`"Test::Strict"` can also enforce a minimum test coverage the test suite should reach. Module authors can include the following in a t/cover.t and have `"Test::Strict"` automatically check the test coverage:

```
    use Test::Strict;
    all_cover_ok( 80 );  # at least 80% coverage
```

or

```
    use Test::Strict;
    all_cover_ok( 80, 't/' );
```

## DESCRIPTION

The most basic test one can write is "does it compile ?". This module tests if the code compiles and play nice with Test::Simple modules.

Another good practice this module can test is to "use strict;" in all perl files.

By setting a minimum test coverage through `all_cover_ok()`, a code author can ensure his code is tested above a preset level of *kwality* throughout the development cycle.

Along with Test::Pod, this module can provide the first tests to setup for a module author.

This module should be able to run under the -T flag for perl \>= 5.6. All paths are untainted with the following pattern: `"qr|^([-+@\w./:\\]+)$|"` controlled by `$Test::Strict::UNTAINT_PATTERN`.

## FUNCTIONS

### syntax\_ok( $file \[, $text\] )

Run a syntax check on `$file` by running `"perl -c $file"` with an external perl interpreter. The external perl interpreter path is stored in `$Test::Strict::PERL` which can be modified. You may prefer `use_ok()` from Test::More to syntax test a module. For a module, the path (lib/My/Module.pm) or the name (My::Module) can be both used.

### strict\_ok( $file \[, $text\] )

Check if `$file` contains a `"use strict;"` statement. `"use Moose"` and `"use Mouse"` are also considered valid. use Modern::Perl is also accepted.

This is a pretty naive test which may be fooled in some edge cases. For a module, the path (lib/My/Module.pm) or the name (My::Module) can be both used.

### modules\_enabling\_strict

Experimental. Returning a list of modules and pragmata that enable strict. To modify this list, change `@Test::Strict::MODULES_ENABLING_STRICT`.

List taken from Module::CPANTS::Kwalitee::Uses v95

### modules\_enabling\_warnings

Experimental. Returning a list of modules and pragmata that enable warnings To modify this list, change `@Test::Strict::MODULES_ENABLING_WARNINGS`.

List taken from Module::CPANTS::Kwalitee::Uses v95

### warnings\_ok( $file \[, $text\] )

Check if warnings have been turned on.

If `$file` is a module, check if it contains a `"use warnings;"` or `"use warnings::..."` or `"use Moose"` or `"use Mouse"` statement. use Modern::Perl is also accepted. If the perl version is \<= 5.6, this test is skipped (`"use warnings"` appeared in perl 5.6).

If `$file` is a script, check if it starts with `"#!...perl -w"`. If the -w is not found and perl is \>= 5.6, check for a `"use warnings;"` or `"use warnings::..."` or `"use Moose"` or `"use Mouse"` statement. use Modern::Perl is also accepted.

This is a pretty naive test which may be fooled in some edge cases. For a module, the path (lib/My/Module.pm) or the name (My::Module) can be both used.

### all\_perl\_files\_ok( \[ @directories \] )

Applies `strict_ok()` and `syntax_ok()` to all perl files found in `@directories` (and sub directories). If no \<@directories\> is given, the starting point is one level above the current running script, that should cover all the files of a typical CPAN distribution. A perl file is \*.pl or \*.pm or \*.t or a file starting with `"#!...perl"`

If the test plan is defined:

```
  use Test::Strict tests => 18;
  all_perl_files_ok();
```

the total number of files tested must be specified.

You can control which tests are run on each perl site through:

```
  $Test::Strict::TEST_SYNTAX   (default = 1)
  $Test::Strict::TEST_STRICT   (default = 1)
  $Test::Strict::TEST_WARNINGS (default = 0)
  $Test::Strict::TEST_SKIP     (default = []) "Trusted" files to skip
```

### all\_cover\_ok( \[coverage\_threshold \[, @t\_dirs\]\] )

This will run all the tests in `@t_dirs` (or current script's directory if `@t_dirs` is undef) under Devel::Cover and calculate the global test coverage of the code loaded by the tests. If the test coverage is greater or equal than `"coverage_threshold"`, it is a pass, otherwise it's a fail. The default coverage threshold is 50 (meaning 50% of the code loaded has been covered by test).

The threshold can be modified through `$Test::Strict::COVERAGE_THRESHOLD`.

You may want to select which files are selected for code coverage through `$Test::Strict::DEVEL_COVER_OPTIONS`, see Devel::Cover for the list of available options. The default is '+ignore,"/Test/Strict\\b"'.

The path to `"cover"` utility can be modified through `$Test::Strict::COVER`.

The 50% threshold is a completely arbitrary value, which should not be considered as a good enough coverage.

The total coverage is the return value of `all_cover_ok()`.

## CAVEATS

For `all_cover_ok()` to work properly, it is strongly advised to install the most recent version of Devel::Cover and use perl 5.8.1 or above. In the case of a `"make test"` scenario, `all_perl_files_ok()` re-run all the tests in a separate perl interpreter, this may lead to some side effects.

## SEE ALSO

Test::More, Test::Pod. Test::Distribution, Test::NoWarnings

## REPOSITORY

\<https://github.com/manwar/Test-Strict\>

## AUTHOR

Pierre Denis, `"<pdenis@gmail.com>"`.

## MAINTAINER

Gabor Szabo \<http://szabgab.com/\>

Currently maintained by Mohammad S Anwar (MANWAR), `"<mohammad.anwar at yahoo.com>"`

## COPYRIGHT

Copyright 2005, 2010 Pierre Denis, All Rights Reserved.

You may use, modify, and distribute this package under the same terms as Perl itself.
