tcsrcmap.pas 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. unit TCSrcMap;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, fpcunit, testregistry, fpjson, JSSrcMap;
  6. type
  7. { TCustomTestSrcMap }
  8. TCustomTestSrcMap = class(TTestCase)
  9. protected
  10. procedure CheckEl(aName: String; El: TJSONData; aClass: TClass);
  11. function GetEl(Obj: TJSONObject; aName: String; aClass: TClass): TJSONData;
  12. end;
  13. { TTestSrcMap }
  14. TTestSrcMap = class(TCustomTestSrcMap)
  15. published
  16. procedure Test_Base64VLQ;
  17. procedure TestSrcMapIgnoreDuplicate;
  18. procedure TestSrcMapNames;
  19. end;
  20. implementation
  21. { TCustomTestSrcMap }
  22. procedure TCustomTestSrcMap.CheckEl(aName: String; El: TJSONData; aClass: TClass);
  23. begin
  24. AssertNotNull('json "'+aName+'" exists',El);
  25. AssertEquals('json "'+aName+'" class',El.ClassType,aClass);
  26. end;
  27. function TCustomTestSrcMap.GetEl(Obj: TJSONObject; aName: String; aClass: TClass): TJSONData;
  28. begin
  29. Result:=Obj.Elements[aName];
  30. CheckEl(aName,Result,aClass);
  31. end;
  32. { TTestSrcMap }
  33. procedure TTestSrcMap.Test_Base64VLQ;
  34. var
  35. i: Integer;
  36. s: String;
  37. p: PChar;
  38. j: NativeInt;
  39. begin
  40. for i:=-511 to 511 do
  41. begin
  42. s:=EncodeBase64VLQ(i);
  43. p:=PChar(s);
  44. j:=DecodeBase64VLQ(p);
  45. if i<>j then
  46. Fail('Encode/DecodeBase64VLQ OrigIndex='+IntToStr(i)+' Code="'+s+'" NewIndex='+IntToStr(j));
  47. end;
  48. end;
  49. procedure TTestSrcMap.TestSrcMapIgnoreDuplicate;
  50. var
  51. sm: TSourceMap;
  52. Obj: TJSONObject;
  53. El: TJSONData;
  54. Arr: TJSONArray;
  55. begin
  56. Obj:=nil;
  57. sm:=TSourceMap.Create('generated.js');
  58. try
  59. sm.AddMapping(1,0,'a.js',1,0);
  60. sm.AddMapping(2,0);
  61. sm.AddMapping(2,0);
  62. sm.AddMapping(3,0,'a.js',2,0);
  63. //writeln(sm.ToString);
  64. {
  65. version: 3,
  66. file: 'generated.js',
  67. sources: ['a.js'],
  68. names: [],
  69. mappings: 'AAAA;A;AACA'
  70. }
  71. Obj:=sm.ToJSON;
  72. // version
  73. El:=GetEl(Obj,'version',TJSONIntegerNumber);
  74. AssertEquals('json "version" value',El.AsInt64,3);
  75. // file
  76. El:=GetEl(Obj,'file',TJSONString);
  77. AssertEquals('json "file" value',El.AsString,'generated.js');
  78. // sources
  79. Arr:=TJSONArray(GetEl(Obj,'sources',TJSONArray));
  80. AssertEquals('json "sources".count',Arr.Count,1);
  81. El:=Arr[0];
  82. CheckEl('sources[0]',El,TJSONString);
  83. AssertEquals('json "sources[0]" value',El.AsString,'a.js');
  84. // names
  85. Arr:=TJSONArray(GetEl(Obj,'names',TJSONArray));
  86. AssertEquals('json "names".count',Arr.Count,0);
  87. // mappings
  88. El:=GetEl(Obj,'mappings',TJSONString);
  89. AssertEquals('json "mappings" value',El.AsString,'AAAA;A;AACA');
  90. finally
  91. Obj.Free;
  92. sm.Free;
  93. end;
  94. end;
  95. procedure TTestSrcMap.TestSrcMapNames;
  96. var
  97. sm: TSourceMap;
  98. Obj: TJSONObject;
  99. El: TJSONData;
  100. Arr: TJSONArray;
  101. begin
  102. Obj:=nil;
  103. sm:=TSourceMap.Create('generated.js');
  104. try
  105. sm.AddMapping(1,1,'a.js',2,2,'foo');
  106. sm.AddMapping(3,3,'a.js',4,4,'foo');
  107. writeln(sm.ToString);
  108. {
  109. version: 3,
  110. file: 'generated.js',
  111. sources: ['a.js'],
  112. names: ['foo'],
  113. mappings: 'CACEA;;GAEEA'
  114. }
  115. Obj:=sm.ToJSON;
  116. // version
  117. El:=GetEl(Obj,'version',TJSONIntegerNumber);
  118. AssertEquals('json "version" value',El.AsInt64,3);
  119. // file
  120. El:=GetEl(Obj,'file',TJSONString);
  121. AssertEquals('json "file" value',El.AsString,'generated.js');
  122. // sources
  123. Arr:=TJSONArray(GetEl(Obj,'sources',TJSONArray));
  124. AssertEquals('json "sources".count',Arr.Count,1);
  125. El:=Arr[0];
  126. CheckEl('sources[0]',El,TJSONString);
  127. AssertEquals('json "sources[0]" value',El.AsString,'a.js');
  128. // names
  129. Arr:=TJSONArray(GetEl(Obj,'names',TJSONArray));
  130. AssertEquals('json "names".count',Arr.Count,1);
  131. El:=Arr[0];
  132. CheckEl('names[0]',El,TJSONString);
  133. AssertEquals('json "names[0]" value',El.AsString,'foo');
  134. // mappings
  135. El:=GetEl(Obj,'mappings',TJSONString);
  136. AssertEquals('json "mappings" value',El.AsString,'CACEA;;GAEEA');
  137. finally
  138. Obj.Free;
  139. sm.Free;
  140. end;
  141. end;
  142. initialization
  143. RegisterTests([TTestSrcMap]);
  144. end.