testbasics.pp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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. end;
  20. implementation
  21. uses
  22. registry;
  23. { TTestBasics }
  24. procedure TTestBasics.DeleteUserXmlFile;
  25. {$ifndef windows}
  26. var
  27. fn: string;
  28. {$endif}
  29. begin
  30. {$ifndef windows}
  31. FN:=includetrailingpathdelimiter(GetAppConfigDir(False))+'reg.xml';
  32. if FileExists(FN) then
  33. AssertTrue(DeleteFile(FN));
  34. {$endif}
  35. end;
  36. procedure TTestBasics.TestSimpleWinRegistry;
  37. var
  38. Registry : TRegistry;
  39. begin
  40. Registry := TRegistry.Create(KEY_READ);
  41. Registry.RootKey:=HKEY_LOCAL_MACHINE;
  42. // use a hopefully non existing key
  43. AssertFalse(Registry.KeyExists('FPC1234'));
  44. {$ifdef windows}
  45. AssertTrue(Registry.KeyExists('SOFTWARE'));
  46. {$endif}
  47. Registry.Free;
  48. end;
  49. procedure TTestBasics.TestDoubleWrite;
  50. begin
  51. DeleteUserXmlFile;
  52. with TRegistry.Create do
  53. try
  54. OpenKey('test', true);
  55. WriteString('LAYOUT', '');
  56. CloseKey;
  57. finally
  58. Free;
  59. end;
  60. with TRegistry.Create do
  61. try
  62. OpenKey('test', true);
  63. WriteString('LAYOUT', '');
  64. CloseKey;
  65. finally
  66. Free;
  67. end;
  68. DeleteUserXmlFile;
  69. end;
  70. procedure TTestBasics.bug16395;
  71. var
  72. r: TRegistry;
  73. s: string;
  74. begin
  75. DeleteUserXmlFile;
  76. r := TRegistry.Create;
  77. try
  78. r.RootKey := HKEY_CURRENT_USER;
  79. r.OpenKey('FirstNode', true);
  80. r.WriteString('string1', '');
  81. r.CloseKey;
  82. finally
  83. r.Free;
  84. end;
  85. // verify that empty value can be changed to non-empty one
  86. r := TRegistry.Create;
  87. try
  88. r.RootKey := HKEY_CURRENT_USER;
  89. r.OpenKey('FirstNode',false);
  90. s := r.ReadString('string1');
  91. AssertEquals('Failed to read back an empty string', '', s);
  92. r.WriteString('string1', 'string_value_1');
  93. r.CloseKey;
  94. finally
  95. r.Free;
  96. end;
  97. // verify that non-empty value can be changed to 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 chaning empty string value to non-empty one', 'string_value_1',s);
  104. r.WriteString('string1', '');
  105. r.CloseKey;
  106. finally
  107. r.Free;
  108. end;
  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 changing non-empty string value to empty one', '', s);
  115. r.CloseKey;
  116. finally
  117. r.Free;
  118. end;
  119. DeleteUserXmlFile;
  120. end;
  121. initialization
  122. RegisterTest(TTestBasics);
  123. end.