diff options
Diffstat (limited to 'packages/fcl-js/tests/tcsrcmap.pas')
-rw-r--r-- | packages/fcl-js/tests/tcsrcmap.pas | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/packages/fcl-js/tests/tcsrcmap.pas b/packages/fcl-js/tests/tcsrcmap.pas new file mode 100644 index 0000000000..65927a9ace --- /dev/null +++ b/packages/fcl-js/tests/tcsrcmap.pas @@ -0,0 +1,175 @@ +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. + |