wasmjob: added tests for string properties and func results bool, integer, double, object and string

This commit is contained in:
mattias 2022-08-19 19:05:43 +02:00
parent 0b98f34aff
commit 1a04f220a9
2 changed files with 197 additions and 43 deletions

View File

@ -26,6 +26,7 @@ Type
function GetString: string;
function GetBird: TBird;
function CreateBird(const aName: string): TBird;
procedure IncSize;
end;
{ TMyApplication }
@ -99,6 +100,11 @@ begin
Result:=TBird.Create(Name+'.'+aName);
end;
procedure TBird.IncSize;
begin
inc(Size);
end;
function TBird.ArgsToStr(Args: TJSFunctionArguments): string;
var
i: Integer;

View File

@ -20,6 +20,12 @@ type
// functions
procedure IncSize;
function CreateBird(const aName: string): IJSBird;
function GetBoolean: boolean;
function GetInteger: Integer;
function GetDouble: Double;
function GetUnicodeString: UnicodeString;
function GetUtf8String: String;
function GetBird: IJSBird;
// properties
function GetCaption: UnicodeString;
function GetEnabled: boolean;
@ -49,6 +55,12 @@ type
// functions
procedure IncSize;
function CreateBird(const aName: string): IJSBird;
function GetBoolean: boolean;
function GetInteger: Integer;
function GetDouble: Double;
function GetUnicodeString: UnicodeString;
function GetUtf8String: String;
function GetBird: IJSBird;
// properties
function GetCaption: UnicodeString;
function GetEnabled: boolean;
@ -84,19 +96,26 @@ type
procedure AssertEqual(const Msg: string; const Expected, Actual: integer);
procedure AssertEqual(const Msg: string; const Expected, Actual: double);
procedure AssertEqual(const Msg: string; const Expected, Actual: String);
procedure AssertEqual(const Msg: string; const Expected, Actual: UnicodeString);
procedure AssertEqualUS(const Msg: string; const Expected, Actual: UnicodeString);
procedure AssertEqual(const Msg: string; const Expected, Actual: IJSBird);
public
// read/write properties
procedure TestBooleanProperty;
procedure TestIntegerProperty;
procedure TestDoubleProperty;
procedure TestStringProperty;
procedure TestUnicodeStringProperty;
procedure TestUTF8StringProperty;
procedure TestObjectProperty;
// todo procedure TestVariantProperty;
// function
// todo procedure TestCallProcedure;
procedure TestCallProcedure;
procedure TestFuncResultBoolean;
procedure TestFuncResultInteger;
procedure TestFuncResultDouble;
procedure TestFuncResultUnicodeString;
procedure TestFuncResultUTF8String;
procedure TestFuncResultBird;
end;
@ -120,12 +139,21 @@ var
begin
Bird:=TJSBird.JOBCreateGlobal('Bird') as IJSBird;
//TestBooleanProperty;
//TestIntegerProperty;
//TestDoubleProperty;
//TestStringProperty;
TestBooleanProperty;
TestIntegerProperty;
TestDoubleProperty;
TestUnicodeStringProperty;
TestUTF8StringProperty;
TestObjectProperty;
TestCallProcedure;
TestFuncResultBoolean;
TestFuncResultInteger;
TestFuncResultDouble;
//TestFuncResultUnicodeString;
TestFuncResultUTF8String;
TestFuncResultBird;
exit;
JSElem:=JSDocument.getElementById('playground');
@ -134,37 +162,6 @@ begin
writeln('TWasmApp.Run addEventListener click...');
JSElem.addEventListener('click',@OnPlaygroundClick);
writeln('TWasmApp.Run ');
exit;
{ obj:=TJSObject.JOBCreateGlobal('Bird');
obj.WriteJSPropertyUnicodeString('Caption','Root');
writeln('AAA1 ');
//u:='äbc';
//obj.InvokeJSNoResult('Proc',[]);
//d:=obj.InvokeJSDoubleResult('GetDouble',[u,12345678901]);
writeln('Create Freddy...');
Freddy:=obj.InvokeJSObjectResult('CreateChick',['Freddy'],TJSBird) as TJSBird;
writeln('AAA5 ',Freddy.Name);
writeln('Create Alice...');
Alice:=obj.InvokeJSObjectResult('CreateChick',['Alice'],TJSBird) as TJSBird;
writeln('Freddy.Child:=Alice...');
Freddy.Child:=Alice;
aBird:=Freddy.Child;
writeln('Freddy.Child=',aBird.Name);
//Freddy.Size:=123;
//writeln('Freddy.Size=',Freddy.Size);
JSValue:=Freddy.ReadJSPropertyValue('Child');
writeln('JSValue: ',JSValue.Kind,' ',JSValue.AsString);
writeln('Freeing Freddy...');
Freddy.Free;
writeln('Freeing Alice...');
Alice.Free;
}
end;
procedure TWasmApp.TestBooleanProperty;
@ -207,9 +204,26 @@ begin
AssertEqual('Bird.Scale:=0.12345678901234',0.12345678901234,Bird.Scale);
end;
procedure TWasmApp.TestStringProperty;
procedure TWasmApp.TestUnicodeStringProperty;
begin
Prefix:='TWasmApp.TestStringProperty';
Prefix:='TWasmApp.TestUnicodeStringProperty';
Bird.Caption:='';
AssertEqualUS('Bird.Caption:=''''','',Bird.Caption);
Bird.Caption:='a';
AssertEqualUS('Bird.Caption:=''a''','a',Bird.Caption);
Bird.Caption:='abc';
AssertEqualUS('Bird.Caption:=''abc''','abc',Bird.Caption);
Bird.Caption:=#13;
AssertEqualUS('Bird.Caption:=#13',#13,Bird.Caption);
Bird.Caption:='ä';
AssertEqualUS('Bird.Caption:=''ä''','ä',Bird.Caption);
Bird.Caption:='🎉';
AssertEqualUS('Bird.Caption:=''🎉''','🎉',Bird.Caption);
end;
procedure TWasmApp.TestUTF8StringProperty;
begin
Prefix:='TWasmApp.TestUTF8StringProperty';
Bird.Name:='';
AssertEqual('Bird.Name:=''''','',Bird.Name);
Bird.Name:='a';
@ -229,16 +243,120 @@ var
Lisa, Bart: IJSBird;
begin
Prefix:='TWasmApp.TestObjectProperty';
Bird.Name:='TestObjectProperty';
Bird.Child:=nil;
AssertEqual('Bird.Child:=nil',nil,Bird.Child);
Lisa:=Bird.CreateBird('Lisa');
AssertEqual('Lisa','Root.Lisa',Lisa.Name);
AssertEqual('Lisa','TestObjectProperty.Lisa',Lisa.Name);
Bart:=Bird.CreateBird('Bart');
AssertEqual('Bart','Root.Bart',Bart.Name);
AssertEqual('Bart','TestObjectProperty.Bart',Bart.Name);
Bird.Child:=Lisa;
AssertEqual('Bird.Child:=Lisa',Lisa,Bird.Child);
end;
procedure TWasmApp.TestCallProcedure;
begin
Prefix:='TWasmApp.TestCallProcedure';
Bird.Size:=13;
AssertEqual('Bird.Size:=13',13,Bird.Size);
Bird.IncSize;
AssertEqual('Bird.IncSize',14,Bird.Size);
end;
procedure TWasmApp.TestFuncResultBoolean;
begin
Prefix:='TWasmApp.TestFuncResultBoolean';
Bird.Enabled:=true;
AssertEqual('Bird.Enabled:=true',true,Bird.Enabled);
AssertEqual('Bird.GetBoolean',true,Bird.GetBoolean);
Bird.Enabled:=false;
AssertEqual('Bird.Enabled:=false',false,Bird.Enabled);
AssertEqual('Bird.GetBoolean',false,Bird.GetBoolean);
end;
procedure TWasmApp.TestFuncResultInteger;
begin
Prefix:='TWasmApp.TestFuncResultInteger';
Bird.Size:=73;
AssertEqual('Bird.Size:=73',73,Bird.Size);
AssertEqual('Bird.GetInteger',73,Bird.GetInteger);
Bird.Size:=low(integer);
AssertEqual('Bird.Size:=low(integer)',low(integer),Bird.Size);
AssertEqual('Bird.GetInteger',low(integer),Bird.GetInteger);
Bird.Size:=high(integer);
AssertEqual('Bird.Size:=high(integer)',high(integer),Bird.Size);
AssertEqual('Bird.GetInteger',high(integer),Bird.GetInteger);
end;
procedure TWasmApp.TestFuncResultDouble;
begin
Prefix:='TWasmApp.TestFuncResultDouble';
Bird.Scale:=0.3;
AssertEqual('Bird.GetDouble 0.3',0.3,Bird.GetDouble);
Bird.Scale:=-0.3;
AssertEqual('Bird.GetDouble -0.3',-0.3,Bird.GetDouble);
Bird.Scale:=NaN;
if not IsNan(Bird.GetDouble) then
Fail('Bird.GetDouble NaN');
Bird.Scale:=Infinity;
AssertEqual('Bird.GetDouble Infinity',Infinity,Bird.GetDouble);
Bird.Scale:=NegInfinity;
AssertEqual('Bird.GetDouble NegInfinity',NegInfinity,Bird.GetDouble);
Bird.Scale:=0.12345678901234;
AssertEqual('Bird.GetDouble 0.12345678901234',0.12345678901234,Bird.GetDouble);
end;
procedure TWasmApp.TestFuncResultUnicodeString;
begin
Prefix:='TWasmApp.TestFuncResultUnicodeString';
Bird.Name:='';
AssertEqualUS('Bird.GetUnicodeString ''''','',Bird.GetUnicodeString);
Bird.Name:='a';
AssertEqualUS('Bird.GetUnicodeString ''a''','a',Bird.GetUnicodeString);
Bird.Name:='abc';
AssertEqualUS('Bird.GetUnicodeString ''abc''','abc',Bird.GetUnicodeString);
Bird.Name:=#13;
AssertEqualUS('Bird.GetUnicodeString #13',#13,Bird.GetUnicodeString);
Bird.Name:='ä';
AssertEqualUS('Bird.GetUnicodeString ''ä''','ä',Bird.GetUnicodeString);
Bird.Name:='🎉';
AssertEqualUS('Bird.GetUnicodeString ''🎉''','🎉',Bird.GetUnicodeString);
end;
procedure TWasmApp.TestFuncResultUTF8String;
begin
Prefix:='TWasmApp.TestFuncResultUTF8String';
Bird.Name:='';
AssertEqual('Bird.GetUTF8String ''''','',Bird.GetUTF8String);
Bird.Name:='a';
AssertEqual('Bird.GetUTF8String ''a''','a',Bird.GetUTF8String);
Bird.Name:='abc';
AssertEqual('Bird.GetUTF8String ''abc''','abc',Bird.GetUTF8String);
Bird.Name:=#13;
AssertEqual('Bird.GetUTF8String #13',#13,Bird.GetUTF8String);
Bird.Name:='ä';
AssertEqual('Bird.GetUTF8String ''ä''','ä',Bird.GetUTF8String);
Bird.Name:='🎉';
AssertEqual('Bird.GetUTF8String ''🎉''','🎉',Bird.GetUTF8String);
end;
procedure TWasmApp.TestFuncResultBird;
var
Lisa: IJSBird;
begin
Prefix:='TWasmApp.TestFuncResultBird';
Bird.Name:='TestFuncResultBird';
Bird.Child:=nil;
AssertEqual('Bird.Child:=nil',nil,Bird.Child);
AssertEqual('Bird.GetBird',nil,Bird.GetBird);
Lisa:=Bird.CreateBird('Lisa');
AssertEqual('Lisa','TestFuncResultBird.Lisa',Lisa.Name);
Bird.Child:=Lisa;
AssertEqual('Bird.Child:=Lisa',Lisa,Bird.Child);
AssertEqual('Bird.GetBird',Lisa,Bird.GetBird);
end;
procedure TWasmApp.Fail(const Msg: string);
begin
writeln('TWasmApp.Fail ',Prefix+': '+Msg);
@ -273,7 +391,7 @@ begin
Fail(Msg+'. Expected "'+Expected+'", but got "'+Actual+'"');
end;
procedure TWasmApp.AssertEqual(const Msg: string; const Expected,
procedure TWasmApp.AssertEqualUS(const Msg: string; const Expected,
Actual: UnicodeString);
begin
if Expected=Actual then exit;
@ -308,6 +426,36 @@ begin
Result:=InvokeJSObjectResult('CreateBird',[aName],TJSBird) as IJSBird;
end;
function TJSBird.GetBoolean: boolean;
begin
Result:=InvokeJSBooleanResult('GetBoolean',[]);
end;
function TJSBird.GetInteger: Integer;
begin
Result:=InvokeJSLongIntResult('GetInteger',[]);
end;
function TJSBird.GetDouble: Double;
begin
Result:=InvokeJSDoubleResult('GetDouble',[]);
end;
function TJSBird.GetUnicodeString: UnicodeString;
begin
Result:=InvokeJSUnicodeStringResult('GetString',[]);
end;
function TJSBird.GetUtf8String: String;
begin
Result:=InvokeJSUtf8StringResult('GetString',[]);
end;
function TJSBird.GetBird: IJSBird;
begin
Result:=InvokeJSObjectResult('GetBird',[],TJSBird) as IJSBird;
end;
function TJSBird.GetCaption: UnicodeString;
begin
Result:=ReadJSPropertyUnicodeString('Caption');