Skip to content

Commit ee9f586

Browse files
committed
Make SIMULATED_FILE_IO and SIMULATED_COMMAND_LINE testable in Lazarus
1 parent e561fda commit ee9f586

File tree

9 files changed

+518
-353
lines changed

9 files changed

+518
-353
lines changed

projects/TestMadPascal.lpi

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -522,10 +522,16 @@
522522
</Debugging>
523523
</Linking>
524524
<Other>
525+
<Verbosity>
526+
<ShoLineNum Value="True"/>
527+
<ShowHintsForUnusedUnitsInMainSrc Value="True"/>
528+
</Verbosity>
525529
<ConfigFile>
526530
<StopAfterErrCount Value="100"/>
527531
</ConfigFile>
528-
<CustomOptions Value="-dDEBUG"/>
532+
<CustomOptions Value="-dDEBUG
533+
-dSIMULATED_COMMAND_LINE
534+
-dSIMULATED_FILE_IO"/>
529535
<OtherDefines Count="1">
530536
<Define0 Value="DEBUG"/>
531537
</OtherDefines>

src/Defines.inc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@
1717
{$ENDIF}
1818

1919
// Special cases for PAS2JS
20-
{$IFNDEF PAS2JS}
21-
{$DEFINE UPCASE_STRING}
22-
{$ELSE}
20+
{$IFDEF PAS2JS}
2321
{$DEFINE SIMULATED_FILE_IO}
22+
{$DEFINE SIMULATED_COMMAND_LINE}
23+
{$ELSE}
24+
{$DEFINE UPCASE_STRING}
2425
{$ENDIF}

src/FileIO.pas

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ TPathList = class
4747
// https://www.freepascal.org/docs-html/rtl/system/filepos.html
4848
function FilePos(): TInteger;
4949
procedure Read(var c: Char);
50-
procedure Reset(l: Longint); overload;
50+
procedure Reset(l: Longint); overload; // l = record size
5151
procedure Seek2(Pos: TInteger);
5252
end;
5353

@@ -501,6 +501,8 @@ procedure TBinaryFile.Read(var c: Char);
501501
{$IFNDEF SIMULATED_FILE_IO}
502502

503503
System.Read(f, c);
504+
{$ELSE}
505+
Assert(False, 'Not implemented yet');
504506
{$ENDIF}
505507

506508
end;
@@ -621,4 +623,26 @@ class function TFileSystem.GetFileMapEntry(const filePath: TFilePath): TFileMapE
621623
Result := fileMap.GetEntry(filePath);
622624
end;
623625

626+
627+
procedure InitializeFileMap;
628+
var
629+
fileMap: TFileMap;
630+
fileMapEntry: TFileMapEntry;
631+
begin
632+
{$IFDEF SIMULATED_FILE_IO}
633+
fileMap := TFileMap.Create;
634+
fileMapEntry:=fileMap.AddEntry('Input.pas', TFileMapEntry.TFileType.TextFile);
635+
fileMapEntry.content := 'Program program; end.';
636+
fileMapEntry := fileMap.AddEntry('lib', TFileMapEntry.TFileType.Folder);
637+
fileMapEntry.content := 'SubFolder1;SubFolder2';
638+
fileMapEntry := fileMap.AddEntry('Input.bin', TFileMapEntry.TFileType.BinaryFile);
639+
fileMapEntry.content := '01010110101';
640+
TFileSystem.Init(fileMap);
641+
{$ENDIF}
642+
end;
643+
644+
initialization
645+
646+
InitializeFileMap;
647+
624648
end.

