.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Test::Module::Used 3pm" .TH Test::Module::Used 3pm "2022-11-19" "perl v5.36.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Test::Module::Used \- Test required module is really used and vice versa between lib/t and META.yml .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 6 \& #!/usr/bin/perl \-w \& use strict; \& use warnings; \& use Test::Module::Used; \& my $used = Test::Module::Used\->new(); \& $used\->ok; .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" Test dependency between module and \s-1META\s0.yml. .PP This module reads \fI\s-1META\s0.yml\fR and get \fIbuild_requires\fR and \fIrequires\fR. It compares required module is really used and used module is really required. .SH "Important changes" .IX Header "Important changes" Some behavior changed since 0.1.3_01. .IP "\(bu" 4 perl_version set in constructor is prior to use, and read version from \s-1META\s0.yml(not read from use statement in *.pm) .IP "\(bu" 4 deprecated interfaces are deleted. (module_dir, test_module_dir, exclude_in_moduledir and push_exclude_in_moduledir) .SH "methods" .IX Header "methods" .SS "new" .IX Subsection "new" create new instance .PP all parameters are passed by hash-style, and optional. .PP in ordinary use. .PP .Vb 2 \& my $used = Test::Module::Used\->new(); \& $used\->ok(); .Ve .PP all parameters are as follows.(specified values are default, except \fIexclude_in_testdir\fR) .PP .Vb 10 \& my $used = Test::Module::Used\->new( \& test_dir => [\*(Aqt\*(Aq], # directory(ies) which contains test scripts. \& lib_dir => [\*(Aqlib\*(Aq], # directory(ies) which contains module libs. \& test_lib_dir => [\*(Aqt\*(Aq], # directory(ies) which contains libs used ONLY in test (ex. MockObject for test) \& meta_file => \*(AqMETA.json\*(Aq or \& \*(AqMETA.yml\*(Aq or \& \*(AqMETA.yaml\*(Aq, # META file (YAML or JSON which contains module requirement information) \& perl_version => \*(Aq5.008\*(Aq, # expected perl version which is used for ignore core\-modules in testing \& exclude_in_testdir => [], # ignored module(s) for test even if it is used. \& exclude_in_libdir => [], # ignored module(s) for your lib even if it is used. \& exclude_in_build_requires => [], # ignored module(s) even if it is written in build_requires of META.yml. \& exclude_in_requires => [], # ignored module(s) even if it is written in requires of META.yml. \& ); .Ve .PP if perl_version is not passed in constructor, this modules reads \fImeta_file\fR and get perl version. .PP \&\fIexclude_in_testdir\fR is automatically set by default. This module reads \fIlib_dir\fR and parse \*(L"package\*(R" statement, then found \*(L"package\*(R" statements and myself(Test::Module::Used) is set. \&\fIexclude_in_libdir\fR is also automatically set by default. This module reads \fIlib_dir\fR and parse \*(L"package\*(R" statement, found \*(L"package\*(R" statement are set.(Test::Module::Used isn't included) .SS "\fBok()\fP" .IX Subsection "ok()" check used modules are required in \s-1META\s0 file and required modules in \s-1META\s0 files are used. .PP .Vb 4 \& my $used = Test::Module::Used\->new( \& exclude_in_testdir => [\*(AqTest::Module::Used\*(Aq, \*(AqMy::Module\*(Aq], \& ); \& $used\->ok; .Ve .PP First, This module reads \fI\s-1META\s0.yml\fR and get \fIbuild_requires\fR and \fIrequires\fR. Next, reads module directory (by default \fIlib\fR) and test directory(by default \fIt\fR), and compare required module is really used and used module is really required. If all these requirement information is \s-1OK,\s0 test will success. .PP It is \s-1NOT\s0 allowed to call \fBok()\fR, \fBused_ok()\fR and \fBrequires_ok()\fR in same test file. .SS "\fBused_ok()\fP" .IX Subsection "used_ok()" Only check used modules are required in \s-1META\s0 file. Test will success if unused \fIrequires\fR or \fIbuild_requires\fR are defined. .PP .Vb 2 \& my $used = Test::Module::Used\->new(); \& $used\->used_ok; .Ve .PP It is \s-1NOT\s0 allowed to call \fBok()\fR, \fBused_ok()\fR and \fBrequires_ok()\fR in same test file. .SS "\fBrequires_ok()\fP" .IX Subsection "requires_ok()" Only check required modules in \s-1META\s0 file is used. Test will success if used modules are not defined in \s-1META\s0 file. .PP .Vb 2 \& my $used = Test::Module::Used\->new(); \& $used\->requires_ok; .Ve .PP It is \s-1NOT\s0 allowed to call \fBok()\fR, \fBused_ok()\fR and \fBrequires_ok()\fR in same test file. .ie n .SS "push_exclude_in_libdir( @exclude_module_names )" .el .SS "push_exclude_in_libdir( \f(CW@exclude_module_names\fP )" .IX Subsection "push_exclude_in_libdir( @exclude_module_names )" add ignored module(s) for your module(lib) even if it is used after \fBnew()\fR'ed. this is usable if you want to use auto set feature for \fIexclude_in_libdir\fR but manually specify exclude modules. .PP For example, .PP .Vb 3 \& my $used = Test::Module::Used\->new(); #automatically set exclude_in_libdir \& $used\->push_exclude_in_libdir( qw(Some::Module::Which::You::Want::To::Exclude) );#module(s) which you want to exclude \& $used\->ok(); #do test .Ve .ie n .SS "push_exclude_in_testdir( @exclude_module_names )" .el .SS "push_exclude_in_testdir( \f(CW@exclude_module_names\fP )" .IX Subsection "push_exclude_in_testdir( @exclude_module_names )" add ignored module(s) for test even if it is used after \fBnew()\fR'ed. this is usable if you want to use auto set feature for \fIexclude_in_testdir\fR but manually specify exclude modules. .PP For example, .PP .Vb 3 \& my $used = Test::Module::Used\->new(); #automatically set exclude_in_testdir \& $used\->push_exclude_in_testdir( qw(Some::Module::Which::You::Want::To::Exclude) );#module(s) which you want to exclude \& $used\->ok(); #do test .Ve .SH "AUTHOR" .IX Header "AUTHOR" Takuya Tsuchida .SH "SEE ALSO" .IX Header "SEE ALSO" Test::Dependencies has almost same feature. .SH "REPOSITORY" .IX Header "REPOSITORY" .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" Copyright (c) 2008\-2014 Takuya Tsuchida .PP This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.