unit uutlVariantEnumTest; {$mode objfpc}{$H+} interface uses Classes, SysUtils, TestFramework, uutlVariantEnum; type //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// TutlVariantEnumTest = class(TTestCase) published procedure VariantToString; procedure VariantToEnum; procedure VariantToInt; end; implementation uses uutlGenerics; type //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// TTestEnum = ( teTest2 = 2, teTest3 = 3, teTest5 = 5, teTest9 = 9 ); TTestEnumH = specialize TutlEnumHelper; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //TutlVariantEnumTest/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlVariantEnumTest.VariantToString; begin AssertEquals('2', String(VarMakeEnum(Ord(teTest2)))); AssertEquals('3', String(VarMakeEnum(Ord(teTest3)))); AssertEquals('5', String(VarMakeEnum(Ord(teTest5)))); AssertEquals('9', String(VarMakeEnum(Ord(teTest9)))); AssertEquals('teTest2', String(VarMakeEnum(Ord(teTest2), TTestEnumH))); AssertEquals('teTest3', String(VarMakeEnum(Ord(teTest3), TTestEnumH))); AssertEquals('teTest5', String(VarMakeEnum(Ord(teTest5), TTestEnumH))); AssertEquals('teTest9', String(VarMakeEnum(Ord(teTest9), TTestEnumH))); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlVariantEnumTest.VariantToEnum; var e: TTestEnum; begin AssertTrue (TTestEnumH.TryToEnum(VarMakeEnum(Ord(teTest2)), e, true)); AssertEquals(Integer(teTest2), Integer(e)); AssertTrue (TTestEnumH.TryToEnum(VarMakeEnum(Ord(teTest3)), e, true)); AssertEquals(Integer(teTest3), Integer(e)); AssertTrue (TTestEnumH.TryToEnum(VarMakeEnum(Ord(teTest5)), e, true)); AssertEquals(Integer(teTest5), Integer(e)); AssertTrue (TTestEnumH.TryToEnum(VarMakeEnum(Ord(teTest9)), e, true)); AssertEquals(Integer(teTest9), Integer(e)); AssertTrue (TTestEnumH.TryToEnum(VarMakeEnum(Ord(teTest2), TTestEnumH), e, true)); AssertEquals(Integer(teTest2), Integer(e)); AssertTrue (TTestEnumH.TryToEnum(VarMakeEnum(Ord(teTest3), TTestEnumH), e, true)); AssertEquals(Integer(teTest3), Integer(e)); AssertTrue (TTestEnumH.TryToEnum(VarMakeEnum(Ord(teTest5), TTestEnumH), e, true)); AssertEquals(Integer(teTest5), Integer(e)); AssertTrue (TTestEnumH.TryToEnum(VarMakeEnum(Ord(teTest9), TTestEnumH), e, true)); AssertEquals(Integer(teTest9), Integer(e)); end; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// procedure TutlVariantEnumTest.VariantToInt; begin // cause of a bug in FPC this test will always fail with a invalid cast exception AssertEquals(2, Integer(VarMakeEnum(Ord(teTest2)))); AssertEquals(3, Integer(VarMakeEnum(Ord(teTest3)))); AssertEquals(5, Integer(VarMakeEnum(Ord(teTest5)))); AssertEquals(9, Integer(VarMakeEnum(Ord(teTest9)))); AssertEquals(2, Integer(VarMakeEnum(Ord(teTest2), TTestEnumH))); AssertEquals(3, Integer(VarMakeEnum(Ord(teTest3), TTestEnumH))); AssertEquals(5, Integer(VarMakeEnum(Ord(teTest5), TTestEnumH))); AssertEquals(9, Integer(VarMakeEnum(Ord(teTest9), TTestEnumH))); end; initialization RegisterTest(TutlVariantEnumTest.Suite); end.