testbasics.pp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. unit TestBasics;
  2. {$IFDEF FPC}
  3. {$mode objfpc}{$H+}
  4. {$ENDIF}
  5. interface
  6. uses
  7. fpcunit, testutils, testregistry, testdecorator,
  8. Classes, SysUtils;
  9. type
  10. { TTestBasics }
  11. TTestBasics = class(TTestCase)
  12. private
  13. procedure DeleteUserXmlFile;
  14. protected
  15. published
  16. procedure TestSimpleWinRegistry;
  17. procedure TestDoubleWrite;
  18. procedure bug16395;
  19. procedure TestAdv;
  20. end;
  21. implementation
  22. uses
  23. registry
  24. {$ifdef windows}
  25. , tregistry2
  26. {$endif windows}
  27. ;
  28. { TTestBasics }
  29. procedure TTestBasics.DeleteUserXmlFile;
  30. {$ifndef windows}
  31. var
  32. fn: string;
  33. {$endif}
  34. begin
  35. {$ifdef windows}
  36. with TRegistry.Create do
  37. try
  38. DeleteKey('FirstNode');
  39. finally
  40. Free;
  41. end;
  42. {$else}
  43. FN:=includetrailingpathdelimiter(GetAppConfigDir(False))+'reg.xml';
  44. if FileExists(FN) then
  45. AssertTrue(DeleteFile(FN));
  46. {$endif}
  47. end;
  48. procedure TTestBasics.TestSimpleWinRegistry;
  49. var
  50. Registry : TRegistry;
  51. begin
  52. Registry := TRegistry.Create(KEY_READ);
  53. Registry.RootKey:=HKEY_LOCAL_MACHINE;
  54. // use a hopefully non existing key
  55. AssertFalse(Registry.KeyExists('FPC1234'));
  56. {$ifdef windows}
  57. AssertTrue(Registry.KeyExists('SOFTWARE'));
  58. {$endif}
  59. Registry.Free;
  60. end;
  61. procedure TTestBasics.TestDoubleWrite;
  62. begin
  63. DeleteUserXmlFile;
  64. with TRegistry.Create do
  65. try
  66. OpenKey('FirstNode', true);
  67. WriteString('LAYOUT', '');
  68. CloseKey;
  69. finally
  70. Free;
  71. end;
  72. with TRegistry.Create do
  73. try
  74. OpenKey('FirstNode', true);
  75. WriteString('LAYOUT', '');
  76. CloseKey;
  77. finally
  78. Free;
  79. end;
  80. DeleteUserXmlFile;
  81. end;
  82. procedure TTestBasics.bug16395;
  83. var
  84. r: TRegistry;
  85. s: string;
  86. begin
  87. DeleteUserXmlFile;
  88. r := TRegistry.Create;
  89. try
  90. r.RootKey := HKEY_CURRENT_USER;
  91. r.OpenKey('FirstNode', true);
  92. r.WriteString('string1', '');
  93. r.CloseKey;
  94. finally
  95. r.Free;
  96. end;
  97. // verify that empty value can be changed to non-empty one
  98. r := TRegistry.Create;
  99. try
  100. r.RootKey := HKEY_CURRENT_USER;
  101. r.OpenKey('FirstNode',false);
  102. s := r.ReadString('string1');
  103. AssertEquals('Failed to read back an empty string', '', s);
  104. r.WriteString('string1', 'string_value_1');
  105. r.CloseKey;
  106. finally
  107. r.Free;
  108. end;
  109. // verify that non-empty value can be changed to empty one
  110. r := TRegistry.Create;
  111. try
  112. r.RootKey := HKEY_CURRENT_USER;
  113. r.OpenKey('FirstNode',false);
  114. s := r.ReadString('string1');
  115. AssertEquals('Failed chaning empty string value to non-empty one', 'string_value_1',s);
  116. r.WriteString('string1', '');
  117. r.CloseKey;
  118. finally
  119. r.Free;
  120. end;
  121. r := TRegistry.Create;
  122. try
  123. r.RootKey := HKEY_CURRENT_USER;
  124. r.OpenKey('FirstNode',false);
  125. s := r.ReadString('string1');
  126. AssertEquals('Failed changing non-empty string value to empty one', '', s);
  127. r.CloseKey;
  128. finally
  129. r.Free;
  130. end;
  131. DeleteUserXmlFile;
  132. end;
  133. procedure TTestBasics.TestAdv;
  134. begin
  135. {$ifdef windows}
  136. DoRegTest2;
  137. {$endif windows}
  138. end;
  139. initialization
  140. RegisterTest(TTestBasics);
  141. end.