From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id 0D3B2D81051 for ; Fri, 22 Sep 2023 15:04:11 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=TBX9bMa4QuM/pOtd92ETdVzs0E6U8zfsDjQzoE/xOi8=; c=relaxed/simple; d=groups.io; h=Subject:To:From:User-Agent:MIME-Version:Date:References:In-Reply-To:Message-ID:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Type; s=20140610; t=1695395050; v=1; b=eUnqF102SX9L2h7sCtXlIX9okJmuK6jm6j5zzBlqz2asFamLTQKC6JUXxr7nJ7wI8cC7hLWc d+AGd+N3VWXuRLLt/eb2MZIA2yuNsFl784Rkwzcry9OhDZ3M6UsteewZOY1UJWfkH2EreJa//3y IWf4NUMlaBhAD/EmpjqSjd5Q= X-Received: by 127.0.0.2 with SMTP id sKA1YY7687511xMXKwPDlYOy; Fri, 22 Sep 2023 08:04:10 -0700 Subject: Re: [edk2-devel] Problems mocking UEFI Protocol in gMock To: CrossedCarpet ,devel@edk2.groups.io From: "CrossedCarpet" X-Originating-Location: RO (146.70.128.215) X-Originating-Platform: Linux Chrome 116 User-Agent: GROUPS.IO Web Poster MIME-Version: 1.0 Date: Fri, 22 Sep 2023 08:04:09 -0700 References: In-Reply-To: Message-ID: <10445.1695395049741883261@groups.io> Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,crossedcarpet@hotmail.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: bbZyl99GGTMy0NVeQNEfX81rx7686176AA= Content-Type: multipart/alternative; boundary="FOHrSzj7cAViKCOsFRT2" X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=eUnqF102; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=hotmail.com (policy=none) --FOHrSzj7cAViKCOsFRT2 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Greetings, A week long collaboration between me and Gpt yielded this functioning mock = of a sample UEFI Protocol: struct SampleProtocol { INTN=C2=A0 =C2=A0 (*GetVersion)( ); }; struct MockSampleProtocol : public SampleProtocol { static MockSampleProtocol=C2=A0 =C2=A0 *instance; MockSampleProtocol ( ) { // Assign the instance pointer instance =3D this; // Point the function pointer in TestStruct to the static method GetVersion =3D StaticGetVersion; } // Define a static method that forwards the call to the mock method static INTN StaticGetVersion ( ) { return instance->MockGetVersion (); } MOCK_METHOD (INTN, MockGetVersion, ()); }; MockSampleProtocol=C2=A0 *MockSampleProtocol::instance =3D nullptr; TEST (SampleProtocolTest, SampleTest) { MockSampleProtocol=C2=A0 mockSampleProtocol; SampleProtocol=C2=A0 =C2=A0 =C2=A0 *sampleProtocol; sampleProtocol =3D &mockSampleProtocol; EXPECT_CALL (mockSampleProtocol, MockGetVersion) .WillOnce (Return (42)); ASSERT_EQ (42, sampleProtocol->GetVersion ()); } In your opinion, is this an appropriate approach? I suppose that mocking a UEFI protocol is something common, so I wonder if = this w ould be worth documenting? Best Regards, Me & Gpt -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#109013): https://edk2.groups.io/g/devel/message/109013 Mute This Topic: https://groups.io/mt/101360319/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- --FOHrSzj7cAViKCOsFRT2 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Greetings,
A week long collaboration between me and Gpt yielded this f= unctioning mock of a sample UEFI Protocol:

struct SampleProtocol {
  INTN    (*GetVersion)(
    );
};
 
struct MockSampleProtocol : public SampleProtocol {
  static MockSampleProtocol    *instance;
 
  MockSampleProtocol (
                    &= nbsp; )
  {
    // Assign the instance pointer
    instance =3D this;
 
    // Point the function pointer in TestStruct to the static= method
    GetVersion =3D StaticGetVersion;
  }
 
  // Define a static method that forwards the call to the mock met= hod
  static INTN
  StaticGetVersion (
    )
  {
    return instance->MockGetVersion ();
  }
 
  MOCK_METHOD (INTN, MockGetVersion, ());
};
 
MockSampleProtocol  *MockSampleProtocol::instance =3D nullptr;
 
TEST (SampleProtocolTest, SampleTest) {
  MockSampleProtocol  mockSampleProtocol;
  SampleProtocol      *sampleProtocol;
 
  sampleProtocol =3D &mockSampleProtocol;
  EXPECT_CALL (mockSampleProtocol, MockGetVersion)
    .WillOnce (Return (42));
 
  ASSERT_EQ (42, sampleProtocol->GetVersion ());
}

In your opinion, is= this an appropriate approach? 
I suppose that mocking a = UEFI protocol is something common, so I wonder if this woul= d be worth documenting?

Best Regards,
Me & Gpt 
_._,_._,_

Groups.io Links:

=20 You receive all messages sent to this group. =20 =20

View/Reply Online (#109013) | =20 | Mute= This Topic | New Topic
Your Subscriptio= n | Contact Group Owner | Unsubscribe [rebecca@openfw.io]

_._,_._,_
--FOHrSzj7cAViKCOsFRT2--