12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201 |
- unit tcwebidl2wasmjob;
- {$mode ObjFPC}{$H+}
- interface
- uses
- Classes, SysUtils, fpcunit, testregistry, webidldefs, webidlscanner, webidltopas, webidltowasmjob, pascodegen;
- const
- FixedGUID = '{1B6D2766-7DA6-40FA-9B4E-93FFB805B83A}';
- type
- { TTestWebIDLToPasWasmJob }
- TTestWebIDLToPasWasmJob = class(TWebIDLToPasWasmJob)
- private
- FRealGUID: Boolean;
- Public
- function ComputeGUID(const Prefix: TIDLString; aList: TIDLDefinitionList): TIDLString; override;
- Property RealGUID : Boolean Read FRealGUID Write FRealGUID;
- end;
- { TCustomTestWebIDL2WasmJob }
- TCustomTestWebIDL2WasmJob = Class(TTestCase)
- private
- FHeaderSrc: TIDLString;
- FWebIDLToPas: TWebIDLToPasWasmJob;
- procedure OnLog(Sender: TObject; LogType: TCodegenLogType; const Msg: String
- );
- protected
- procedure Setup; override;
- procedure TearDown; override;
- public
- procedure TestWebIDL(const WebIDLSrc, ExpectedPascalSrc: array of string); virtual;
- procedure CheckDiff(Msg, Expected, Actual: string); virtual;
- property WebIDLToPas: TWebIDLToPasWasmJob read FWebIDLToPas;
- property HeaderSrc: TIDLString read FHeaderSrc write FHeaderSrc;
- end;
- { TTestWebIDL2WasmJob }
- TTestWebIDL2WasmJob = Class(TCustomTestWebIDL2WasmJob)
- published
- procedure TestWJ_Empty;
- // typedefs
- procedure TestWJ_Typedef_Boolean;
- procedure TestWJ_Typedef_Sequence;
- procedure TestWJ_Typedef_Aliased;
- procedure TestWJ_Typedef_Dictionary;
- procedure TestWJ_Typedef_DictionaryWithParent;
- // attributes
- procedure TestWJ_IntfAttribute_Boolean;
- procedure TestWJ_IntfStringifier;
- procedure TestWJ_IntfAttribute_ArrayBuffer;
- procedure TestWJ_IntfAttribute_ArrayBufferView;
- procedure TestWJ_IntfAttribute_ChromeOnly;
- procedure TestWJ_CallBackObjectArg;
- procedure TestWJ_CallBackEnumArg;
- procedure TestWJ_CallBackSequenceArg;
- // todo procedure TestWJ_IntfAttribute_Any;
- // functions
- procedure TestWJ_IntfFunction_Void;
- procedure TestWJ_IntfFunction_SetEventHandler;
- procedure TestWJ_IntfFunction_Promise;
- procedure TestWJ_IntfFunction_ArgAny;
- procedure TestWJ_IntfFunction_EnumResult;
- procedure TestWJ_IntfFunction_SequenceArg;
- procedure TestWJ_IntfFunction_2SequenceArg;
- procedure TestWJ_IntfFunction_Constructor;
- procedure TestWJ_IntfFunction_ArrayBufferArg;
- procedure TestWJ_IntfFunction_ArrayBufferViewArg;
- procedure TestWJ_IntfFunction_SequenceResult;
- procedure TestWJ_IntfFunction_GlobalSequenceResult;
- procedure TestWJ_IntfFunction_ChromeOnly;
- procedure TestWJ_IntfFunction_ChromeOnlyNewObject;
- procedure TestWJ_IntfFunction_DictionaryResult;
- procedure TestWJ_IntfFunction_AliasResult;
- procedure TestWJ_IntfFunction_NestedUnionSequence;
- procedure TestWJ_intfFunction_UnionOptional;
- // Namespace attribute
- procedure TestWJ_NamespaceAttribute_Boolean;
- // maplike
- procedure TestWJ_MaplikeInterface;
- end;
- function LinesToStr(Args: array of const): TIDLString;
- function CheckSrcDiff(Expected, Actual: string; out Msg: string): boolean;
- implementation
- function LinesToStr(Args: array of const): TIDLString;
- var
- s,a: TIDLString;
- U : UnicodeString;
- i: Integer;
- begin
- s:='';
- for i:=Low(Args) to High(Args) do
- begin
- case Args[i].VType of
- vtChar: A:=Args[i].VChar;
- vtString: A:=Args[i].VString^;
- vtPChar: A:=Args[i].VPChar;
- vtWideChar: begin
- U:=Args[i].VWideChar;
- A:=UTF8Encode(U);
- end;
- vtPWideChar: begin
- U:=Args[i].VPWideChar;
- A:=UTF8Encode(U);
- end;
- vtAnsiString: begin
- A:=AnsiString(Args[i].VAnsiString);
- end;
- vtWidestring: begin
- U:=WideString(Args[i].VWideString);
- A:=UTF8Encode(U);
- end;
- vtUnicodeString: begin
- U:=UnicodeString(Args[i].VUnicodeString);
- A:=UTF8Encode(U);
- end;
- end;
- S:=S+A+LineEnding;
- end;
- // Writeln('LinesToStr : ',S);
- Result:=s;
- end;
- function CheckSrcDiff(Expected, Actual: string; out Msg: string): boolean;
- // search diff, ignore changes in spaces
- const
- SpaceChars = [#9,#10,#13,' '];
- var
- ExpectedP, ActualP: PChar;
- function FindLineEnd(p: PChar): PChar;
- begin
- Result:=p;
- while not (Result^ in [#0,#10,#13]) do inc(Result);
- end;
- function FindLineStart(p, MinP: PChar): PChar;
- begin
- while (p>MinP) and not (p[-1] in [#10,#13]) do dec(p);
- Result:=p;
- end;
- procedure SkipLineEnd(var p: PChar);
- begin
- if p^ in [#10,#13] then
- begin
- if (p[1] in [#10,#13]) and (p^<>p[1]) then
- inc(p,2)
- else
- inc(p);
- end;
- end;
- function HasSpecialChar(s: string): boolean;
- var
- i: Integer;
- begin
- for i:=1 to length(s) do
- if s[i] in [#0..#31,#127..#255] then
- exit(true);
- Result:=false;
- end;
- function HashSpecialChars(s: string): string;
- var
- i: Integer;
- begin
- Result:='';
- for i:=1 to length(s) do
- if s[i] in [#0..#31,#127..#255] then
- Result:=Result+'#'+hexstr(ord(s[i]),2)
- else
- Result:=Result+s[i];
- end;
- procedure DiffFound;
- var
- ActLineStartP, ActLineEndP, p, StartPos: PChar;
- ExpLine, ActLine: String;
- i, LineNo, DiffLineNo: Integer;
- begin
- writeln('Diff found "',Msg,'". Lines:');
- // write correct lines
- p:=PChar(Expected);
- LineNo:=0;
- DiffLineNo:=0;
- repeat
- StartPos:=p;
- while not (p^ in [#0,#10,#13]) do inc(p);
- ExpLine:=copy(Expected,StartPos-PChar(Expected)+1,p-StartPos);
- SkipLineEnd(p);
- inc(LineNo);
- if (p<=ExpectedP) and (p^<>#0) then
- begin
- writeln('= ',ExpLine);
- end else begin
- // diff line
- if DiffLineNo=0 then DiffLineNo:=LineNo;
- // write actual line
- ActLineStartP:=FindLineStart(ActualP,PChar(Actual));
- ActLineEndP:=FindLineEnd(ActualP);
- ActLine:=copy(Actual,ActLineStartP-PChar(Actual)+1,ActLineEndP-ActLineStartP);
- writeln('- ',ActLine);
- if HasSpecialChar(ActLine) then
- writeln('- ',HashSpecialChars(ActLine));
- // write expected line
- writeln('+ ',ExpLine);
- if HasSpecialChar(ExpLine) then
- writeln('- ',HashSpecialChars(ExpLine));
- // write empty line with pointer ^
- for i:=1 to 2+ExpectedP-StartPos do write(' ');
- writeln('^');
- Msg:='expected "'+ExpLine+'", but got "'+ActLine+'".';
- CheckSrcDiff:=false;
- // write up to ten following actual lines to get some context
- for i:=1 to 10 do begin
- ActLineStartP:=ActLineEndP;
- SkipLineEnd(ActLineStartP);
- if ActLineStartP^=#0 then break;
- ActLineEndP:=FindLineEnd(ActLineStartP);
- ActLine:=copy(Actual,ActLineStartP-PChar(Actual)+1,ActLineEndP-ActLineStartP);
- writeln('~ ',ActLine);
- end;
- exit;
- end;
- until p^=#0;
- // internal error:
- writeln('DiffFound Actual:-----------------------');
- writeln(Actual);
- writeln('DiffFound Expected:---------------------');
- writeln(Expected);
- writeln('DiffFound ------------------------------');
- Msg:='diff found, but lines are the same, internal error';
- CheckSrcDiff:=false;
- end;
- var
- IsSpaceNeeded: Boolean;
- LastChar, Quote: Char;
- begin
- Result:=true;
- Msg:='';
- Writeln('Actual :',ACtual);
- if Expected='' then Expected:=' ';
- if Actual='' then Actual:=' ';
- ExpectedP:=PChar(Expected);
- ActualP:=PChar(Actual);
- repeat
- //writeln('TTestModule.CheckDiff Exp="',ExpectedP^,'" Act="',ActualP^,'"');
- case ExpectedP^ of
- #0:
- begin
- // check that rest of Actual has only spaces
- while ActualP^ in SpaceChars do inc(ActualP);
- if ActualP^<>#0 then
- begin
- DiffFound;
- exit;
- end;
- exit(true);
- end;
- ' ',#9,#10,#13:
- begin
- // skip space in Expected
- IsSpaceNeeded:=false;
- if ExpectedP>PChar(Expected) then
- LastChar:=ExpectedP[-1]
- else
- LastChar:=#0;
- while ExpectedP^ in SpaceChars do inc(ExpectedP);
- if (LastChar in ['a'..'z','A'..'Z','0'..'9','_','$'])
- and (ExpectedP^ in ['a'..'z','A'..'Z','0'..'9','_','$']) then
- IsSpaceNeeded:=true;
- if IsSpaceNeeded and (not (ActualP^ in SpaceChars)) then
- begin
- DiffFound;
- exit;
- end;
- while ActualP^ in SpaceChars do inc(ActualP);
- end;
- '''','"':
- begin
- while ActualP^ in SpaceChars do inc(ActualP);
- if ExpectedP^<>ActualP^ then
- begin
- DiffFound;
- exit;
- end;
- Quote:=ExpectedP^;
- repeat
- inc(ExpectedP);
- inc(ActualP);
- if ExpectedP^<>ActualP^ then
- begin
- DiffFound;
- exit;
- end;
- if (ExpectedP^ in [#0,#10,#13]) then
- break
- else if (ExpectedP^=Quote) then
- begin
- inc(ExpectedP);
- inc(ActualP);
- break;
- end;
- until false;
- end;
- else
- while ActualP^ in SpaceChars do inc(ActualP);
- if ExpectedP^<>ActualP^ then
- begin
- DiffFound;
- exit;
- end;
- inc(ExpectedP);
- inc(ActualP);
- end;
- until false;
- end;
- { TTestWebIDLToPasWasmJob }
- function TTestWebIDLToPasWasmJob.ComputeGUID(const Prefix: TIDLString; aList: TIDLDefinitionList): TIDLString;
- begin
- if RealGUID then
- Result:=inherited ComputeGUID(Prefix, aList)
- else
- Result:=FixedGUID;
- end;
- { TCustomTestWebIDL2WasmJob }
- procedure TCustomTestWebIDL2WasmJob.OnLog(Sender: TObject;
- LogType: TCodegenLogType; const Msg: String);
- begin
- if LogType=cltInfo then ;
- if Sender=nil then ;
- Status('TCustomTestWebIDL2WasmJob.OnLog '+Msg);
- end;
- procedure TCustomTestWebIDL2WasmJob.Setup;
- begin
- inherited Setup;
- FWebIDLToPas:=TTestWebIDLToPasWasmJob.Create(nil);
- WebIDLToPas.OnLog:=@OnLog;
- WebIDLToPas.InputFileName:='test1.webidl';
- WebIDLToPas.OutputFileName:='test1.pas';
- WebIDLToPas.OutputStream:=TMemoryStream.Create;
- HeaderSrc:=LinesToStr([
- 'Unit test1;',
- '',
- '{$MODE ObjFPC}',
- '{$H+}',
- 'interface',
- '',
- 'uses SysUtils, Job.JS;',
- '']);
- end;
- procedure TCustomTestWebIDL2WasmJob.TearDown;
- begin
- WebIDLToPas.InputStream.Free;
- WebIDLToPas.InputStream:=nil;
- WebIDLToPas.OutputStream.Free;
- WebIDLToPas.OutputStream:=nil;
- FreeAndNil(FWebIDLToPas);
- inherited TearDown;
- end;
- procedure TCustomTestWebIDL2WasmJob.TestWebIDL(const WebIDLSrc,
- ExpectedPascalSrc: array of string);
- var
- i: Integer;
- Line, ExpectedSrc, InputSrc, OutputSrc: String;
- begin
- {$IFDEF VerboseWebidl2WasmJob}
- writeln('TCustomTestWebIDL2WasmJob.TestWebIDL WebIDL:----------------------');
- {$ENDIF}
- InputSrc:='';
- for i:=0 to high(WebIDLSrc) do
- begin
- Line:=WebIDLSrc[i]+sLineBreak;
- InputSrc:=InputSrc+Line;
- {$IFDEF VerboseWebidl2WasmJob}
- write(Line);
- {$ENDIF}
- end;
- WebIDLToPas.InputStream:=TStringStream.Create(InputSrc);
- {$IFDEF VerboseWebidl2WasmJob}
- writeln('TCustomTestWebIDL2WasmJob.TestWebIDL ExpectedPascal: BEGIN--------');
- {$ENDIF}
- ExpectedSrc:=HeaderSrc;
- for i:=0 to high(ExpectedPascalSrc) do
- ExpectedSrc:=ExpectedSrc+ExpectedPascalSrc[i]+sLineBreak;
- {$IFDEF VerboseWebidl2WasmJob}
- writeln(ExpectedSrc);
- writeln('TCustomTestWebIDL2WasmJob.TestWebIDL ExpectedPascal END-----------');
- {$ENDIF}
- WebIDLToPas.Execute;
- OutputSrc:=WebIDLToPas.Source.Text;
- {$IFDEF VerboseWebidl2WasmJob}
- writeln('TCustomTestWebIDL2WasmJob.TestWebIDL ActualPascal: BEGIN----------');
- writeln(OutputSrc);
- writeln('TCustomTestWebIDL2WasmJob.TestWebIDL ActualPascal: END------------');
- {$ENDIF}
- CheckDiff('Source Differs',ExpectedSrc,OutputSrc);
- end;
- procedure TCustomTestWebIDL2WasmJob.CheckDiff(Msg, Expected, Actual: string);
- // search diff, ignore changes in spaces
- var
- s: string;
- begin
- if CheckSrcDiff(Expected,Actual,s) then exit;
- Fail(Msg+': '+s);
- end;
- { TTestWebIDL2WasmJob }
- procedure TTestWebIDL2WasmJob.TestWJ_Empty;
- begin
- TestWebIDL([
- ''],
- ['Type',
- ' // Forward class definitions',
- 'implementation',
- 'end.',
- '']);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_Typedef_Boolean;
- begin
- TestWebIDL([
- 'typedef boolean PerformanceEntry;',
- ''],
- ['Type',
- ' // Forward class definitions',
- ' TPerformanceEntry = Boolean;',
- 'implementation',
- 'end.',
- '']);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_Typedef_Sequence;
- begin
- TestWebIDL([
- 'typedef boolean PerformanceEntry;',
- 'typedef sequence <PerformanceEntry> PerformanceEntryList;',
- ''],
- ['Type',
- ' // Forward class definitions',
- ' TPerformanceEntry = Boolean;',
- ' TPerformanceEntryListDynArray = IJSArray; // array of PerformanceEntry',
- 'implementation',
- 'end.',
- '']);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_Typedef_Aliased;
- begin
- WebIDLToPas.TypeAliases.Add('Float32List=IJSFloat32Array');
- TestWebIDL([
- ' typedef ([AllowShared] Float32Array or sequence<GLfloat>) Float32List;',
- ''],
- ['',
- 'Type',
- ' // Forward class definitions',
- 'implementation',
- '',
- 'end.',
- ''
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_Typedef_Dictionary;
- begin
- TestWebIDL([
- 'dictionary Attr {',
- ' boolean aBoolean;',
- '};',
- ''],
- ['Type',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' TJSAttrRec = record',
- ' aBoolean: Boolean;',
- ' end;',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' function _GetaBoolean: Boolean;',
- ' procedure _SetaBoolean(const aValue: Boolean);',
- ' property aBoolean: Boolean read _GetaBoolean write _SetaBoolean;',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' function _GetaBoolean: Boolean;',
- ' procedure _SetaBoolean(const aValue: Boolean);',
- ' Public',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' property aBoolean: Boolean read _GetaBoolean write _SetaBoolean;',
- ' end;',
- '',
- 'implementation',
- '',
- 'function TJSAttr._GetaBoolean: Boolean;',
- 'begin',
- ' Result:=ReadJSPropertyBoolean(''aBoolean'');',
- 'end;',
- '',
- 'procedure TJSAttr._SetaBoolean(const aValue: Boolean);',
- 'begin',
- ' WriteJSPropertyBoolean(''aBoolean'',aValue);',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Object'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.',
- '']);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_Typedef_DictionaryWithParent;
- begin
- TestWebIDL([
- 'dictionary Attr {',
- ' boolean aBoolean;',
- '};',
- 'dictionary Attr2 : Attr {',
- ' long aLong;',
- '};',
- ''],
- ['Type',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' IJSAttr2 = interface;',
- ' TJSAttr2 = class;',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' TJSAttrRec = record',
- ' aBoolean: Boolean;',
- ' end;',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' function _GetaBoolean: Boolean;',
- ' procedure _SetaBoolean(const aValue: Boolean);',
- ' property aBoolean: Boolean read _GetaBoolean write _SetaBoolean;',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' function _GetaBoolean: Boolean;',
- ' procedure _SetaBoolean(const aValue: Boolean);',
- ' Public',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' property aBoolean: Boolean read _GetaBoolean write _SetaBoolean;',
- ' end;',
- '',
- ' { --------------------------------------------------------------------',
- ' TJSAttr2',
- ' --------------------------------------------------------------------}',
- '',
- ' TJSAttr2Rec = record',
- ' aLong: LongInt;',
- ' aBoolean: Boolean;',
- ' end;',
- '',
- ' IJSAttr2 = interface(IJSAttr)',
- ' ['''+FixedGUID+''']',
- ' function _GetaLong: LongInt;',
- ' procedure _SetaLong(const aValue: LongInt);',
- ' property aLong: LongInt read _GetaLong write _SetaLong;',
- ' end;',
- '',
- ' TJSAttr2 = class(TJSAttr,IJSAttr2)',
- ' Private',
- ' function _GetaLong: LongInt;',
- ' procedure _SetaLong(const aValue: LongInt);',
- ' Public',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr2;',
- ' property aLong: LongInt read _GetaLong write _SetaLong;',
- ' end;',
- '',
- 'implementation',
- '',
- 'function TJSAttr._GetaBoolean: Boolean;',
- 'begin',
- ' Result:=ReadJSPropertyBoolean(''aBoolean'');',
- 'end;',
- '',
- 'procedure TJSAttr._SetaBoolean(const aValue: Boolean);',
- 'begin',
- ' WriteJSPropertyBoolean(''aBoolean'',aValue);',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Object'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'function TJSAttr2._GetaLong: LongInt;',
- 'begin',
- ' Result:=ReadJSPropertyLongInt(''aLong'');',
- 'end;',
- '',
- 'procedure TJSAttr2._SetaLong(const aValue: LongInt);',
- 'begin',
- ' WriteJSPropertyLongInt(''aLong'',aValue);',
- 'end;',
- '',
- 'class function TJSAttr2.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Object'';',
- 'end;',
- '',
- 'class function TJSAttr2.Cast(const Intf: IJSObject): IJSAttr2;',
- 'begin',
- ' Result:=TJSAttr2.JOBCast(Intf);',
- 'end;',
- '',
- 'end.',
- '']);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfAttribute_Boolean;
- begin
- TestWebIDL([
- 'interface Attr {',
- ' attribute boolean aBoolean;',
- '};',
- ''],
- ['Type',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' function _GetaBoolean: Boolean;',
- ' procedure _SetaBoolean(const aValue: Boolean);',
- ' property aBoolean: Boolean read _GetaBoolean write _SetaBoolean;',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' function _GetaBoolean: Boolean;',
- ' procedure _SetaBoolean(const aValue: Boolean);',
- ' Public',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' property aBoolean: Boolean read _GetaBoolean write _SetaBoolean;',
- ' end;',
- '',
- 'implementation',
- '',
- 'function TJSAttr._GetaBoolean: Boolean;',
- 'begin',
- ' Result:=ReadJSPropertyBoolean(''aBoolean'');',
- 'end;',
- '',
- 'procedure TJSAttr._SetaBoolean(const aValue: Boolean);',
- 'begin',
- ' WriteJSPropertyBoolean(''aBoolean'',aValue);',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.',
- '']);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfStringifier;
- begin
- TestWebIDL([
- 'interface Attr {',
- ' stringifier;',
- '};',
- ''],
- ['Type',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.',
- '']);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfAttribute_ArrayBuffer;
- begin
- TestWebIDL([
- 'interface Attr {',
- ' [SameObject, Throws] readonly attribute ArrayBuffer signature;',
- '};',
- ''],
- [
- 'Type',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' function _Getsignature: IJSArrayBuffer;',
- ' property signature: IJSArrayBuffer read _Getsignature;',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' function _Getsignature: IJSArrayBuffer;',
- ' Public',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' property signature: IJSArrayBuffer read _Getsignature;',
- ' end;',
- '',
- 'implementation',
- '',
- 'function TJSAttr._Getsignature: IJSArrayBuffer;',
- 'begin',
- ' Result:=ReadJSPropertyObject(''signature'',TJSArrayBuffer) as IJSArrayBuffer;',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.',
- ''
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfAttribute_ArrayBufferView;
- begin
- TestWebIDL([
- 'interface Attr {',
- ' [SameObject, Throws] readonly attribute ArrayBufferView signature;',
- '};',
- ''],
- [
- 'Type',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' function _Getsignature: IJSArrayBufferView;',
- ' property signature: IJSArrayBufferView read _Getsignature;',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' function _Getsignature: IJSArrayBufferView;',
- ' Public',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' property signature: IJSArrayBufferView read _Getsignature;',
- ' end;',
- '',
- 'implementation',
- '',
- 'function TJSAttr._Getsignature: IJSArrayBufferView;',
- 'begin',
- ' Result:=ReadJSPropertyObject(''signature'',TJSArrayBufferView) as IJSArrayBufferView;',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.',
- ''
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfAttribute_ChromeOnly;
- begin
- TestWebIDL([
- 'interface Attr {',
- ' [ChromeOnly, Throws] readonly attribute long soso;',
- '};',
- ''],
- [
- 'Type',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.',
- ''
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_CallBackObjectArg;
- begin
- WebIDLToPas.TypeAliases.Add('AudioWorkletProcessor=IJSObject');
- TestWebIDL([
- ' callback constructor AudioWorkletProcessorConstructor = AudioWorkletProcessor (object options);'
- ],
- [
- 'Type',
- ' // Forward class definitions',
- ' TAudioWorkletProcessorConstructor = function (options: IJSObject): IJSObject of object;',
- '',
- 'implementation',
- '',
- 'function JOBCallAudioWorkletProcessorConstructor(const aMethod: TMethod; var H: TJOBCallbackHelper): PByte;',
- ' var',
- ' options: IJSObject;',
- 'begin',
- ' options:=H.GetObject(TJSObject) as IJSObject;',
- ' Result:=H.AllocIntf(TAudioWorkletProcessorConstructor(aMethod)(options));',
- 'end;',
- '',
- 'end.'
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_CallBackEnumArg;
- begin
- TestWebIDL([
- 'enum E { ',
- ' "allowed", ',
- ' "disallowed" ',
- '}; ',
- 'callback getit = long (E a);'
- ],[
- 'Type',
- '// Forward class definitions',
- ' TE = UnicodeString;',
- ' Tgetit = function (a: TE): LongInt of object;',
- '',
- 'implementation',
- '',
- 'function JOBCallgetit(const aMethod: TMethod; var H: TJOBCallbackHelper): PByte; ',
- 'var',
- ' a: TE;',
- 'begin',
- ' a:=H.GetString;',
- ' Result:=H.AllocLongInt(Tgetit(aMethod)(a));',
- 'end;',
- '',
- 'end.'
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_CallBackSequenceArg;
- begin
- TestWebIDL([
- 'typedef sequence<long> E;',
- 'callback getit = long (E a);'
- ],[
- 'Type',
- '// Forward class definitions',
- ' TEDynArray = IJSArray; // array of long',
- ' Tgetit = function (const a: TEDynArray): LongInt of object;',
- '',
- 'implementation',
- '',
- 'function JOBCallgetit(const aMethod: TMethod; var H: TJOBCallbackHelper): PByte; ',
- 'var',
- ' a: TEDynArray;',
- 'begin',
- ' a:=H.GetObject(TJSArray) as IJSArray;',
- ' Result:=H.AllocLongInt(Tgetit(aMethod)(a));',
- 'end;',
- '',
- 'end.'
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfFunction_Void;
- begin
- TestWebIDL([
- 'interface Attr {',
- ' void append(Attr node);',
- '};',
- ''],
- ['Type',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' procedure append(aNode: IJSAttr);',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' procedure append(aNode: IJSAttr); overload;',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'procedure TJSAttr.append(aNode: IJSAttr);',
- 'begin',
- ' InvokeJSNoResult(''append'',[aNode]);',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.',
- '']);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfFunction_SetEventHandler;
- begin
- TestWebIDL([
- '[LegacyTreatNonObjectAsNull]',
- 'callback EventHandlerNonNull = any (long event);',
- 'typedef EventHandlerNonNull? EventHandler;',
- '',
- 'interface Attr {',
- ' void setEventHandler([TreatNonCallableAsNull] EventHandler handler);',
- '};',
- ''],
- ['Type',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' TEventHandlerNonNull = function (event: LongInt): Variant of object;',
- ' TEventHandler = TEventHandlerNonNull;',
- '',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' procedure setEventHandler(const aHandler: TEventHandler);',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' procedure setEventHandler(const aHandler: TEventHandler); overload;',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'function JOBCallEventHandlerNonNull(const aMethod: TMethod; var H: TJOBCallbackHelper): PByte;',
- 'var',
- ' event: LongInt;',
- 'begin',
- ' event:=H.GetLongInt;',
- ' Result:=H.AllocVariant(TEventHandlerNonNull(aMethod)(event));',
- 'end;',
- '',
- 'procedure TJSAttr.setEventHandler(const aHandler: TEventHandler);',
- 'var',
- ' m: TJOB_Method;',
- 'begin',
- ' m:=TJOB_Method.Create(TMethod(aHandler),@JOBCallEventHandlerNonNull);',
- ' try',
- ' InvokeJSNoResult(''setEventHandler'',[m]);',
- ' finally',
- ' m.free;',
- ' end;',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.',
- '']);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfFunction_Promise;
- begin
- // Promise<void> exitFullscreen();
- TestWebIDL([
- 'interface Attr {',
- ' Promise<void> exitFullscreen();',
- ' Promise<any> addCertException(boolean isTemporary);',
- ' Promise<Attr> fly();',
- '};',
- ''],
- ['Type',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' function exitFullscreen: IJSPromise; // Promise<void>',
- ' function addCertException(aIsTemporary: Boolean): IJSPromise; // Promise<any>',
- ' function fly: IJSPromise; // Promise<Attr>',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' function exitFullscreen: IJSPromise; overload; // Promise<void>',
- ' function addCertException(aIsTemporary: Boolean): IJSPromise; overload; // Promise<any>',
- ' function fly: IJSPromise; overload; // Promise<Attr>',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'function TJSAttr.exitFullscreen: IJSPromise; // Promise<void>',
- 'begin',
- ' Result:=InvokeJSObjectResult(''exitFullscreen'',[],TJSPromise) as IJSPromise;',
- 'end;',
- '',
- 'function TJSAttr.addCertException(aIsTemporary: Boolean): IJSPromise; // Promise<any>',
- 'begin',
- ' Result:=InvokeJSObjectResult(''addCertException'',[aIsTemporary],TJSPromise) as IJSPromise;',
- 'end;',
- '',
- 'function TJSAttr.fly: IJSPromise; // Promise<Attr>',
- 'begin',
- ' Result:=InvokeJSObjectResult(''fly'',[],TJSPromise) as IJSPromise;',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.',
- '']);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfFunction_ArgAny;
- begin
- TestWebIDL([
- 'interface Attr {',
- ' void append(any node);',
- '};',
- ''],
- ['Type',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' procedure append(const aNode: Variant);',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' procedure append(const aNode: Variant); overload;',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'procedure TJSAttr.append(const aNode: Variant);',
- 'begin',
- ' InvokeJSNoResult(''append'',[aNode]);',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.',
- '']);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfFunction_EnumResult;
- begin
- TestWebIDL([
- 'enum E { ',
- ' "allowed", ',
- ' "disallowed" ',
- '}; ',
- 'interface IE { ',
- ' E get(long a); ',
- '};'
- ],[
- 'Type',
- ' // Forward class definitions',
- ' IJSIE = interface;',
- ' TJSIE = class;',
- ' TE = UnicodeString;',
- ' { --------------------------------------------------------------------',
- ' TJSIE',
- ' --------------------------------------------------------------------}',
- ' IJSIE = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' function get(aA: LongInt) : TE;',
- ' end;',
- '',
- ' TJSIE = class(TJSObject,IJSIE)',
- ' Private',
- ' Public',
- ' function get(aA: LongInt) : TE; overload;',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSIE;',
- ' end;',
- '',
- 'implementation',
- '',
- 'function TJSIE.get(aA: LongInt) : TE;',
- 'begin',
- ' Result:=InvokeJSUnicodeStringResult(''get'',[aA]);',
- 'end;',
- '',
- 'class function TJSIE.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''IE'';',
- 'end;',
- '',
- 'class function TJSIE.Cast(const Intf: IJSObject): IJSIE;',
- 'begin',
- ' Result:=TJSIE.JOBCast(Intf);',
- 'end;',
- '',
- 'end.'
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfFunction_SequenceArg;
- begin
- TestWebIDL([
- 'interface Attr {',
- ' boolean vibrate(sequence<long> pattern);',
- '};',
- ''],
- [
- 'Type',
- '',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- '',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' TLongIntDynArray = IJSArray; // array of long',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' function vibrate(const aPattern: TLongIntDynArray): Boolean;',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' function vibrate(const aPattern: TLongIntDynArray): Boolean; overload;',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'function TJSAttr.vibrate(const aPattern: TLongIntDynArray): Boolean;',
- 'begin',
- ' Result:=InvokeJSBooleanResult(''vibrate'',[aPattern]);',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.'
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfFunction_2SequenceArg;
- begin
- TestWebIDL([
- 'interface Attr {',
- ' boolean vibrate(sequence<long> pattern);',
- ' boolean beep(sequence<long> pattern);',
- '};',
- ''],
- [
- 'Type',
- '',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- '',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' TLongIntDynArray = IJSArray; // array of long',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' function vibrate(const aPattern: TLongIntDynArray): Boolean;',
- ' function beep(const aPattern: TLongIntDynArray): Boolean;',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' function vibrate(const aPattern: TLongIntDynArray): Boolean; overload;',
- ' function beep(const aPattern: TLongIntDynArray): Boolean; overload;',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'function TJSAttr.vibrate(const aPattern: TLongIntDynArray): Boolean;',
- 'begin',
- ' Result:=InvokeJSBooleanResult(''vibrate'',[aPattern]);',
- 'end;',
- '',
- 'function TJSAttr.beep(const aPattern: TLongIntDynArray): Boolean;',
- 'begin',
- ' Result:=InvokeJSBooleanResult(''beep'',[aPattern]);',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.'
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfFunction_Constructor;
- begin
- TestWebIDL([
- 'interface Attr {',
- ' constructor(long options); ',
- '};'
- ],
- ['Type',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' constructor Create(aOptions: LongInt); overload;',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'constructor TJSAttr.Create(aOptions: LongInt);',
- 'begin',
- ' JOBCreate([aOptions]);',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.',
- '']);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfFunction_ArrayBufferArg;
- begin
- TestWebIDL([
- 'interface Attr {',
- ' undefined appendBuffer(ArrayBuffer data);',
- '};'
- ],[
- 'Type',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' procedure appendBuffer(aData: IJSArrayBuffer);',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' procedure appendBuffer(aData: IJSArrayBuffer); overload;',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'procedure TJSAttr.appendBuffer(aData: IJSArrayBuffer);',
- 'begin',
- ' InvokeJSNoResult(''appendBuffer'',[aData]);',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.',
- '' ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfFunction_ArrayBufferViewArg;
- begin
- TestWebIDL([
- 'interface Attr {',
- ' undefined appendBuffer(ArrayBufferView data);',
- '};'
- ],[
- 'Type',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' procedure appendBuffer(aData: IJSArrayBufferView);',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' procedure appendBuffer(aData: IJSArrayBufferView); overload;',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'procedure TJSAttr.appendBuffer(aData: IJSArrayBufferView);',
- 'begin',
- ' InvokeJSNoResult(''appendBuffer'',[aData]);',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.',
- '' ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfFunction_SequenceResult;
- begin
- TestWebIDL([
- 'interface Attr {',
- ' sequence<long> vibrate();',
- '};',
- ''],
- [
- 'Type',
- '',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- '',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' TLongIntDynArray = IJSArray; // array of long',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' function vibrate: TLongIntDynArray;',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' function vibrate: TLongIntDynArray; overload;',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'function TJSAttr.vibrate: TLongIntDynArray;',
- 'begin',
- ' Result:=InvokeJSObjectResult(''vibrate'',[],TJSArray) as TLongIntDynArray;',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.'
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfFunction_GlobalSequenceResult;
- begin
- TestWebIDL([
- 'typedef sequence <long> LongSeq;',
- 'interface Attr {',
- ' LongSeq vibrate();',
- '};',
- ''],
- [
- 'Type',
- '',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' TLongSeqDynArray = IJSArray; // array of long',
- '',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' function vibrate: TLongSeqDynArray;',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' function vibrate: TLongSeqDynArray; overload;',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'function TJSAttr.vibrate: TLongSeqDynArray;',
- 'begin',
- ' Result:=InvokeJSObjectResult(''vibrate'',[],TJSArray) as TLongSeqDynArray;',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.'
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfFunction_ChromeOnly;
- begin
- TestWebIDL([
- 'interface Attr {',
- ' [ChromeOnly, Throws] long soso();',
- '};',
- ''],
- [
- 'Type',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.',
- ''
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfFunction_ChromeOnlyNewObject;
- begin
- TestWebIDL([
- 'interface Attr {',
- ' [ChromeOnly, NewObject] ',
- ' ConsoleInstance createInstance(optional ConsoleInstanceOptions options = {});',
- '};'
- ],
- [
- 'Type',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.',
- ''
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfFunction_DictionaryResult;
- begin
- WebIDLToPas.BaseOptions:=WebIDLToPas.BaseOptions+[coDictionaryAsClass];
- TestWebIDL([
- 'dictionary MyDict { long a = 0; };',
- 'interface Attr {',
- ' MyDict get();',
- '};',
- ''],
- [
- 'Type',
- '',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' IJSMyDict = interface;',
- ' TJSMyDict = class;',
- '',
- ' { --------------------------------------------------------------------',
- ' TJSMyDict',
- ' --------------------------------------------------------------------}',
- '',
- ' TJSMyDictRec = record',
- ' a: LongInt;',
- ' end;',
- '',
- ' IJSMyDict = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' function _Geta: LongInt;',
- ' procedure _Seta(const aValue: LongInt);',
- ' property a: LongInt read _Geta write _Seta;',
- ' end;',
- '',
- ' TJSMyDict = class(TJSObject,IJSMyDict)',
- ' Private',
- ' function _Geta: LongInt;',
- ' procedure _Seta(const aValue: LongInt);',
- ' Public',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSMyDict;',
- ' property a: LongInt read _Geta write _Seta;',
- ' end;',
- '',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' function get: TJSMyDict;',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' function get: TJSMyDict; overload;',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'function TJSMyDict._Geta: LongInt;',
- 'begin',
- ' Result:=ReadJSPropertyLongInt(''a'');',
- 'end;',
- '',
- 'procedure TJSMyDict._Seta(const aValue: LongInt);',
- 'begin',
- ' WriteJSPropertyLongInt(''a'',aValue);',
- 'end;',
- '',
- 'class function TJSMyDict.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Object'';',
- 'end;',
- '',
- 'class function TJSMyDict.Cast(const Intf: IJSObject): IJSMyDict;',
- 'begin',
- ' Result:=TJSMyDict.JOBCast(Intf);',
- 'end;',
- '',
- 'function TJSAttr.get: TJSMyDict;',
- 'begin',
- ' Result:=InvokeJSObjectResult(''get'',[],TJSMyDict) as TJSMyDict;',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.'
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfFunction_AliasResult;
- begin
- WebIDLToPas.TypeAliases.Add('Float32Array=IJSFloat32Array');
- TestWebIDL([
- 'interface Attr {',
- ' Float32Array vibrate();',
- '};',
- ''],
- [
- 'Type',
- '',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- '',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' function vibrate: IJSFloat32Array;',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' function vibrate: IJSFloat32Array; overload;',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'function TJSAttr.vibrate: IJSFloat32Array;',
- 'begin',
- ' Result:=InvokeJSObjectResult(''vibrate'',[],TJSArray) as IJSFloat32Array;',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.'
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_IntfFunction_NestedUnionSequence;
- begin
- TestWebIDL([
- 'interface Attr {',
- ' long roundRect((double or sequence<(double or long)>) radii);',
- '};',
- ''],
- [
- 'Type',
- '',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- '',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' // Union of double, sequence',
- ' TAttr_roundRect_radii_Type = Variant;',
- ' TunionDynArray = IJSArray; // array of union',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' function roundRect(aRadii: Double): LongInt;',
- ' function roundRect(const aRadii: TunionDynArray): LongInt;',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' function roundRect(aRadii: Double): LongInt; overload;',
- ' function roundRect(const aRadii: TunionDynArray): LongInt; overload;',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'function TJSAttr.roundRect(aRadii: Double): LongInt;',
- 'begin',
- ' Result:=InvokeJSLongIntResult(''roundRect'',[aRadii]);',
- 'end;',
- '',
- 'function TJSAttr.roundRect(const aRadii: TunionDynArray): LongInt;',
- 'begin',
- ' Result:=InvokeJSLongIntResult(''roundRect'',[aRadii]);',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.'
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_intfFunction_UnionOptional;
- begin
- TestwebIDL(
- ['interface Attr {',
- ' void roundRect((DOMString or sequence<DOMString>) a, optional long b);',
- '};'
- ],[
- 'Type',
- '',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- '',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- ' // Union of DOMString, sequence',
- ' TAttr_roundRect_a_Type = Variant;',
- ' TUnicodeStringDynArray = IJSArray; // array of DOMString',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' procedure roundRect(const aA: UnicodeString; aB: LongInt);',
- ' procedure roundRect(const aA: TUnicodeStringDynArray; aB: LongInt);',
- ' procedure roundRect(const aA: TUnicodeStringDynArray);',
- ' procedure roundRect(const aA: UnicodeString);',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' Public',
- ' procedure roundRect(const aA: UnicodeString; aB: LongInt); overload;',
- ' procedure roundRect(const aA: TUnicodeStringDynArray; aB: LongInt); overload;',
- ' procedure roundRect(const aA: TUnicodeStringDynArray); overload;',
- ' procedure roundRect(const aA: UnicodeString); overload;',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' end;',
- '',
- 'implementation',
- '',
- 'procedure TJSAttr.roundRect(const aA: UnicodeString; aB: LongInt);',
- 'begin',
- ' InvokeJSNoResult(''roundRect'',[aA,aB]);',
- 'end;',
- '',
- 'procedure TJSAttr.roundRect(const aA: TUnicodeStringDynArray; aB: LongInt);',
- 'begin',
- ' InvokeJSNoResult(''roundRect'',[aA,aB]);',
- 'end;',
- '',
- 'procedure TJSAttr.roundRect(const aA: TUnicodeStringDynArray);',
- 'begin',
- ' InvokeJSNoResult(''roundRect'',[aA]);',
- 'end;',
- '',
- 'procedure TJSAttr.roundRect(const aA: UnicodeString);',
- 'begin',
- ' InvokeJSNoResult(''roundRect'',[aA]);',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'end.'
- ]);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_NamespaceAttribute_Boolean;
- begin
- TestWebIDL([
- 'namespace Attr {',
- ' readonly attribute boolean aBoolean;',
- '};',
- ''],
- ['Type',
- ' // Forward class definitions',
- ' IJSAttr = interface;',
- ' TJSAttr = class;',
- ' { --------------------------------------------------------------------',
- ' TJSAttr',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSAttr = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' function _GetaBoolean: Boolean;',
- ' property aBoolean: Boolean read _GetaBoolean;',
- ' end;',
- '',
- ' TJSAttr = class(TJSObject,IJSAttr)',
- ' Private',
- ' function _GetaBoolean: Boolean;',
- ' Public',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSAttr;',
- ' property aBoolean: Boolean read _GetaBoolean;',
- ' end;',
- '',
- 'var ',
- ' Attr : IJSAttr;',
- '',
- 'implementation',
- '',
- 'function TJSAttr._GetaBoolean: Boolean;',
- 'begin',
- ' Result:=ReadJSPropertyBoolean(''aBoolean'');',
- 'end;',
- '',
- 'class function TJSAttr.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''Attr'';',
- 'end;',
- '',
- 'class function TJSAttr.Cast(const Intf: IJSObject): IJSAttr;',
- 'begin',
- ' Result:=TJSAttr.JOBCast(Intf);',
- 'end;',
- '',
- 'initialization',
- ' Attr:=TJSAttr.JOBCreateGlobal(''Attr'');',
- '',
- 'finalization',
- ' Attr:=Nil;',
- '',
- 'end.',
- '']);
- end;
- procedure TTestWebIDL2WasmJob.TestWJ_MaplikeInterface;
- begin
- TestWebIDL([
- ' interface PM {',
- ' readonly maplike<DOMString, boolean>;',
- ' };'
- ],[
- 'Type',
- ' // Forward class definitions',
- ' IJSPM = interface;',
- ' TJSPM = class;',
- ' { --------------------------------------------------------------------',
- ' TJSPM',
- ' --------------------------------------------------------------------}',
- '',
- ' IJSPM = interface(IJSObject)',
- ' ['''+FixedGUID+''']',
- ' function _Getsize: LongInt;',
- ' function get(key: UnicodeString) : Boolean;',
- ' function has(key: UnicodeString) : Boolean;',
- ' function entries : IJSIterator;',
- ' function keys : IJSIterator;',
- ' function values : IJSIterator;',
- ' property size : LongInt read _Getsize;',
- ' end;',
- '',
- ' TJSPM = class(TJSObject,IJSPM)',
- ' Private',
- ' function _Getsize: LongInt;',
- ' Public',
- ' function get(key: UnicodeString) : Boolean;',
- ' function has(key: UnicodeString) : Boolean;',
- ' function entries : IJSIterator;',
- ' function keys : IJSIterator;',
- ' function values : IJSIterator;',
- ' class function JSClassName: UnicodeString; override;',
- ' class function Cast(const Intf: IJSObject): IJSPM;',
- ' property size : LongInt read _Getsize;',
- ' end;',
- '',
- 'implementation',
- '',
- 'function TJSPM._Getsize: LongInt;',
- 'begin',
- ' Result:=ReadJSPropertyLongInt(''size'');',
- 'end;',
- '',
- 'function TJSPM.get(key: UnicodeString) : Boolean;',
- 'begin',
- ' Result:=InvokeJSBooleanResult(''get'',[key]);',
- 'end;',
- '',
- 'function TJSPM.has(key: UnicodeString) : Boolean;',
- 'begin',
- ' Result:=InvokeJSBooleanResult(''has'',[key]);',
- 'end;',
- '',
- 'function TJSPM.entries : IJSIterator;',
- 'begin',
- ' Result:=InvokeJSObjectResult(''entries'',[],TJSIterator) as IJSIterator;',
- 'end;',
- '',
- 'function TJSPM.keys : IJSIterator;',
- 'begin',
- ' Result:=InvokeJSObjectResult(''keys'',[],TJSIterator) as IJSIterator;',
- 'end;',
- '',
- 'function TJSPM.values : IJSIterator;',
- 'begin',
- ' Result:=InvokeJSObjectResult(''values'',[],TJSIterator) as IJSIterator;',
- 'end;',
- '',
- 'class function TJSPM.JSClassName: UnicodeString;',
- 'begin',
- ' Result:=''PM'';',
- 'end;',
- '',
- 'class function TJSPM.Cast(const Intf: IJSObject): IJSPM;',
- 'begin',
- ' Result:=TJSPM.JOBCast(Intf);',
- 'end;',
- '',
- 'end.',
- ''
- ]);
- end;
- initialization
- RegisterTests([TTestWebIDL2Wasmjob]);
- end.
|