src/Messages.pas

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ constructor TMessage.Create(const errorCode: TErrorCode; const Text: String; con
161161
'8': Self.Text := Self.Text + variable8;
162162
'9': Self.Text := Self.Text + variable9;
163163
else
164-
Assert(False, 'Support for ' + c + ' not implemented yet');
164+
Assert(False, 'Internal program error.');
165165
end;
166166
end;
167167
end

src/Scanner.pas

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1196,6 +1196,7 @@ procedure TokenizeProgram(UsesOn: Boolean = True);
11961196
inFile.Reset(1);
11971197

11981198
Text := '';
1199+
ch:=' ';
11991200

12001201
try
12011202
while True do

src/Tokens.pas

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -464,8 +464,6 @@ procedure AssertTokenOrd(const tokenKind: TTokenKind; Value: Byte);
464464
procedure AssertTokensOrd;
465465
var
466466
tokenKind: TTokenKind;
467-
var
468-
Value: Byte;
469467
begin
470468
for tokenKind := Low(TTokenKind) to High(TTokenKind) do
471469
begin

src/Utilities.pas

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,16 @@ implementation
4949

5050
class function TEnvironment.GetParameterCount(): Longint;
5151
begin
52-
{$IFNDEF PAS2JS}
52+
{$IFNDEF SIMULATED_COMMAND_LINE}
5353
Result := ParamCount;
5454
{$ELSE}
55-
Result := 3;
55+
Result := 4;
5656
{$ENDIF}
5757
end;
5858

5959
class function TEnvironment.GetParameterString(const i: Longint): String;
6060
begin
61-
{$IFNDEF PAS2JS}
61+
{$IFNDEF SIMULATED_COMMAND_LINE}
6262
Result := ParamStr(i);
6363
{$ELSE}
6464
case i of

src/include/pas2js/FileIO-PAS2JS-Implementation.inc

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,63 +2,68 @@ uses SysUtils, Messages;
22

33
function FileExists(const FileName: TFilePath; FollowLink: Boolean = True): Boolean;
44
begin
5-
Assert(False);
5+
Assert(False, 'Not yet implemented');
66
end;
77

88
procedure AssignFile(f: TTextFile; fName: TFilePath); overload;
99
begin
10-
Assert(False);
10+
Assert(False, 'Not yet implemented');
1111
end;
1212

1313
procedure AssignFile(f: TBinaryFile; fName: TFilePath); overload;
1414
begin
15+
Assert(False, 'Not yet implemented');
1516
end;
1617

1718
procedure BlockRead(var f: TBinaryFile; var Buf; Count: Longint; var Result: Longint);
1819
begin
19-
Assert(False);
20+
Assert(False, 'Not yet implemented');
2021
end;
2122

2223
procedure CloseFile(f: TTextFile); overload;
2324
begin
24-
Assert(False);
25+
Assert(False, 'Not yet implemented');
2526
end;
2627

2728
procedure CloseFile(f: TBinaryFile); overload;
2829
begin
29-
Assert(False);
30+
Assert(False, 'Not yet implemented');
3031
end;
3132

3233
procedure Flush(f: TTextFile);
3334
begin
34-
Assert(False);
35+
Assert(False, 'Not yet implemented');
3536
end;
3637

3738

3839
procedure Reset(f: TTextFile); overload;
3940
begin
41+
Assert(False, 'Not yet implemented');
4042
end;
4143

4244
procedure Reset(f: TBinaryFile); overload;
4345
begin
46+
Assert(False, 'Not yet implemented');
4447
end;
4548

4649
procedure Reset(var f: TBinaryFile; l: Longint); overload;
4750
begin
48-
Assert(False);
51+
Assert(False, 'Not yet implemented');
4952
end;
5053

5154
function FilePos(var f: TBinaryFile): TInteger;
5255
begin
53-
Assert(False);
56+
Assert(False, 'Not yet implemented');
5457
end;
5558

5659
procedure Seek(var f: TBinaryFile; Pos: TInteger);
5760
begin
61+
Assert(False, 'Not yet implemented');
5862
end;
5963

6064
procedure ReadLn(var F: TTextFile; Args: String);
6165
begin
66+
Assert(False, 'Not yet implemented');
6267
end;
6368

6469
procedure Read(var F: TTextFile; Args: Char);
@@ -67,7 +72,7 @@ end;
6772

6873
procedure Read(var F: TBinaryFile; Args: Char);
6974
begin
70-
Assert(False);
75+
Assert(False, 'Not yet implemented');
7176
end;
7277

7378
procedure Rewrite(f: TTextFile); overload;
@@ -76,25 +81,27 @@ end;
7681

7782
procedure Rewrite(f: TBinaryFile); overload;
7883
begin
79-
Assert(False);
84+
Assert(False, 'Not yet implemented');
8085
end;
8186

8287
procedure Erase(var f: TTextFile); overload;
8388
begin
84-
Assert(False);
89+
Assert(False, 'Not yet implemented');
8590
end;
8691

8792
procedure Erase(var f: TBinaryFile); overload;
8893
begin
89-
;
94+
Assert(False, 'Not yet implemented');
9095
end;
9196

9297
function EOF(f: TTextFile): Boolean; overload;
9398
begin
99+
Assert(False, 'Not yet implemented');
94100
end;
95101

96102
function EOF(f: TBinaryFile): Boolean; overload;
97103
begin
104+
Assert(False, 'Not yet implemented');
98105
end;
99106

100107
procedure WriteLn(s: String); overload;
@@ -105,18 +112,20 @@ end;
105112

106113
procedure WriteLn(f: TTextFile); overload;
107114
begin
115+
Assert(False, 'Not yet implemented');
108116
end;
109117

110118
procedure WriteLn(f: TTextFile; s: String); overload;
111119
begin
112-
Assert(False);
120+
Assert(False, 'Not yet implemented');
113121
end;
114122

115123
procedure WriteLn(f: TTextFile; s1: String; s2: String); overload;
116124
begin
125+
Assert(False, 'Not yet implemented');
117126
end;
118127

119128
procedure WriteLn(f: TTextFile; s1: String; s2: String; s3: String); overload;
120129
begin
121-
Assert(False);
130+
Assert(False, 'Not yet implemented');
122131
end;

0 commit comments

Comments
 (0)