summaryrefslogtreecommitdiff
path: root/packages/fcl-js/tests/tcsrcmap.pas
diff options
context:
space:
mode:
Diffstat (limited to 'packages/fcl-js/tests/tcsrcmap.pas')
-rw-r--r--packages/fcl-js/tests/tcsrcmap.pas175
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.
+