Заметки о тестировании, программировании и прочий "поток сознания", который жалко писать "в стол"
понедельник, 28 ноября 2016 г.
четверг, 24 ноября 2016 г.
вторник, 22 ноября 2016 г.
понедельник, 21 ноября 2016 г.
воскресенье, 20 ноября 2016 г.
среда, 9 ноября 2016 г.
#1315. Продолжение "приколов". "Delphi по-немецки"
https://translate.google.com/translate?hl=&sl=ru&tl=de&u=http%3A%2F%2Fprogrammingmindstream.blogspot.fr%2F2014%2F11%2Fmindstream.html&sandbox=1
Einheit TestmsSerializeController;
Schnittstelle
Anwendungen
Testframework,
msSerializeController,
msDiagramm,
msShape,
msRegisteredShapes,
System.Types,
System.Classes
;
Typ
TmsShapeClassCheck = TmsShapeClassLambda;
TmsShapeTestPrim = Klasse abstrakt (TTestCase)
Öffentlichkeit
Klasse Verfahren CheckShapes (aÜberprüfen und berichtigen: TmsShapeClassCheck);
Ende; // TmsShapeTestPrim
TmsShapeTestContext = record
rMethodName: string;
rSeed: Integer;
rDiagrammName: String;
rShapesCount: Integer;
rShapeClass: RmsShape;
Erstellen Konstruktor (aMethodName: string; aSeed: Integer; aDiagrammName: String; aShapesCount: Integer; aShapeClass: RmsShape);
Ende; // TmsShapeTestContext
TmsFileLambda = Verweis auf das Verfahren (aFile: TFileStream);
TmsDiagrammCheck = Verweis auf das Verfahren (aDiagramm: TmsDiagramm);
TestTmsSerializeControllerPrim = Klasse abstrakt (TmsShapeTestPrim)
geschützt
f_Coords: Array von TPoint;
f_Context: TmsShapeTestContext;
geschützt
Verfahren SetUp; außer Kraft setzen;
Verfahren CheckFileWithEtalon (const AFileName: String);
Funktion MakeFileName (const aTestName: String; aShapeClass: RmsShape): String;
Funktion TestResultsFileName (aShapeClass: RmsShape): String;
Verfahren SaveDiagrammAndCheck (aShapeClass: RmsShape; aDiagramm: TmsDiagramm);
Funktion ShapesCount: Integer;
Verfahren CreateDiagrammAndCheck (aÜberprüfen und berichtigen: TmsDiagrammCheck; const aName: String);
Verfahren CreateDiagrammWithShapeAndSaveAndCheck (aShapeClass: RmsShape);
Funktion TestSerializeMethodName: String; virtuelle;
Verfahren DeserializeDiargammAndCheck (aÜberprüfen und berichtigen: TmsDiagrammCheck; aShapeClass: RmsShape);
Verfahren TestDeSerializeForShapeClass (aShapeClass: RmsShape);
Verfahren TestDeSerializeViaShapeCheckForShapeClass (aShapeClass: RmsShape);
Funktion ShapeClass: RmsShape;
Verfahren OutToFileAndCheck (aLambda: TmsFileLambda);
Öffentlichkeit
Erstellen Konstruktor (const aContext: TmsShapeTestContext); virtuelle;
Ende; // TestTmsSerializeControllerPrim
TestTmsSerializeController = Klasse abstrakt (TestTmsSerializeControllerPrim)
veröffentlicht
Verfahren TestSerialize;
Verfahren TestDeSerialize;
Verfahren TestDeSerializeViaShapeCheck;
Verfahren TestShapeName;
Verfahren TestDiagrammName;
Ende; // TestTmsSerializeController
TmsParametrizedShapeTest = class (TestTmsSerializeController)
privat
f_TestSerializeMethodName: String;
geschützt
Funktion TestSerializeMethodName: String; außer Kraft setzen;
Öffentlichkeit
Erstellen Konstruktor (const aContext: TmsShapeTestContext); außer Kraft setzen;
Ende; // TmsParametrizedShapeTest
RmsParametrizedShapeTest = Klasse von TmsParametrizedShapeTest;
TmsParametrizedShapeTestSuite = class (TTestSuite)
privat
Konstruktor CreatePrim;
Öffentlichkeit
Verfahren AddTests (Testklasse: TTestCaseClass); außer Kraft setzen;
Erstellen Sie Klassenfunktion: ITest;
Ende; // TmsParametrizedShapeTestSuite
Implementierung
Anwendungen
System.SysUtils,
msTriangle,
msRectangle,
msCircle,
msRoundedRectangle,
msMover,
Winapi.Windows,
System.Rtti,
System.TypInfo,
FMX.Objects
;
Funktion TestTmsSerializeControllerPrim.MakeFileName (const aTestName: String; aShapeClass: RmsShape): String;
var
l_Folder: String;
beginnen
l_Folder: = ExtractFilePath (ParamStr (0)) + 'Test- ergebnisse \';
Force (l_Folder);
Ergebnis: = l_Folder + Class + '_' + aTestName + '_' + aShapeClass.ClassName + '.json';
Ende;
Verfahren TestTmsSerializeControllerPrim.CheckFileWithEtalon (const AFileName: String);
var
l_FileSerialized, l_FileEtalon: TStringList;
l_FileNameEtalon: String;
beginnen
l_FileNameEtalon: = AFileName + '.etalon' + ExtractFileExt (AFileName);
wenn FileExists (l_FileNameEtalon), dann
beginnen
l_FileSerialized: = TStringList.Create;
l_FileSerialized.LoadFromFile (AFileName);
l_FileEtalon: = TStringList.Create;
l_FileEtalon.LoadFromFile (l_FileNameEtalon);
CheckTrue (l_FileEtalon.Equals (l_FileSerialized));
FreeAndNil (l_FileSerialized);
FreeAndNil (l_FileEtalon);
Ende // FileExists (l_FileNameEtalon)
sonst
beginnen
Copyfile (PWideChar (AFileName), PWideChar (l_FileNameEtalon), True);
Ende; // FileExists (l_FileNameEtalon)
Ende;
Funktion TestTmsSerializeControllerPrim.TestResultsFileName (aShapeClass: RmsShape): String;
beginnen
Ergebnis: = MakeFileName (Name, aShapeClass);
Ende;
Verfahren TestTmsSerializeControllerPrim.SaveDiagrammAndCheck (aShapeClass: RmsShape; aDiagramm: TmsDiagramm);
var
l_FileNameTest: String;
beginnen
l_FileNameTest: = TestResultsFileName (aShapeClass);
TmsSerializeController.Serialize (l_FileNameTest, aDiagramm);
CheckFileWithEtalon (l_FileNameTest);
Ende;
Funktion TestTmsSerializeControllerPrim.ShapesCount: Integer;
beginnen
Ergebnis: = f_Context.rShapesCount;
Ende;
Konstruktor TmsShapeTestContext.Create (aMethodName: string; aSeed: Integer; aDiagrammName: String; aShapesCount: Integer; aShapeClass: RmsShape);
beginnen
rMethodName: = aMethodName;
rSeed: = aSeed;
rDiagrammName: = aDiagrammName;
rShapesCount: = aShapesCount;
rShapeClass: = aShapeClass
Ende;
Verfahren TestTmsSerializeControllerPrim.SetUp;
var
l_Index: Integer;
L_X: Integer;
l_Y: Integer;
beginnen
geerbt;
RandSeed: = f_Context.rSeed;
SetLength (f_Coords, ShapesCount);
für l_Index: = 0 bis Pred (ShapesCount) tun
beginnen
L_X: = Random (100);
l_Y: = Random (200);
f_Coords [l_Index]: = TPoint.Create (L_X, l_Y);
Ende; // für l_Index
Ende;
Verfahren TestTmsSerializeControllerPrim.CreateDiagrammAndCheck (aÜberprüfen und berichtigen: TmsDiagrammCheck; const aName: String);
var
l_Diagramm: TmsDiagramm;
l_Image: TImage;
beginnen
l_Image: = nil;
versuchen
l_Diagramm: = TmsDiagramm.Create (l_Image, aName);
versuchen
aÜberprüfen und berichtigen (l_Diagramm);
schließlich
FreeAndNil (l_Diagramm);
Ende; // try..finally
schließlich
FreeAndNil (l_Image);
Ende; // try..finally
Ende;
Verfahren TestTmsSerializeControllerPrim.CreateDiagrammWithShapeAndSaveAndCheck (aShapeClass: RmsShape);
beginnen
CreateDiagrammAndCheck (
Verfahren (aDiagramm: TmsDiagramm)
var
L_p: TPoint;
beginnen
für L_p in f_Coords tun
aDiagramm.ShapeList.Add (aShapeClass.Create (TmsMakeShapeContext.Create (TPointF.Create (l_P.X, l_P.Y), nil)));
SaveDiagrammAndCheck (aShapeClass, aDiagramm);
Ende
, f_Context.rDiagrammName
);
Ende;
Verfahren TestTmsSerializeController.TestSerialize;
beginnen
CreateDiagrammWithShapeAndSaveAndCheck (ShapeClass);
Ende;
Funktion TestTmsSerializeControllerPrim.TestSerializeMethodName: String;
beginnen
Ergebnis: = 'TestSerialize';
Ende;
Verfahren TestTmsSerializeControllerPrim.DeserializeDiargammAndCheck (aÜberprüfen und berichtigen: TmsDiagrammCheck; aShapeClass: RmsShape);
beginnen
CreateDiagrammAndCheck (
Verfahren (aDiagramm: TmsDiagramm)
beginnen
TmsSerializeController.DeSerialize (MakeFileName (TestSerializeMethodName, aShapeClass), aDiagramm);
aÜberprüfen und berichtigen (aDiagramm);
Ende
''
);
Ende;
Verfahren TestTmsSerializeControllerPrim.TestDeSerializeForShapeClass (aShapeClass: RmsShape);
beginnen
DeserializeDiargammAndCheck (
Verfahren (aDiagramm: TmsDiagramm)
beginnen
SaveDiagrammAndCheck (aShapeClass, aDiagramm);
Ende
, aShapeClass
);
Ende;
Verfahren TestTmsSerializeController.TestDeSerialize;
beginnen
TestDeSerializeForShapeClass (ShapeClass);
Ende;
Konstruktor TestTmsSerializeControllerPrim.Create (const aContext: TmsShapeTestContext);
beginnen
Create (aContext.rMethodName) geerbt;
f_Context: = aContext;
Ende;
Verfahren TestTmsSerializeControllerPrim.TestDeSerializeViaShapeCheckForShapeClass (aShapeClass: RmsShape);
beginnen
DeserializeDiargammAndCheck (
Verfahren (aDiagramm: TmsDiagramm)
var
l_Shape: TmsShape;
l_Index: Integer;
beginnen
Überprüfen Sie (aDiagramm.Name = f_Context.rDiagrammName);
Check (aDiagramm.ShapeList <> nil);
Überprüfen Sie (aDiagramm.ShapeList.Count = ShapesCount);
Check (Länge (f_Coords) = aDiagramm.ShapeList.Count);
für l_Index: = 0 bis Pred (aDiagramm.ShapeList.Count) tun
beginnen
l_Shape: = aDiagramm.ShapeList [l_Index] .HackInstance Als TmsShape;
Überprüfen Sie (l_Shape.ClassType = aShapeClass);
Überprüfen Sie (l_Shape.StartPoint.X = f_Coords [l_Index] .X);
Überprüfen Sie (l_Shape.StartPoint.Y = f_Coords [l_Index] .Y);
Ende; // für l_Shape
Ende
, aShapeClass
);
Ende;
Verfahren TestTmsSerializeController.TestDeSerializeViaShapeCheck;
beginnen
TestDeSerializeViaShapeCheckForShapeClass (ShapeClass);
Ende;
Verfahren TestTmsSerializeControllerPrim.OutToFileAndCheck (aLambda: TmsFileLambda);
var
l_FileNameTest: String;
l_FS: TFileStream;
beginnen
l_FileNameTest: = TestResultsFileName (ShapeClass);
l_FS: = TFileStream.Create (l_FileNameTest, fmCreate);
versuchen
aLambda (l_FS);
schließlich
FreeAndNil (l_FS);
Ende; // try..finally
CheckFileWithEtalon (l_FileNameTest);
Ende;
Verfahren TestTmsSerializeController.TestShapeName;
beginnen
OutToFileAndCheck (
Verfahren (aFile: TFileStream)
beginnen
aFile.Write (Ansistring (ShapeClass.ClassName) [1], Länge (ShapeClass.ClassName));
Ende
);
Ende;
Verfahren TestTmsSerializeController.TestDiagrammName;
beginnen
OutToFileAndCheck (
Verfahren (aFile: TFileStream)
beginnen
aFile.Write (Ansistring (f_Context.rDiagrammName) [1], Länge (f_Context.rDiagrammName));
Ende
);
Ende;
Klasse Verfahren TmsShapeTestPrim.CheckShapes (aÜberprüfen und berichtigen: TmsShapeClassCheck);
beginnen
TmsRegisteredShapes.IterateShapes (
Verfahren (aShapeClass: RmsShape)
beginnen
wenn nicht aShapeClass.InheritsFrom (TmsMover), dann
aÜberprüfen und berichtigen (aShapeClass);
Ende
);
Ende;
Funktion TestTmsSerializeControllerPrim.ShapeClass: RmsShape;
beginnen
Ergebnis: = f_Context.rShapeClass;
Ende;
Funktion TmsParametrizedShapeTest.TestSerializeMethodName: String;
beginnen
Ergebnis: = f_TestSerializeMethodName + TestSerializeMethodName geerbt;
Ende;
Konstruktor TmsParametrizedShapeTest.Create (const aContext: TmsShapeTestContext);
beginnen
Create (aContext) geerbt;
FTestName: = f_Context.rShapeClass.ClassName + '.' + AContext.rMethodName;
f_TestSerializeMethodName: = f_Context.rShapeClass.ClassName +; '.'
Ende;
// TmsParametrizedShapeTestSuite
Konstruktor TmsParametrizedShapeTestSuite.CreatePrim;
beginnen
Create (TmsParametrizedShapeTest) geerbt;
Ende;
Klasse Funktion TmsParametrizedShapeTestSuite.Create: ITest;
beginnen
Ergebnis: = CreatePrim;
Ende;
Verfahren TmsParametrizedShapeTestSuite.AddTests (Testklasse: TTestCaseClass);
beginnen
Behaupten (testClass.InheritsFrom (TmsParametrizedShapeTest));
RandSeed: = 10;
TmsShapeTestPrim.CheckShapes (
Verfahren (aShapeClass: RmsShape)
var
l_Method: TRttiMethod;
l_DiagrammName: String;
l_Seed: Integer;
l_ShapesCount: Integer;
beginnen
l_Seed: = Random (High (l_Seed));
l_DiagrammName: = 'Diagramm №' + IntToStr (Random (10));
l_ShapesCount: = Random (1000) + 1;
für l_Method in TRttiContext.Create.GetType (Testclass) .GetMethods tun
if (l_Method.Visibility = mvPublished), dann
AddTest (RmsParametrizedShapeTest (Testklasse) .Create (TmsShapeTestContext.Create (l_Method.Name, l_Seed, l_DiagrammName, l_ShapesCount, aShapeClass)));
Ende
);
Ende;
Initialisierung
RegisterTest (TmsParametrizedShapeTestSuite.Create);
Ende.
вторник, 8 ноября 2016 г.
Подписаться на:
Комментарии (Atom)