summaryrefslogtreecommitdiff
path: root/packages/fcl-js/tests
diff options
context:
space:
mode:
Diffstat (limited to 'packages/fcl-js/tests')
-rw-r--r--packages/fcl-js/tests/tcsrcmap.pas175
-rw-r--r--packages/fcl-js/tests/testjs.lpi228
-rw-r--r--packages/fcl-js/tests/testjs.lpr2
3 files changed, 196 insertions, 209 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.
+
diff --git a/packages/fcl-js/tests/testjs.lpi b/packages/fcl-js/tests/testjs.lpi
index 8f5b6bda2b..74764e0bb0 100644
--- a/packages/fcl-js/tests/testjs.lpi
+++ b/packages/fcl-js/tests/testjs.lpi
@@ -1,32 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
- <Version Value="9"/>
+ <Version Value="10"/>
<General>
+ <SessionStorage Value="InProjectDir"/>
<MainUnit Value="0"/>
- <UseXPManifest Value="True"/>
- <Icon Value="0"/>
- <ActiveWindowIndexAtStart Value="0"/>
+ <UseAppBundle Value="False"/>
</General>
- <VersionInfo>
- <Language Value=""/>
- <CharSet Value=""/>
- <StringTable ProductVersion=""/>
- </VersionInfo>
<BuildModes Count="1">
<Item1 Name="default" Default="True"/>
</BuildModes>
<PublishOptions>
<Version Value="2"/>
- <IgnoreBinaries Value="False"/>
- <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
- <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
</PublishOptions>
<RunParams>
<local>
<FormatVersion Value="1"/>
- <CommandLineParams Value="--suite=TTestStatementWriter"/>
- <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local>
</RunParams>
<RequiredPackages Count="1">
@@ -34,260 +23,84 @@
<PackageName Value="FCL"/>
</Item1>
</RequiredPackages>
- <Units Count="16">
+ <Units Count="13">
<Unit0>
<Filename Value="testjs.lpr"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="testjs"/>
- <WindowIndex Value="1"/>
- <TopLine Value="1"/>
- <CursorPos X="48" Y="3"/>
- <UsageCount Value="201"/>
</Unit0>
<Unit1>
<Filename Value="tcscanner.pp"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="tcscanner"/>
- <WindowIndex Value="1"/>
- <TopLine Value="1"/>
- <CursorPos X="17" Y="22"/>
- <UsageCount Value="201"/>
</Unit1>
<Unit2>
<Filename Value="../src/jsbase.pp"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="jsbase"/>
- <WindowIndex Value="1"/>
- <TopLine Value="1"/>
- <CursorPos X="1" Y="12"/>
- <UsageCount Value="200"/>
</Unit2>
<Unit3>
<Filename Value="../src/jsparser.pp"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="jsparser"/>
- <EditorIndex Value="3"/>
- <WindowIndex Value="1"/>
- <TopLine Value="67"/>
- <CursorPos X="14" Y="85"/>
- <UsageCount Value="201"/>
- <Loaded Value="True"/>
</Unit3>
<Unit4>
<Filename Value="../src/jsscanner.pp"/>
<IsPartOfProject Value="True"/>
<UnitName Value="JSScanner"/>
- <EditorIndex Value="6"/>
- <WindowIndex Value="1"/>
- <TopLine Value="342"/>
- <CursorPos X="76" Y="345"/>
- <UsageCount Value="201"/>
- <Loaded Value="True"/>
</Unit4>
<Unit5>
<Filename Value="../src/jstree.pp"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="jstree"/>
- <EditorIndex Value="5"/>
- <WindowIndex Value="1"/>
- <TopLine Value="739"/>
- <CursorPos X="3" Y="757"/>
- <UsageCount Value="200"/>
- <Loaded Value="True"/>
</Unit5>
<Unit6>
<Filename Value="tcparser.pp"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="tcparser"/>
- <EditorIndex Value="4"/>
- <WindowIndex Value="1"/>
- <TopLine Value="1878"/>
- <CursorPos X="3" Y="1883"/>
- <UsageCount Value="201"/>
- <Loaded Value="True"/>
</Unit6>
<Unit7>
<Filename Value="../src/jswriter.pp"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="jswriter"/>
- <EditorIndex Value="0"/>
- <WindowIndex Value="1"/>
- <TopLine Value="8"/>
- <CursorPos X="28" Y="15"/>
- <UsageCount Value="202"/>
- <Loaded Value="True"/>
</Unit7>
<Unit8>
<Filename Value="tctextwriter.pp"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="tctextwriter"/>
- <WindowIndex Value="1"/>
- <TopLine Value="4"/>
- <CursorPos X="15" Y="22"/>
- <UsageCount Value="201"/>
</Unit8>
<Unit9>
- <Filename Value="../../../../../projects/lazarus/components/fpcunit/console/consoletestrunner.pas"/>
- <UnitName Value="consoletestrunner"/>
- <WindowIndex Value="1"/>
- <TopLine Value="157"/>
- <CursorPos X="1" Y="175"/>
- <UsageCount Value="4"/>
+ <Filename Value="tcwriter.pp"/>
+ <IsPartOfProject Value="True"/>
</Unit9>
<Unit10>
- <Filename Value="tcwriter.pp"/>
+ <Filename Value="../src/jstoken.pp"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="tcwriter"/>
- <IsVisibleTab Value="True"/>
- <EditorIndex Value="2"/>
- <WindowIndex Value="1"/>
- <TopLine Value="668"/>
- <CursorPos X="45" Y="698"/>
- <UsageCount Value="220"/>
- <Loaded Value="True"/>
</Unit10>
<Unit11>
- <Filename Value="../../../../released/packages/fcl-json/src/fpjson.pp"/>
- <UnitName Value="fpjson"/>
- <WindowIndex Value="1"/>
- <TopLine Value="558"/>
- <CursorPos X="21" Y="580"/>
- <UsageCount Value="61"/>
+ <Filename Value="tcsrcmap.pas"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="TCSrcMap"/>
</Unit11>
<Unit12>
- <Filename Value="../src/jstoken.pp"/>
+ <Filename Value="../src/jssrcmap.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="jstoken"/>
- <EditorIndex Value="1"/>
- <WindowIndex Value="1"/>
- <TopLine Value="1"/>
- <CursorPos X="18" Y="8"/>
- <UsageCount Value="200"/>
- <Loaded Value="True"/>
+ <UnitName Value="JSSrcMap"/>
</Unit12>
- <Unit13>
- <Filename Value="../../../../released/packages/fcl-fpcunit/src/testregistry.pp"/>
- <UnitName Value="testregistry"/>
- <WindowIndex Value="1"/>
- <TopLine Value="106"/>
- <CursorPos X="22" Y="108"/>
- <UsageCount Value="13"/>
- </Unit13>
- <Unit14>
- <Filename Value="../../../rtl/tests/punit.pp"/>
- <UnitName Value="punit"/>
- <WindowIndex Value="1"/>
- <TopLine Value="405"/>
- <CursorPos X="41" Y="415"/>
- <UsageCount Value="18"/>
- </Unit14>
- <Unit15>
- <Filename Value="../../../../released/rtl/inc/mathh.inc"/>
- <WindowIndex Value="1"/>
- <TopLine Value="60"/>
- <CursorPos X="14" Y="78"/>
- <UsageCount Value="13"/>
- </Unit15>
</Units>
- <JumpHistory Count="6" HistoryIndex="5">
- <Position1>
- <Filename Value="tcparser.pp"/>
- <Caret Line="1" Column="1" TopLine="1"/>
- </Position1>
- <Position2>
- <Filename Value="tcparser.pp"/>
- <Caret Line="1732" Column="55" TopLine="1713"/>
- </Position2>
- <Position3>
- <Filename Value="tcparser.pp"/>
- <Caret Line="1883" Column="3" TopLine="1878"/>
- </Position3>
- <Position4>
- <Filename Value="tcwriter.pp"/>
- <Caret Line="66" Column="43" TopLine="51"/>
- </Position4>
- <Position5>
- <Filename Value="tcwriter.pp"/>
- <Caret Line="76" Column="43" TopLine="48"/>
- </Position5>
- <Position6>
- <Filename Value="tcwriter.pp"/>
- <Caret Line="251" Column="31" TopLine="232"/>
- </Position6>
- </JumpHistory>
</ProjectOptions>
<CompilerOptions>
<Version Value="11"/>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
- <OtherUnitFiles Value="/home/michael/source/fcl-js/;..;../src"/>
+ <OtherUnitFiles Value="../src"/>
</SearchPaths>
<CodeGeneration>
+ <Checks>
+ <IOChecks Value="True"/>
+ <RangeChecks Value="True"/>
+ <OverflowChecks Value="True"/>
+ <StackChecks Value="True"/>
+ </Checks>
+ <VerifyObjMethodCallValidity Value="True"/>
<Optimizations>
<OptimizationLevel Value="0"/>
</Optimizations>
</CodeGeneration>
- <Linking>
- <Debugging>
- <UseHeaptrc Value="True"/>
- </Debugging>
- </Linking>
- <Other>
- <CompilerPath Value="$(CompPath)"/>
- </Other>
</CompilerOptions>
<Debugging>
- <BreakPoints Count="7">
- <Item1>
- <Kind Value="bpkSource"/>
- <WatchScope Value="wpsGlobal"/>
- <WatchKind Value="wpkWrite"/>
- <Source Value="../jsscanner.pp"/>
- <Line Value="717"/>
- </Item1>
- <Item2>
- <Kind Value="bpkSource"/>
- <WatchScope Value="wpsLocal"/>
- <WatchKind Value="wpkWrite"/>
- <Source Value="tcparser.pp"/>
- <Line Value="2086"/>
- </Item2>
- <Item3>
- <Kind Value="bpkSource"/>
- <WatchScope Value="wpsLocal"/>
- <WatchKind Value="wpkWrite"/>
- <Source Value="tcparser.pp"/>
- <Line Value="2566"/>
- </Item3>
- <Item4>
- <Kind Value="bpkSource"/>
- <WatchScope Value="wpsLocal"/>
- <WatchKind Value="wpkWrite"/>
- <Source Value="../src/jsparser.pp"/>
- <Line Value="845"/>
- </Item4>
- <Item5>
- <Kind Value="bpkSource"/>
- <WatchScope Value="wpsLocal"/>
- <WatchKind Value="wpkWrite"/>
- <Source Value="../src/jsparser.pp"/>
- <Line Value="754"/>
- </Item5>
- <Item6>
- <Kind Value="bpkSource"/>
- <WatchScope Value="wpsLocal"/>
- <WatchKind Value="wpkWrite"/>
- <Source Value="../src/jsparser.pp"/>
- <Line Value="1287"/>
- </Item6>
- <Item7>
- <Kind Value="bpkSource"/>
- <WatchScope Value="wpsLocal"/>
- <WatchKind Value="wpkWrite"/>
- <Source Value="tcparser.pp"/>
- <Line Value="2253"/>
- </Item7>
- </BreakPoints>
<Exceptions Count="3">
<Item1>
<Name Value="EAbort"/>
@@ -300,5 +113,4 @@
</Item3>
</Exceptions>
</Debugging>
- <EditorMacros Count="0"/>
</CONFIG>
diff --git a/packages/fcl-js/tests/testjs.lpr b/packages/fcl-js/tests/testjs.lpr
index badb5ab1e6..574e4a3ff8 100644
--- a/packages/fcl-js/tests/testjs.lpr
+++ b/packages/fcl-js/tests/testjs.lpr
@@ -7,7 +7,7 @@ uses
cwstring,
{$ENDIF}
Classes, consoletestrunner, tcscanner, jsparser, jsscanner, jstree, jsbase,
- tcparser, jswriter, tcwriter, jstoken;
+ tcparser, jswriter, tcwriter, jstoken, JSSrcMap, TCSrcMap;
var
Application: TTestRunner;