📄 regedit.pl
字号:
#!/usr/bin/perl -w## This script tests regapi functionality## Copyright 2002 Andriy Palamarchuk## This library is free software; you can redistribute it and/or# modify it under the terms of the GNU Lesser General Public# License as published by the Free Software Foundation; either# version 2.1 of the License, or (at your option) any later version.## This library is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU# Lesser General Public License for more details.## You should have received a copy of the GNU Lesser General Public# License along with this library; if not, write to the Free Software# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA#use strict;use diagnostics;use winetest;$main::orig_reg = './tests/orig.reg';test_regedit();# Imitation of test framework "ok".# Uncomment when running on Windows without testing framework# sub ok($;$)# {# my ($condition, $message) = @_;# if (!$condition)# {# die $message;# }# }# Checks if the files are equal regardless of the end-of-line encoding.# Returns 0 if the files are different, otherwise returns 1# params - list of file namessub files_are_equal{ my @file_names = @_; my @files = (); die "At least 2 file names expected" unless ($#file_names); #compare file contents foreach my $file_name (@file_names) { my $file; open($file, "<$file_name") || die "Error! can't open file $file_name"; push(@files, $file); } my $first_file = shift(@files); my $line1; my $line2; while ($line1 = <$first_file>) { $line1 =~ s/\r//; chomp($line1); foreach my $file (@files) { $line2 = <$file>; $line2 =~ s/\r//; chomp($line2); return 0 if $line1 ne $line2; } } return 1;}#removes all test output filessub clear_output{ unlink "${main::orig_reg}.exported"; unlink "${main::orig_reg}.exported2";}#tests compatibility with regeditsub test_regedit{ my $error_no_file_name = "regedit: No file name is specified"; my $error_undefined_switch = "regedit: Undefined switch /"; my $error_no_registry_key = "regedit: No registry key is specified"; my $error_file_not_found = 'regedit: Can\'t open file "dummy_file_name"'; my $error_bad_reg_class_name = 'regedit: Incorrect registry class specification in'; my $error_dont_delete_class = 'regedit: Can\'t delete registry class'; my $test_reg_key = 'HKEY_CURRENT_USER\Test Regapi'; my $s; my $regedit = -e "./regedit.exe" ? ".\\regedit.exe" : "./regedit"; #no parameters my $command = "$regedit 2>&1"; $s = qx/$command/; ok($?, "regedit.exe return code check"); ok($s =~ /$error_no_file_name/, 'Should raise an error on missed file name'); #ignored parameters $command = "$regedit /S /V /R:1.reg /L:ss_ss.reg 2>&1"; $s = qx/$command/; ok($?, "regedit.exe return code check"); ok($s =~ /$error_no_file_name/, 'Should raise an error on missed file name'); #incorrect form for /L, /R parameters for my $switch ('L', 'R') { $command = "$regedit /$switch 2>&1"; $s = qx/$command/; ok($?, "regedit.exe return code check"); ok($s =~ /$error_undefined_switch/, "Incorrect switch format check"); #with ':' $command = "$regedit /$switch: 2>&1"; $s = qx/$command/; ok($?, "regedit.exe return code check"); ok($s =~ /$error_no_file_name/, "Incorrect switch format check"); } #file does not exist $command = "$regedit dummy_file_name 2>&1"; $s = qx/$command/; ok($?, "regedit.exe return code check"); ok($s =~ /$error_file_not_found/, 'Incorrect processing of not-existing file'); #incorrect registry class is specified $command = "$regedit /e ${main::orig_reg}.exported \"BAD_CLASS_HKEY\" 2>&1"; $s = qx/$command/; ok($?, "regedit.exe return code check"); ok($s =~ /$error_bad_reg_class_name/, 'Incorrect processing of not-existing file'); #import registry file, export registry file, compare the files $command = "$regedit ${main::orig_reg} 2>&1"; $s = qx/$command/; ok(!$?, "regedit.exe return code check"); $command = "$regedit /e ${main::orig_reg}.exported \"$test_reg_key\" 2>&1"; $s = qx/$command/; ok(!$?, "regedit.exe return code check"); ok(files_are_equal("${main::orig_reg}.exported", $main::orig_reg), "Original and generated registry files " . "(${main::orig_reg}.exported and ${main::orig_reg}) " . "are different"); clear_output(); #export bare registry class (2 formats of command line parameter) #XXX works fine under wine, but commented out because does not handle all key types #existing on Windows and Windows registry is *very* big# $command = "$regedit /e ${main::orig_reg}.exported HKEY_CURRENT_USER 2>&1";# $s = qx/$command/;# print("DEBUG\t result: $s, return code - $?\n");# ok(!$?, "regedit.exe return code check");# $command = "$regedit /e ${main::orig_reg}.exported2 HKEY_CURRENT_USER 2>&1";# qx/$command/;# ok(!$?, "regedit.exe return code check");# ok(files_are_equal("${main::orig_reg}.exported", "${main::orig_reg}.exported2"),# "Original and generated registry files " .# "(${main::orig_reg}.exported and ${main::orig_reg}.exported2) " .# "are different"); ##test removal #incorrect format $command = "$regedit /d 2>&1"; $s = qx/$command/; ok($?, "regedit.exe return code check"); ok($s =~ /$error_no_registry_key/, 'No registry key name is specified for removal'); #try to delete class $command = "$regedit /d HKEY_CURRENT_USER 2>&1"; $s = qx/$command/; ok($?, "regedit.exe return code check"); ok($s =~ /$error_dont_delete_class/, 'Try to remove registry class'); #try to delete registry key with incorrect name $command = "$regedit /d BAD_HKEY 2>&1"; $s = qx/$command/; ok($?, "regedit.exe return code check"); #should not export anything after removal because the key does not exist clear_output(); ok(!-e("${main::orig_reg}.exported"), "Be sure the file is deleted"); $command = "$regedit /d \"$test_reg_key\" 2>&1"; $s = qx/$command/; $command = "$regedit /e ${main::orig_reg}.exported \"$test_reg_key\" 2>&1"; $s = qx/$command/; ok(!-e("${main::orig_reg}.exported"), "File ${main::orig_reg}.exported should not exist"); ok($?, "regedit.exe return code check"); clear_output();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -