testbasics.pp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. unit TestBasics;
  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 TestAdv;
  19. end;
  20. implementation
  21. uses
  22. registry
  23. {$ifdef windows}
  24. , tregistry2
  25. {$endif windows}
  26. ;
  27. { TTestBasics }
  28. procedure TTestBasics.DeleteUserXmlFile;
  29. {$ifndef windows}
  30. var
  31. fn: string;
  32. {$endif}
  33. begin
  34. {$ifdef windows}
  35. with TRegistry.Create do
  36. try
  37. DeleteKey('FirstNode');
  38. finally
  39. Free;
  40. end;
  41. {$else}
  42. FN:=includetrailingpathdelimiter(GetAppConfigDir(False))+'reg.xml';
  43. if FileExists(FN) then
  44. AssertTrue(DeleteFile(FN));
  45. {$endif}
  46. end;
  47. procedure TTestBasics.TestSimpleWinRegistry;
  48. var
  49. Registry : TRegistry;
  50. begin
  51. Registry := TRegistry.Create(KEY_READ);
  52. Registry.RootKey:=HKEY_LOCAL_MACHINE;
  53. // use a hopefully non existing key
  54. AssertFalse(Registry.KeyExists('FPC1234'));
  55. {$ifdef windows}
  56. AssertTrue(Registry.KeyExists('SOFTWARE'));
  57. {$endif}
  58. Registry.Free;
  59. end;
  60. procedure TTestBasics.TestDoubleWrite;
  61. begin
  62. DeleteUserXmlFile;
  63. with TRegistry.Create do
  64. try
  65. OpenKey('FirstNode', true);
  66. WriteString('LAYOUT', '');
  67. CloseKey;
  68. finally
  69. Free;
  70. end;
  71. with TRegistry.Create do
  72. try
  73. OpenKey('FirstNode', true);
  74. WriteString('LAYOUT', '');
  75. CloseKey;
  76. finally
  77. Free;
  78. end;
  79. DeleteUserXmlFile;
  80. end;
  81. procedure TTestBasics.bug16395;
  82. var
  83. r: TRegistry;
  84. s,t: string;
  85. begin
  86. DeleteUserXmlFile;
  87. r := TRegistry.Create;
  88. try
  89. r.RootKey := HKEY_CURRENT_USER;
  90. r.OpenKey('FirstNode', true);
  91. r.WriteString('string1', '');
  92. r.CloseKey;
  93. finally
  94. r.Free;
  95. end;
  96. // verify that empty value can be changed to non-empty one
  97. r := TRegistry.Create;
  98. try
  99. r.RootKey := HKEY_CURRENT_USER;
  100. r.OpenKey('FirstNode',false);
  101. s := r.ReadString('string1');
  102. AssertEquals('Failed to read back an empty string', '', s);
  103. r.WriteString('string1', 'string_value_1');
  104. r.CloseKey;
  105. finally
  106. r.Free;
  107. end;
  108. // verify that non-empty value can be changed to empty one
  109. r := TRegistry.Create;
  110. try
  111. r.RootKey := HKEY_CURRENT_USER;
  112. r.OpenKey('FirstNode',false);
  113. s := r.ReadString('string1');
  114. AssertEquals('Failed chaning empty string value to non-empty one', 'string_value_1',s);
  115. r.WriteString('string1', '');
  116. r.CloseKey;
  117. finally
  118. r.Free;
  119. end;
  120. r := TRegistry.Create;
  121. try
  122. r.RootKey := HKEY_CURRENT_USER;
  123. r.OpenKey('FirstNode',false);
  124. s := r.ReadString('string1');
  125. AssertEquals('Failed changing non-empty string value to empty one', '', s);
  126. r.CloseKey;
  127. finally
  128. r.Free;
  129. end;
  130. r := TRegistry.Create;
  131. try
  132. r.RootKey := HKEY_CURRENT_USER;
  133. r.OpenKey('LongNode',true);
  134. t:=StringOfChar('*',4000);
  135. r.WriteString('LongString',T);
  136. s := r.ReadString('LongString');
  137. AssertEquals('Writing long string works OK', t, s);
  138. r.CloseKey;
  139. finally
  140. r.Free;
  141. end;
  142. DeleteUserXmlFile;
  143. end;
  144. procedure TTestBasics.TestAdv;
  145. begin
  146. {$ifdef windows}
  147. DoRegTest2;
  148. {$endif windows}
  149. end;
  150. initialization
  151. RegisterTest(TTestBasics);
  152. end.