mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-12-03 14:17:23 +01:00
176 lines
3.9 KiB
ObjectPascal
176 lines
3.9 KiB
ObjectPascal
unit TCSrcMap;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, fpcunit, testregistry, fpjson, JSSrcMap;
|
|
|
|
type
|
|
|
|
{ TCustomTestSrcMap }
|
|
|
|
TCustomTestSrcMap = class(TTestCase)
|
|
protected
|
|
procedure CheckEl(aName: String; El: TJSONData; aClass: TClass);
|
|
function GetEl(Obj: TJSONObject; aName: String; aClass: TClass): TJSONData;
|
|
end;
|
|
|
|
{ TTestSrcMap }
|
|
|
|
TTestSrcMap = class(TCustomTestSrcMap)
|
|
published
|
|
procedure Test_Base64VLQ;
|
|
procedure TestSrcMapIgnoreDuplicate;
|
|
procedure TestSrcMapNames;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{ TCustomTestSrcMap }
|
|
|
|
procedure TCustomTestSrcMap.CheckEl(aName: String; El: TJSONData; aClass: TClass);
|
|
begin
|
|
AssertNotNull('json "'+aName+'" exists',El);
|
|
AssertEquals('json "'+aName+'" class',El.ClassType,aClass);
|
|
end;
|
|
|
|
function TCustomTestSrcMap.GetEl(Obj: TJSONObject; aName: String; aClass: TClass): TJSONData;
|
|
begin
|
|
Result:=Obj.Elements[aName];
|
|
CheckEl(aName,Result,aClass);
|
|
end;
|
|
|
|
{ TTestSrcMap }
|
|
|
|
procedure TTestSrcMap.Test_Base64VLQ;
|
|
var
|
|
i: Integer;
|
|
s: String;
|
|
p: PChar;
|
|
j: NativeInt;
|
|
begin
|
|
for i:=-511 to 511 do
|
|
begin
|
|
s:=EncodeBase64VLQ(i);
|
|
p:=PChar(s);
|
|
j:=DecodeBase64VLQ(p);
|
|
if i<>j then
|
|
Fail('Encode/DecodeBase64VLQ OrigIndex='+IntToStr(i)+' Code="'+s+'" NewIndex='+IntToStr(j));
|
|
end;
|
|
end;
|
|
|
|
procedure TTestSrcMap.TestSrcMapIgnoreDuplicate;
|
|
var
|
|
sm: TSourceMap;
|
|
Obj: TJSONObject;
|
|
El: TJSONData;
|
|
Arr: TJSONArray;
|
|
begin
|
|
Obj:=nil;
|
|
sm:=TSourceMap.Create('generated.js');
|
|
try
|
|
sm.AddMapping(1,0,'a.js',1,0);
|
|
sm.AddMapping(2,0);
|
|
sm.AddMapping(2,0);
|
|
sm.AddMapping(3,0,'a.js',2,0);
|
|
|
|
//writeln(sm.ToString);
|
|
{
|
|
version: 3,
|
|
file: 'generated.js',
|
|
sources: ['a.js'],
|
|
names: [],
|
|
mappings: 'AAAA;A;AACA'
|
|
}
|
|
Obj:=sm.ToJSON;
|
|
|
|
// version
|
|
El:=GetEl(Obj,'version',TJSONIntegerNumber);
|
|
AssertEquals('json "version" value',El.AsInt64,3);
|
|
|
|
// file
|
|
El:=GetEl(Obj,'file',TJSONString);
|
|
AssertEquals('json "file" value',El.AsString,'generated.js');
|
|
|
|
// sources
|
|
Arr:=TJSONArray(GetEl(Obj,'sources',TJSONArray));
|
|
AssertEquals('json "sources".count',Arr.Count,1);
|
|
El:=Arr[0];
|
|
CheckEl('sources[0]',El,TJSONString);
|
|
AssertEquals('json "sources[0]" value',El.AsString,'a.js');
|
|
|
|
// names
|
|
Arr:=TJSONArray(GetEl(Obj,'names',TJSONArray));
|
|
AssertEquals('json "names".count',Arr.Count,0);
|
|
|
|
// mappings
|
|
El:=GetEl(Obj,'mappings',TJSONString);
|
|
AssertEquals('json "mappings" value',El.AsString,'AAAA;A;AACA');
|
|
|
|
finally
|
|
Obj.Free;
|
|
sm.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TTestSrcMap.TestSrcMapNames;
|
|
var
|
|
sm: TSourceMap;
|
|
Obj: TJSONObject;
|
|
El: TJSONData;
|
|
Arr: TJSONArray;
|
|
begin
|
|
Obj:=nil;
|
|
sm:=TSourceMap.Create('generated.js');
|
|
try
|
|
sm.AddMapping(1,1,'a.js',2,2,'foo');
|
|
sm.AddMapping(3,3,'a.js',4,4,'foo');
|
|
writeln(sm.ToString);
|
|
{
|
|
version: 3,
|
|
file: 'generated.js',
|
|
sources: ['a.js'],
|
|
names: ['foo'],
|
|
mappings: 'CACEA;;GAEEA'
|
|
}
|
|
Obj:=sm.ToJSON;
|
|
|
|
// version
|
|
El:=GetEl(Obj,'version',TJSONIntegerNumber);
|
|
AssertEquals('json "version" value',El.AsInt64,3);
|
|
|
|
// file
|
|
El:=GetEl(Obj,'file',TJSONString);
|
|
AssertEquals('json "file" value',El.AsString,'generated.js');
|
|
|
|
// sources
|
|
Arr:=TJSONArray(GetEl(Obj,'sources',TJSONArray));
|
|
AssertEquals('json "sources".count',Arr.Count,1);
|
|
El:=Arr[0];
|
|
CheckEl('sources[0]',El,TJSONString);
|
|
AssertEquals('json "sources[0]" value',El.AsString,'a.js');
|
|
|
|
// names
|
|
Arr:=TJSONArray(GetEl(Obj,'names',TJSONArray));
|
|
AssertEquals('json "names".count',Arr.Count,1);
|
|
El:=Arr[0];
|
|
CheckEl('names[0]',El,TJSONString);
|
|
AssertEquals('json "names[0]" value',El.AsString,'foo');
|
|
|
|
// mappings
|
|
El:=GetEl(Obj,'mappings',TJSONString);
|
|
AssertEquals('json "mappings" value',El.AsString,'CACEA;;GAEEA');
|
|
|
|
finally
|
|
Obj.Free;
|
|
sm.Free;
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
RegisterTests([TTestSrcMap]);
|
|
end.
|
|
|