fpc/packages/fcl-registry/tests/regtestbasics.pp

281 lines
5.4 KiB
ObjectPascal

unit RegTestBasics;
{$IFDEF FPC}
{$mode objfpc}{$H+}
{$ENDIF}
interface
uses
fpcunit, testutils, testregistry, testdecorator, Classes, SysUtils;
type
{ TTestBasics }
TTestBasics = class(TTestCase)
private
procedure DeleteUserXmlFile;
protected
published
procedure TestSimpleWinRegistry;
procedure TestDoubleWrite;
procedure bug16395;
procedure TestStringList;
Procedure TestInt64;
Procedure TestDeleteSubkey;
end;
implementation
uses
registry;
{ TTestBasics }
procedure TTestBasics.DeleteUserXmlFile;
{$ifndef windows}
var
fn: string;
{$endif}
begin
{$ifdef windows}
with TRegistry.Create do
try
DeleteKey('FirstNode');
finally
Free;
end;
{$else}
FN:=includetrailingpathdelimiter(GetAppConfigDir(False))+'reg.xml';
if FileExists(FN) then
AssertTrue(DeleteFile(FN));
{$endif}
end;
procedure TTestBasics.TestSimpleWinRegistry;
var
Registry : TRegistry;
begin
Registry := TRegistry.Create(KEY_READ);
Registry.RootKey:=HKEY_LOCAL_MACHINE;
// use a hopefully non existing key
AssertFalse(Registry.KeyExists('FPC1234'));
{$ifdef windows}
AssertTrue(Registry.KeyExists('SOFTWARE'));
{$endif}
Registry.Free;
end;
procedure TTestBasics.TestDoubleWrite;
begin
DeleteUserXmlFile;
with TRegistry.Create do
try
OpenKey('FirstNode', true);
WriteString('LAYOUT', '');
CloseKey;
finally
Free;
end;
with TRegistry.Create do
try
OpenKey('FirstNode', true);
WriteString('LAYOUT', '');
CloseKey;
finally
Free;
end;
DeleteUserXmlFile;
end;
procedure TTestBasics.bug16395;
var
r: TRegistry;
s,t: string;
begin
DeleteUserXmlFile;
r := TRegistry.Create;
try
r.RootKey := HKEY_CURRENT_USER;
r.OpenKey('FirstNode', true);
r.WriteString('string1', '');
r.CloseKey;
finally
r.Free;
end;
// verify that empty value can be changed to non-empty one
r := TRegistry.Create;
try
r.RootKey := HKEY_CURRENT_USER;
r.OpenKey('FirstNode',false);
s := r.ReadString('string1');
AssertEquals('Failed to read back an empty string', '', s);
r.WriteString('string1', 'string_value_1');
r.CloseKey;
finally
r.Free;
end;
// verify that non-empty value can be changed to empty one
r := TRegistry.Create;
try
r.RootKey := HKEY_CURRENT_USER;
r.OpenKey('FirstNode',false);
s := r.ReadString('string1');
AssertEquals('Failed chaning empty string value to non-empty one', 'string_value_1',s);
r.WriteString('string1', '');
r.CloseKey;
finally
r.Free;
end;
r := TRegistry.Create;
try
r.RootKey := HKEY_CURRENT_USER;
r.OpenKey('FirstNode',false);
s := r.ReadString('string1');
AssertEquals('Failed changing non-empty string value to empty one', '', s);
r.CloseKey;
finally
r.Free;
end;
r := TRegistry.Create;
try
r.RootKey := HKEY_CURRENT_USER;
r.OpenKey('LongNode',true);
t:=StringOfChar('*',4000);
r.WriteString('LongString',T);
s := r.ReadString('LongString');
AssertEquals('Writing long string works OK', t, s);
r.CloseKey;
finally
r.Free;
end;
DeleteUserXmlFile;
end;
Procedure TTestBasics.TestStringList;
Var
SL : TStringList;
I : Integer;
begin
With TRegistry.Create do
try
RootKey:=HKEY_CURRENT_USER;
OpenKey('Software/Test',True);
SL:=TstringList.Create;
For I:=0 to 10 do
SL.Add(IntToStr(I));
WriteStringList('me',SL);
SL.Clear;
ReadStringList('me',SL);
For I:=0 to 10 do
AssertEquals('String '+IntToStr(i),IntToStr(I),SL[I]);
finally
Free;
end;
end;
procedure TTestBasics.TestInt64;
Var
Def,I64 : Int64;
begin
def:=MaxInt*1024;
With TRegistry.Create do
try
RootKey:=HKEY_CURRENT_USER;
OpenKey('Software/Test',True);
WriteInt64('you',Def);
I64:=ReadInt64('you');
AssertEquals('Value written and read',Def,I64);
finally
Free;
end;
end;
procedure TTestBasics.TestDeleteSubKey;
const
BugID = 'Bug35132';
Base = 'Software\' + BugID;
One = 'One';
OneFull = Base + '\' + One;
Two = 'Two';
TwoFull = OneFull + '\' + Two;
procedure CleanUp(AssertionFailed: Boolean);
var
R: TRegistry;
B: Boolean;
begin
R := TRegistry.Create(KEY_ALL_ACCESS);
try
R.RootKey := HKEY_CURRENT_USER;
if R.KeyExists(TwoFull) then
begin
B := R. DeleteKey(TwoFull);
if B then B := R.DeleteKey(OneFull);
if B then B := R.DeleteKey(Base);
AssertTrue('cleanup OK',B);
end;
finally
R.Free;
end;
end;
var
R: TRegistry;
B: Boolean;
begin
R := TRegistry.Create(KEY_ALL_ACCESS);
try
R.RootKey := HKEY_CURRENT_USER;
B := R.OpenKey(Base, True);
AssertTrue(format('OpenKey(''%s'') failed.',[Base]),B);
B := R.OpenKey('One',True);
AssertTrue(format('OpenKey(''%s'') failed.',[OneFull]),B);
B := R.OpenKey('Two',True);
AssertTrue(format('OpenKey(''%s'') failed.',[TwoFull]),B);
R.CloseKey;
B := R.KeyExists(TwoFull);
AssertTrue(format('KeyExists(''%s'') failed.',[TwoFull]),B);
R.CloseKey;
B := R.OpenKey(Base,False);
AssertTrue(format('OpenKey(''%s'') failed.',[Base]),B);
B := R.DeleteKey('One');
AssertTrue(format('DeleteKey(''%s'') should have succeeded, but it failed.',[OneFull]),B);
finally
R.Free;
CleanUp(ExceptObject <> nil);
end;
end;
initialization
RegisterTest(TTestBasics);
end.