PERL 테스트 스크립트에 대한 OS 특정 테스트
-
06-07-2019 - |
문제
O/S 의존적 인 테스트 스크립트의 일부를 작성하는 더 우아한 방법이 있습니까?
주석 줄 아래 코드를 참조하십시오.
배경: 기준 치수 perl :: 태그 VIM 용 태그 파일을 만듭니다. Win32에서 디렉토리 분리기는 ""이지만 다른 OS에서는 "/"입니다. VIM의 Perl-Support 모듈은 태그 파일을 매우 행복하게 읽는 것 같습니다. 따라서 모듈을 수정할 필요가없는 것 같습니다.
#!/usr/bin/perl -w
use strict; use warnings;
use Data::Dumper;
use Test::More tests => 6;
use FindBin qw($Bin);
BEGIN {
use_ok( 'Perl::Tags' );
}
my $naive_tagger = Perl::Tags::Naive->new( max_level=>1 );
ok (defined $naive_tagger, 'created Perl::Tags' );
isa_ok ($naive_tagger, 'Perl::Tags::Naive' );
isa_ok ($naive_tagger, 'Perl::Tags' );
my $result =
$naive_tagger->process(
files => [ "$Bin/Test.pm" ],
refresh=> 1
);
ok ($result, 'processed successfully' ) or diag "RESULT $result";
# Other tests also fail because \Test.pm on Win32 vs /Test.pm on Linux/ OS X
if ( $^O =~ /MSWin32/ ) {
like ($naive_tagger, qr{Test\t\S+\\Test.pm\t/package Test;/} , 'package line');
} else {
like ($naive_tagger, qr{Test\t\S+/Test.pm\t/package Test;/} , 'package line');
}
해결책
파일 :: 사양 그리고 경로 :: 클래스 이러한 종류의 플랫폼 특정 문제를 정확히 다루기 위해 만들어졌습니다.
다음은 당신이하려는 일입니까?
#!/usr/bin/perl
use strict; use warnings;
use Test::More tests => 6;
use FindBin qw($Bin);
use File::Spec::Functions qw(catfile catpath rootdir);
BEGIN {
use_ok( 'Perl::Tags' );
}
my $naive_tagger = Perl::Tags::Naive->new(max_level => 1);
ok (defined $naive_tagger, 'created Perl::Tags');
isa_ok ($naive_tagger, 'Perl::Tags::Naive');
isa_ok ($naive_tagger, 'Perl::Tags');
my $result =
$naive_tagger->process(
files => [ catfile($Bin, 'Test.pm') ],
refresh => 1
);
ok ($result, 'processed successfully' ) or diag "RESULT $result";
my $file = catfile(rootdir, 'Test.pm');
# or $file = catpath('C:', rootdir(), 'Test.pm')
# depending on what you mean.
like($naive_tagger
qr{Test\t\S+\Q$file\E\t/package Test;/},
'package line',
);
다른 팁
아마도 항상 Linux 스타일 슬래시를 사용할 수 있습니다.
NT와 UNIX에서 실행 해야하는 PERL 스크립트를 작성할 때 알아야 할 중요한 문제가 많이 있습니다. 우선, PathNames의 문제가 있습니다. DOS, Windows NT 및 Windows 95에서 백 슬래시 연산자가있는 PathNames를 지정하는 반면 UNIX에서는 전방 슬래시 연산자를 사용합니다. Win32 Perl 포트는 전방 슬래시 또는 백 슬래시를 허용합니다. PathNames에서 Forward Slashes를 사용하는 Perl 스크립트는 Backslashes를 사용하는 스크립트보다 휴대 가능성이 높습니다. 게다가, Perl 스크립트는 문자열에서 백 슬래시를 두 번 사용하여 Perl 통역사에서 백 슬래시 인스턴스를 피해야합니다. 드라이브 문자는 변경할 필요가 없습니다.
예를 들어, 다음 PathName은 다음 중 하나를 사용하여 설정할 수 있습니다.
$myFile = "E:/users/default/datafile.txt"; $myFile = "E:\\users\\default\\datafile.txt";
(에서 Perl 5 해방)
항상 Linux 스타일을 사용할 수 없다고 확신하는 경우 CPAN 모듈을 사용해 볼 수 있습니다. 파일 :: 사양 또는 경로 :: 클래스. 을 체크하다 "Unix/Windows 경로 혼합을위한 CPAN 모듈"Perlmonks에 대한 토론 추가 정보.
Sinan ünür의 지침에 따라 수정 - OS 특정 테스트를 수행 할 필요가 없습니다.
like ($naive_tagger, qr{Test\t\S\Test.pm\t/package Test;/} , 'package line');
대체됩니다
like ($naive_tagger, qr{Test\t\S+\QTest.pm\E\t/package Test;/} , 'package line');
큐 (비활성화) 패턴 metacharacters e
이자형 패턴 Metacharacters를 다시 비활성화하십시오