Skip to content

Android32 with incorrect TestCase parameters #327

@viniciusfbb

Description

@viniciusfbb

DUnitX is not calling the test with the correct TestCase parameters on Android 32 bits, when there are many Singles or Doubles in the parameters. I made a small project reproducing the problem (download the full project here: DUnitXBug.zip). Here's the code:

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Math.Vectors,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Memo.Types,
  FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo,

  DUnitX.TestFramework;

type
  [TestFixture]
  TT1 = class
  public
    [TestCase('1', 'str1-value,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,str2-value')]
    procedure Test(const AStr1: string; const F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20: Single; const AStr2: string);
  end;

  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
var
  LRunner: ITestRunner;
  LResults: IRunResults;
  LTestResult: ITestResult;
begin
  LRunner := TDUnitX.CreateRunner;
  LRunner.UseRTTI := True;
  LRunner.FailsOnNoAsserts := False;
  LResults := LRunner.Execute;

  // Show the results in a TMemo
  Memo1.Lines.Text := LResults.ToString;
  for LTestResult in LResults.GetAllTestResults do
    Memo1.Lines.Add(LTestResult.Message);
end;

{ TT1 }

procedure TT1.Test(const AStr1: string; const F1, F2, F3, F4, F5, F6, F7, F8,
  F9, F10, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20: Single;
  const AStr2: string);
begin
  Assert.AreEqual('str1-value', AStr1);
  Assert.AreEqual(1, F1, TEpsilon.Position);
  Assert.AreEqual(2, F2, TEpsilon.Position);
  Assert.AreEqual(3, F3, TEpsilon.Position);
  Assert.AreEqual(4, F4, TEpsilon.Position);
  Assert.AreEqual(5, F5, TEpsilon.Position);
  Assert.AreEqual(6, F6, TEpsilon.Position);
  Assert.AreEqual(7, F7, TEpsilon.Position);
  Assert.AreEqual(8, F8, TEpsilon.Position);
  Assert.AreEqual(9, F9, TEpsilon.Position);
  Assert.AreEqual(10, F10, TEpsilon.Position);
  Assert.AreEqual(11, F11, TEpsilon.Position);
  Assert.AreEqual(12, F12, TEpsilon.Position);
  Assert.AreEqual(13, F13, TEpsilon.Position);
  Assert.AreEqual(14, F14, TEpsilon.Position);
  Assert.AreEqual(15, F15, TEpsilon.Position);
  Assert.AreEqual(16, F16, TEpsilon.Position);
  Assert.AreEqual(17, F17, TEpsilon.Position);
  Assert.AreEqual(18, F18, TEpsilon.Position);
  Assert.AreEqual(19, F19, TEpsilon.Position);
  Assert.AreEqual(20, F20, TEpsilon.Position);
  Assert.AreEqual('str2-value', AStr2);
end;

initialization
  TDUnitX.RegisterTestFixture(TT1);
end.

Windows result (expected):
image

Android32 result (wrong):
Screenshot_20230106-092451

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions