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.
А ведь я примерно на таком писал. В Германии. Там VBA был полностью на немецкий переведён.
ОтветитьУдалитьСтрах какой. Plankalkül прямо какой-то.
ОтветитьУдалить;-)
Удалить