{$MODE OBJFPC} { -*- delphi -*- } {$INCLUDE settings.inc} program harness; uses sysutils, configuration, csvdocument, servers, systemdynasty, systems, materials, clock, exceptions, intutils, techtree, encyclopedia, basenetwork, fileutils, test1; const DataDirectory = 'src/systems-server/tests/data/'; TestTempDirectory = DataDirectory + 'temp/'; type TTestDynastyDatabase = class(TDynastyDatabase) public function GetDynastyFromDisk(DynastyID: Cardinal): TDynasty; override; end; function TTestDynastyDatabase.GetDynastyFromDisk(DynastyID: Cardinal): TDynasty; begin Result := TDynasty.Create(DynastyID, 0, TestTempDirectory + 'dynasty1/', nil); end; type TTestEventLoop = class(IEventLoop) private FClock: TClock; constructor Create(AClock: TClock); public // IEventLoop function GetClock(): TClock; function ScheduleEvent(Time: TDateTime; Callback: TEventCallback; var Data): PEvent; procedure CancelEvent(var Event: PEvent); end; constructor TTestEventLoop.Create(AClock: TClock); begin inherited Create(); FClock := AClock; end; function TTestEventLoop.GetClock(): TClock; begin Result := FClock; end; function TTestEventLoop.ScheduleEvent(Time: TDateTime; Callback: TEventCallback; var Data): PEvent; begin XXX; end; procedure TTestEventLoop.CancelEvent(var Event: PEvent); begin XXX; end; type TTest = procedure (System: TSystem; EventLoop: IEventLoop); procedure RunTest(Callback: TTest); var DynastyServerDatabase: TServerDatabase; ServerFile: TCSVDocument; Settings: PSettings; OreRecords: TMaterialHashSet; TechnologyTree: TTechnologyTree; SystemClock, MonotonicClock: TClock; DynastyDatabase: TDynastyDatabase; GlobalEncyclopedia: TEncyclopedia; TestEventLoop: TTestEventLoop; TestSystem: TSystem; begin Settings := LoadSettingsConfiguration(DataDirectory); EnsureDirectoryExists(DataDirectory + SystemServersDirectoryZ); ServerFile := LoadDynastiesServersConfiguration(DataDirectory); DynastyServerDatabase := TServerDatabase.Create(ServerFile); FreeAndNil(ServerFile); OreRecords := LoadOres(DataDirectory + OreRecordsFilenameZ); TechnologyTree := LoadTechnologyTree(DataDirectory + TechnologyTreeFilenameZ, OreRecords); DynastyDatabase := TTestDynastyDatabase.Create(); GlobalEncyclopedia := TEncyclopedia.Create(Settings, OreRecords, TechnologyTree); FreeAndNil(TechnologyTree); SystemClock := TSystemClock.Create(); MonotonicClock := TMonotonicClock.Create(SystemClock); TestEventLoop := TTestEventLoop.Create(MonotonicClock); EnsureDirectoryExists(TestTempDirectory); if (DirectoryExists(TestTempDirectory + 'system1')) then DeleteDirectoryRecursively(TestTempDirectory + 'system1' + '/'); TestSystem := TSystem.Create(TestTempDirectory + 'system1' + '/', 1, 0, 0, GlobalEncyclopedia.SpaceClass, TestEventLoop, DynastyDatabase, GlobalEncyclopedia, Settings); Callback(TestSystem, TestEventLoop); DeleteDirectoryRecursively(TestTempDirectory + 'system1/'); FreeAndNil(TestSystem); FreeAndNil(TestEventLoop); FreeAndNil(MonotonicClock); FreeAndNil(GlobalEncyclopedia); FreeAndNil(SystemClock); FreeAndNil(DynastyDatabase); FreeAndNil(DynastyServerDatabase); FreeAndNil(OreRecords); Dispose(Settings); end; begin RunTest(@Test1.Test); Writeln(); Writeln(' TESTS PASSED!'); Writeln(); end.