اختبارات نظام التشغيل المحددة لبرامج اختبار Perl

StackOverflow https://stackoverflow.com/questions/1624253

سؤال

هل هناك طريقة أكثر أناقة لكتابة جزء البرنامج النصي للاختبار الذي يعتمد على O/S؟

يرجى الرجوع إلى الكود الموجود أسفل سطر التعليق.

خلفية: وحدة بيرل :: العلامات يقوم بإنشاء ملف علامات لـ VIM.في نظام التشغيل Win32، يكون فاصل الدليل هو "\" ولكن في أنظمة التشغيل الأخرى يكون "/".يبدو أن وحدة دعم Perl الخاصة بـ Vim تقرأ ملف العلامات بسعادة تامة، لذلك يبدو أنه ليست هناك حاجة لتعديل الوحدة.

#!/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، للأسباب التالية:

هناك العديد من المشكلات المهمة التي يجب أن تكون على دراية بها عند كتابة نصوص Perl النصية التي يجب تشغيلها ضمن NT وUNIX.بادئ ذي بدء، هناك مسألة أسماء المسارات.في DOS، وWindows NT، وWindows 95، يمكنك تحديد أسماء المسارات باستخدام عامل الشرطة المائلة العكسية، بينما في UNIX تستخدم عامل الشرطة المائلة للأمام.يسمح منفذ Win32 Perl إما بالخطوط المائلة للأمام أو الخطوط المائلة العكسية.من المرجح أن يكون برنامج Perl النصي الذي يستخدم الخطوط المائلة للأمام في أسماء المسارات محمولاً أكثر من البرنامج النصي الذي يستخدم الخطوط المائلة العكسية.بالإضافة إلى ذلك، سيتعين على نصوص Perl استخدام الشرطة المائلة العكسية مرتين في السلاسل للهروب من مثيل واحد من الشرطة المائلة العكسية من مترجم Perl.ليس من الضروري تغيير أحرف محركات الأقراص.

على سبيل المثال، يمكن تعيين اسم المسار التالي باستخدام أي مما يلي:

$myFile = "E:/users/default/datafile.txt";

$myFile = "E:\\users\\default\\datafile.txt";

(من إطلاق العنان لبيرل 5)


إذا كنت متأكدًا من أنه لا يمكنك دائمًا استخدام نمط Linux، فيمكنك تجربة استخدام وحدات CPAN ملف::المواصفات أو المسار::فئة.افحص ال مناقشة "وحدة CPAN لخلط مسار Unix/Windows" على Perlmonks للحصول على معلومات إضافية.

تمت المراجعة وفقًا لتوجيهات Sinan Ünür - ليست هناك حاجة لإجراء اختبارات خاصة بنظام التشغيل إذا

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');

(تعطيل) الأحرف الأولية للنمط حتى \E

\E قم بتعطيل الأحرف الأولية للنمط مرة أخرى

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top