regtestbasics.pp 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. unit RegTestBasics;
  2. {$IFDEF FPC}
  3. {$mode objfpc}{$H+}
  4. {$ENDIF}
  5. interface
  6. uses
  7. fpcunit, testutils, testregistry, testdecorator, Classes, SysUtils;
  8. type
  9. { TTestBasics }
  10. TTestBasics = class(TTestCase)
  11. private
  12. procedure DeleteUserXmlFile;
  13. protected
  14. published
  15. procedure TestSimpleWinRegistry;
  16. procedure TestDoubleWrite;
  17. procedure bug16395;
  18. procedure TestStringList;
  19. Procedure TestInt64;
  20. end;
  21. implementation
  22. uses
  23. registry;
  24. { TTestBasics }
  25. procedure TTestBasics.DeleteUserXmlFile;
  26. {$ifndef windows}
  27. var
  28. fn: string;
  29. {$endif}
  30. begin
  31. {$ifdef windows}
  32. with TRegistry.Create do
  33. try
  34. DeleteKey('FirstNode');
  35. finally
  36. Free;
  37. end;
  38. {$else}
  39. FN:=includetrailingpathdelimiter(GetAppConfigDir(False))+'reg.xml';
  40. if FileExists(FN) then
  41. AssertTrue(DeleteFile(FN));
  42. {$endif}
  43. end;
  44. procedure TTestBasics.TestSimpleWinRegistry;
  45. var
  46. Registry : TRegistry;
  47. begin
  48. Registry := TRegistry.Create(KEY_READ);
  49. Registry.RootKey:=HKEY_LOCAL_MACHINE;
  50. // use a hopefully non existing key
  51. AssertFalse(Registry.KeyExists('FPC1234'));
  52. {$ifdef windows}
  53. AssertTrue(Registry.KeyExists('SOFTWARE'));
  54. {$endif}
  55. Registry.Free;
  56. end;
  57. procedure TTestBasics.TestDoubleWrite;
  58. begin
  59. DeleteUserXmlFile;
  60. with TRegistry.Create do
  61. try
  62. OpenKey('FirstNode', true);
  63. WriteString('LAYOUT', '');
  64. CloseKey;
  65. finally
  66. Free;
  67. end;
  68. with TRegistry.Create do
  69. try
  70. OpenKey('FirstNode', true);
  71. WriteString('LAYOUT', '');
  72. CloseKey;
  73. finally
  74. Free;
  75. end;
  76. DeleteUserXmlFile;
  77. end;
  78. procedure TTestBasics.bug16395;
  79. var
  80. r: TRegistry;
  81. s,t: string;
  82. begin
  83. DeleteUserXmlFile;
  84. r := TRegistry.Create;
  85. try
  86. r.RootKey := HKEY_CURRENT_USER;
  87. r.OpenKey('FirstNode', true);
  88. r.WriteString('string1', '');
  89. r.CloseKey;
  90. finally
  91. r.Free;
  92. end;
  93. // verify that empty value can be changed to non-empty one
  94. r := TRegistry.Create;
  95. try
  96. r.RootKey := HKEY_CURRENT_USER;
  97. r.OpenKey('FirstNode',false);
  98. s := r.ReadString('string1');
  99. AssertEquals('Failed to read back an empty string', '', s);
  100. r.WriteString('string1', 'string_value_1');
  101. r.CloseKey;
  102. finally
  103. r.Free;
  104. end;
  105. // verify that non-empty value can be changed to empty one
  106. r := TRegistry.Create;
  107. try
  108. r.RootKey := HKEY_CURRENT_USER;
  109. r.OpenKey('FirstNode',false);
  110. s := r.ReadString('string1');
  111. AssertEquals('Failed chaning empty string value to non-empty one', 'string_value_1',s);
  112. r.WriteString('string1', '');
  113. r.CloseKey;
  114. finally
  115. r.Free;
  116. end;
  117. r := TRegistry.Create;
  118. try
  119. r.RootKey := HKEY_CURRENT_USER;
  120. r.OpenKey('FirstNode',false);
  121. s := r.ReadString('string1');
  122. AssertEquals('Failed changing non-empty string value to empty one', '', s);
  123. r.CloseKey;
  124. finally
  125. r.Free;
  126. end;
  127. r := TRegistry.Create;
  128. try
  129. r.RootKey := HKEY_CURRENT_USER;
  130. r.OpenKey('LongNode',true);
  131. t:=StringOfChar('*',4000);
  132. r.WriteString('LongString',T);
  133. s := r.ReadString('LongString');
  134. AssertEquals('Writing long string works OK', t, s);
  135. r.CloseKey;
  136. finally
  137. r.Free;
  138. end;
  139. DeleteUserXmlFile;
  140. end;
  141. Procedure TTestBasics.TestStringList;
  142. Var
  143. SL : TStringList;
  144. I : Integer;
  145. begin
  146. With TRegistry.Create do
  147. try
  148. RootKey:=HKEY_CURRENT_USER;
  149. OpenKey('Software/Test',True);
  150. SL:=TstringList.Create;
  151. For I:=0 to 10 do
  152. SL.Add(IntToStr(I));
  153. WriteStringList('me',SL);
  154. SL.Clear;
  155. ReadStringList('me',SL);
  156. For I:=0 to 10 do
  157. AssertEquals('String '+IntToStr(i),IntToStr(I),SL[I]);
  158. finally
  159. Free;
  160. end;
  161. end;
  162. procedure TTestBasics.TestInt64;
  163. Var
  164. Def,I64 : Int64;
  165. begin
  166. def:=MaxInt*1024;
  167. With TRegistry.Create do
  168. try
  169. RootKey:=HKEY_CURRENT_USER;
  170. OpenKey('Software/Test',True);
  171. WriteInt64('you',Def);
  172. I64:=ReadInt64('you');
  173. AssertEquals('Value written and read',Def,I64);
  174. finally
  175. Free;
  176. end;
  177. end;
  178. initialization
  179. RegisterTest(TTestBasics);
  180. end.