utcdevices.pas 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. {
  2. This file is part of the Free Pascal Run Time Library (rtl)
  3. Copyright (c) 1999-2019 by the Free Pascal development team
  4. This file provides the base for the pluggable sorting algorithm
  5. support. It also provides a default QuickSort implementation.
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. unit utcdevices;
  13. {$mode objfpc}{$H+}
  14. interface
  15. uses
  16. Classes, SysUtils, fpcunit, testutils, testregistry, types, system.devices;
  17. type
  18. TMyDeviceInfo = Class(TBaseDeviceInfo)
  19. //
  20. end;
  21. { TTestDevices }
  22. TTestDevices= class(TTestCase)
  23. private
  24. FDevice: TMyDeviceInfo;
  25. procedure AddSampleDevice1;
  26. procedure AddSampleDevice2;
  27. procedure AssertSampleDevice2(aDevice: TBaseDeviceInfo);
  28. procedure CreateEmpty;
  29. procedure AssertSampleDevice(aDevice: TBaseDeviceInfo);
  30. function CreateSampleDevice: TMyDeviceInfo;
  31. function CreateSampleDevice2: TMyDeviceInfo;
  32. protected
  33. procedure SetUp; override;
  34. procedure TearDown; override;
  35. Procedure AssertEquals(Msg : String; aExpected,aActual : TSize); overload;
  36. Procedure AssertEquals(Msg : String; aExpected,aActual : TDeviceInfo.TDeviceClass); overload;
  37. Procedure AssertEquals(Msg : String; aExpected,aActual : TOSVersion.TPlatform);overload;
  38. // Freed in teardown
  39. Property Device : TMyDeviceInfo Read FDevice Write FDevice;
  40. published
  41. procedure TestHookUp;
  42. Procedure TestCreate;
  43. Procedure TestCreateEmpty;
  44. Procedure TestDiagonal;
  45. Procedure TestAddDevice;
  46. Procedure TestAttribute;
  47. procedure TestSelect;
  48. procedure TestSelect2;
  49. procedure TestSelect3;
  50. end;
  51. implementation
  52. uses typinfo;
  53. procedure TTestDevices.TestHookUp;
  54. begin
  55. AssertNull('No this device',TDeviceInfo.ThisDevice);
  56. AssertEquals('No devices',0, TDeviceInfo.DeviceCount);
  57. end;
  58. function TTestDevices.CreateSampleDevice: TMyDeviceInfo;
  59. begin
  60. Result:=TMyDeviceInfo.Create(TDeviceInfo.TDeviceClass.Desktop,'1',
  61. TSize.Create(1200,900),
  62. TSize.Create(2400,1800),
  63. TSize.Create(1900,1200),
  64. TSize.Create(3800,2400),TOSVersion.TPlatform.pfLinux,96,True);
  65. end;
  66. function TTestDevices.CreateSampleDevice2: TMyDeviceInfo;
  67. begin
  68. Result:=TMyDeviceInfo.Create(TDeviceInfo.TDeviceClass.Tablet,'2',
  69. TSize.Create(1600,1024),
  70. TSize.Create(3200,2048),
  71. TSize.Create(2048,1600),
  72. TSize.Create(4096,3200),TOSVersion.TPlatform.pfLinux,128,False);
  73. end;
  74. procedure TTestDevices.TestCreate;
  75. begin
  76. Device:=CreateSampleDevice;
  77. AssertSampleDevice(Device);
  78. end;
  79. procedure TTestDevices.AssertSampleDevice(aDevice : TBaseDeviceInfo);
  80. begin
  81. AssertEquals('MinPhysicalScreenSize',TSize.Create(1200,900),aDevice.MinPhysicalScreenSize);
  82. AssertEquals('MinLogicalScreenSize',TSize.Create(2400,1800),aDevice.MinLogicalScreenSize);
  83. AssertEquals('MaxPhysicalScreenSize',TSize.Create(1900,1200),aDevice.MaxPhysicalScreenSize);
  84. AssertEquals('MaxLogicalScreenSize',TSize.Create(3800,2400),aDevice.MaxLogicalScreenSize);
  85. AssertEquals('Platform',TOSVersion.TPlatform.pfLinux,aDevice.Platform);
  86. AssertEquals('DeviceClass',TDeviceInfo.TDeviceClass.Desktop,aDevice.DeviceClass);
  87. AssertEquals('ID','1',aDevice.ID);
  88. AssertEquals('PixelsPerInch',96,aDevice.PixelsPerInch);
  89. AssertEquals('Exclusive',True,aDevice.Exclusive);
  90. end;
  91. procedure TTestDevices.AssertSampleDevice2(aDevice : TBaseDeviceInfo);
  92. begin
  93. AssertEquals('MinPhysicalScreenSize',TSize.Create(1600,1024),aDevice.MinPhysicalScreenSize);
  94. AssertEquals('MinLogicalScreenSize',TSize.Create(3200,2048),aDevice.MinLogicalScreenSize);
  95. AssertEquals('MaxPhysicalScreenSize',TSize.Create(2048,1600),aDevice.MaxPhysicalScreenSize);
  96. AssertEquals('MaxLogicalScreenSize',TSize.Create(4096,3200),aDevice.MaxLogicalScreenSize);
  97. AssertEquals('Platform',TOSVersion.TPlatform.pfLinux,aDevice.Platform);
  98. AssertEquals('DeviceClass',TDeviceInfo.TDeviceClass.Tablet,aDevice.DeviceClass);
  99. AssertEquals('ID','2',aDevice.ID);
  100. AssertEquals('PixelsPerInch',128,aDevice.PixelsPerInch);
  101. AssertEquals('Exclusive',False,aDevice.Exclusive);
  102. end;
  103. procedure TTestDevices.CreateEmpty;
  104. begin
  105. TDeviceInfo.create;
  106. end;
  107. procedure TTestDevices.TestCreateEmpty;
  108. begin
  109. AssertException('Cannot create directly',ENoConstructException,@CreateEmpty);
  110. end;
  111. procedure TTestDevices.TestDiagonal;
  112. Var
  113. D: Single;
  114. begin
  115. Device:=CreateSampleDevice;
  116. D:=Sqrt(Sqr(1900)+Sqr(1200))/96;
  117. AssertEquals('MaxDiagonal',D,Device.MaxDiagonal);
  118. D:=Sqrt(Sqr(1200)+Sqr(900))/96;
  119. AssertEquals('MinDiagonal',D,Device.MinDiagonal);
  120. end;
  121. procedure TTestDevices.AddSampleDevice1;
  122. begin
  123. TDeviceInfo.AddDevice(TDeviceInfo.TDeviceClass.Desktop,'1',
  124. TSize.Create(1200,900),
  125. TSize.Create(2400,1800),
  126. TSize.Create(1900,1200),
  127. TSize.Create(3800,2400),TOSVersion.TPlatform.pfLinux,96,True);
  128. end;
  129. procedure TTestDevices.AddSampleDevice2;
  130. begin
  131. TDeviceInfo.AddDevice(TDeviceInfo.TDeviceClass.Tablet,'2',
  132. TSize.Create(1600,1024),
  133. TSize.Create(3200,2048),
  134. TSize.Create(2048,1600),
  135. TSize.Create(4096,3200),TOSVersion.TPlatform.pfLinux,128,False);
  136. end;
  137. procedure TTestDevices.TestAddDevice;
  138. begin
  139. AddSampleDevice1;
  140. AssertEquals('Count correct',1,TDeviceInfo.DeviceCount);
  141. AssertSampleDevice(TDeviceInfo.Devices[0]);
  142. AddSampleDevice2;
  143. AssertEquals('Count correct',2,TDeviceInfo.DeviceCount);
  144. AssertSampleDevice2(TDeviceInfo.Devices[1]);
  145. end;
  146. procedure TTestDevices.TestAttribute;
  147. begin
  148. Device:=CreateSampleDevice;
  149. Device.AddAttribute('tutu','toto');
  150. AssertEquals('Has existing attribute',True,Device.HasAttribute('tutu'));
  151. AssertEquals('Does not have non-existing attribute',False,Device.HasAttribute('titi'));
  152. AssertEquals('Value of existing attribute','toto',Device.Attributes['tutu']);
  153. AssertEquals('Value of non-existing attribute','',Device.Attributes['titi']);
  154. end;
  155. procedure TTestDevices.TestSelect;
  156. Var
  157. Arr : TDeviceInfoArray;
  158. begin
  159. AddSampleDevice1;
  160. AddSampleDevice2;
  161. Arr:=TDeviceInfo.SelectDevices(TDeviceInfo.TDeviceClass.Automotive,TSize.Create(100,100),TSize.Create(200,200),TOSVersion.TPlatform.pfAndroid,96,False);
  162. AssertEquals('Empty, platform does not match',0,Length(Arr));
  163. end;
  164. procedure TTestDevices.TestSelect2;
  165. Var
  166. Arr : TDeviceInfoArray;
  167. begin
  168. AddSampleDevice1;
  169. AddSampleDevice2;
  170. Arr:=TDeviceInfo.SelectDevices(TDeviceInfo.TDeviceClass.Desktop,TSize.Create(100,100),TSize.Create(200,200),TOSVersion.TPlatform.pfLinux,96,False);
  171. AssertEquals('platform matches',2,Length(Arr));
  172. AssertSame('El 1',TDeviceInfo.Devices[0],Arr[1]);
  173. AssertSame('El 2',TDeviceInfo.Devices[1],Arr[0]);
  174. end;
  175. procedure TTestDevices.TestSelect3;
  176. Var
  177. Arr : TDeviceInfoArray;
  178. begin
  179. AddSampleDevice1;
  180. AddSampleDevice2;
  181. Arr:=TDeviceInfo.SelectDevices(TDeviceInfo.TDeviceClass.Desktop,TSize.Create(1200,900),TSize.Create(2400,1800),TOSVersion.TPlatform.pfLinux,96,False);
  182. AssertEquals('platform matches',2,Length(Arr));
  183. AssertSame('El 1',TDeviceInfo.Devices[0],Arr[0]);
  184. AssertSame('El 2',TDeviceInfo.Devices[1],Arr[1]);
  185. end;
  186. procedure TTestDevices.SetUp;
  187. begin
  188. TDeviceInfo.ClearDevices;
  189. end;
  190. procedure TTestDevices.TearDown;
  191. begin
  192. TDeviceInfo.ClearDevices;
  193. FreeAndNil(FDevice);
  194. end;
  195. procedure TTestDevices.AssertEquals(Msg: String; aExpected, aActual: TSize);
  196. begin
  197. AssertEquals(Msg+': cx',aExpected.cx,aActual.cx);
  198. AssertEquals(Msg+': cy',aExpected.cy,aActual.cy);
  199. end;
  200. procedure TTestDevices.AssertEquals(Msg: String; aExpected,
  201. aActual: TDeviceInfo.TDeviceClass);
  202. begin
  203. AssertEquals(Msg,GetEnumName(TypeInfo(TDeviceInfo.TDeviceClass),Ord(aExpected)),
  204. GetEnumName(TypeInfo(TDeviceInfo.TDeviceClass),Ord(aActual)));
  205. end;
  206. procedure TTestDevices.AssertEquals(Msg: String; aExpected,
  207. aActual: TOSVersion.TPlatform);
  208. begin
  209. AssertEquals(Msg,GetEnumName(TypeInfo(TOSVersion.TPlatform),Ord(aExpected)),
  210. GetEnumName(TypeInfo(TOSVersion.TPlatform),Ord(aActual)));
  211. end;
  212. initialization
  213. RegisterTest(TTestDevices);
  214. end.