You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
3.9 KiB

  1. unit uutlVariantEnumTest;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, TestFramework,
  6. uutlVariantEnum;
  7. type
  8. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  9. TutlVariantEnumTest = class(TTestCase)
  10. published
  11. procedure VariantToString;
  12. procedure VariantToEnum;
  13. procedure VariantToInt;
  14. end;
  15. implementation
  16. uses
  17. uutlGenerics;
  18. type
  19. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  20. TTestEnum = (
  21. teTest2 = 2,
  22. teTest3 = 3,
  23. teTest5 = 5,
  24. teTest9 = 9
  25. );
  26. TTestEnumH = specialize TutlEnumHelper<TTestEnum>;
  27. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  28. //TutlVariantEnumTest///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  29. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  30. procedure TutlVariantEnumTest.VariantToString;
  31. begin
  32. AssertEquals('2', String(VarMakeEnum(Ord(teTest2))));
  33. AssertEquals('3', String(VarMakeEnum(Ord(teTest3))));
  34. AssertEquals('5', String(VarMakeEnum(Ord(teTest5))));
  35. AssertEquals('9', String(VarMakeEnum(Ord(teTest9))));
  36. AssertEquals('teTest2', String(VarMakeEnum(Ord(teTest2), TTestEnumH)));
  37. AssertEquals('teTest3', String(VarMakeEnum(Ord(teTest3), TTestEnumH)));
  38. AssertEquals('teTest5', String(VarMakeEnum(Ord(teTest5), TTestEnumH)));
  39. AssertEquals('teTest9', String(VarMakeEnum(Ord(teTest9), TTestEnumH)));
  40. end;
  41. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  42. procedure TutlVariantEnumTest.VariantToEnum;
  43. var
  44. e: TTestEnum;
  45. begin
  46. AssertTrue (TTestEnumH.TryToEnum(VarMakeEnum(Ord(teTest2)), e, true));
  47. AssertEquals(Integer(teTest2), Integer(e));
  48. AssertTrue (TTestEnumH.TryToEnum(VarMakeEnum(Ord(teTest3)), e, true));
  49. AssertEquals(Integer(teTest3), Integer(e));
  50. AssertTrue (TTestEnumH.TryToEnum(VarMakeEnum(Ord(teTest5)), e, true));
  51. AssertEquals(Integer(teTest5), Integer(e));
  52. AssertTrue (TTestEnumH.TryToEnum(VarMakeEnum(Ord(teTest9)), e, true));
  53. AssertEquals(Integer(teTest9), Integer(e));
  54. AssertTrue (TTestEnumH.TryToEnum(VarMakeEnum(Ord(teTest2), TTestEnumH), e, true));
  55. AssertEquals(Integer(teTest2), Integer(e));
  56. AssertTrue (TTestEnumH.TryToEnum(VarMakeEnum(Ord(teTest3), TTestEnumH), e, true));
  57. AssertEquals(Integer(teTest3), Integer(e));
  58. AssertTrue (TTestEnumH.TryToEnum(VarMakeEnum(Ord(teTest5), TTestEnumH), e, true));
  59. AssertEquals(Integer(teTest5), Integer(e));
  60. AssertTrue (TTestEnumH.TryToEnum(VarMakeEnum(Ord(teTest9), TTestEnumH), e, true));
  61. AssertEquals(Integer(teTest9), Integer(e));
  62. end;
  63. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  64. procedure TutlVariantEnumTest.VariantToInt;
  65. begin
  66. // cause of a bug in FPC this test will always fail with a invalid cast exception
  67. AssertEquals(2, Integer(VarMakeEnum(Ord(teTest2))));
  68. AssertEquals(3, Integer(VarMakeEnum(Ord(teTest3))));
  69. AssertEquals(5, Integer(VarMakeEnum(Ord(teTest5))));
  70. AssertEquals(9, Integer(VarMakeEnum(Ord(teTest9))));
  71. AssertEquals(2, Integer(VarMakeEnum(Ord(teTest2), TTestEnumH)));
  72. AssertEquals(3, Integer(VarMakeEnum(Ord(teTest3), TTestEnumH)));
  73. AssertEquals(5, Integer(VarMakeEnum(Ord(teTest5), TTestEnumH)));
  74. AssertEquals(9, Integer(VarMakeEnum(Ord(teTest9), TTestEnumH)));
  75. end;
  76. initialization
  77. RegisterTest(TutlVariantEnumTest.Suite);
  78. end.